MySQL必知必会之15-20_MySQL
bitsCN.com
15.联结表
SQL最强大的功能之一就是能在数据检索查询的执行中联结表。联结是利用SQL的SELECT能执行的最重要的操作。
关系表的设计是要保证把信息分解成多个表,一类数据一个表,各表通过一定的关系互相关联。
外键:外键为某个表的一列,它包含另一个表的主键值,定义了两个表之间的关系。
可伸缩性:能够适应不断增加的工作量而不失败。
15.1 联结
联结是一种机制,用来在一条select语句中关联表,因此称之为联结。使用特殊的语法,可以联结多个表返回一组输出,联结在运行时关联表中正确的行。
15.2 创建联结
SELECT vend_name,prod_name,prod_price FROMvendors,products WHERE vendo.vend_id = products.vend_id ORDER BYvend_name,prod_name;
+-------------+----------------+------------+
| vend_name | prod_name | prod_price |
+-------------+----------------+------------+
| ACME | Bird seed | 10.00 |
| ACME | Carrots | 2.50 |
| ACME | Detonator | 13.00 |
| ACME | Safe | 50.00 |
| ACME | Sling | 4.49 |
| ACME | TNT (1 stick) | 2.50 |
| ACME | TNT (5 sticks) | 10.00 |
| Anvils R Us | .5 ton anvil | 5.99 |
| Anvils R Us | 1 ton anvil | 9.99 |
| Anvils R Us | 2 ton anvil | 14.99 |
| Jet Set | JetPack 1000 | 35.00 |
| Jet Set | JetPack 2000 | 55.00 |
| LT Supplies | Fuses | 3.42 |
| LT Supplies | Oil can | 8.99 |
+-------------+----------------+------------+
14 rows in set (0.05 sec)
应该保证所有联结都有WHERE子句,否则MySQL将返回比想要的数据多得多的数据。在引用的列可能出现二义性时,必须使用完全限定列名(用一个点分隔的表名和列名)。
15.3 内部联结
基于两个表之间相等测试的联结称为等值联结,也叫内部联结。可以使用稍微不同的语法来实现这种类型的联结。
SELECT vend_name,prod_name,prod_price FROMvendors INNER JOIN products ON vendors.vend_id = products.vend_id;
这里两个表之间的关系式FROM子句的组成部分,以INNER JOIN指定。在使用这种语法时,联结条件用特定的ON子句而不是WHERE子句给出。传递给ON的实际条件与传递给WHERE的相同。
15.4联结多个表
SELECT cust_name,cust_contact FROMcustomers,orders,orderitems WHERE customers.cust_id = orders.cust_id ANDorderitems.order_num = orders.order_num AND prod_id = 'TNT2';
+----------------+--------------+
| cust_name | cust_contact |
+----------------+--------------+
| Coyote Inc. | Y Lee |
| Yosemite Place | Y Sam |
+----------------+--------------+
2 rows in set (0.02 sec)
这里实现了14章中子查询的功能。
16.创建高级联结
16.1使用表别名
SELECT cust_name,cust_contact FROM customersAS c,orders AS o,orderitemsAS oi WHERE c.cust_id = o.cust_id AND oi.order_num=o.order_numAND prod_id = 'TNT2';
表别名布局能用于WHERE子句还可以用于SELECT的列表,ORDER BY子句以及语句的其他部分。
16.2使用不同类型的联结
自联结,自燃联结和外部联结
16.2.1 自联结
SELECT p1.prod_id,p1.prod_name FROMproducts AS p1,products AS p2 WHERE p1.vend_id = p2.vend_id AND p2.prod_id ='DTNTR';
16.2.2 自然联结
自然联结排除多次出现,使每个列值返回一次。事实上,我们建立的每个内部联结都是自然联结。
16.2.3外部联结
mysql> SELECTcustomers.cust_id,orders.order_num FROM customers LEFT OUTER JOIN
orders ON customers.cust_id =orders.cust_id;
+---------+-----------+
| cust_id | order_num |
+---------+-----------+
| 10001 | 20005 |
| 10001 | 20009 |
| 10002 | NULL |
| 10003 | 20006 |
| 10004 | 20007 |
| 10005 | 20008 |
+---------+-----------+
6 rows in set (0.00 sec)
与内部联结关联两个表中的行不同的是外部联结还包括没有关联的行。在使用OUTER JOIN时,必须使用RIGHT或LEFT关键字指定包括其所有行的表(RIGHT指出OUTER JOIN右边的表,LEFT指出OUTER JOIN左边的表)。
16.3使用带聚集函数的联结
mysql> SELECTcustomers.cust_name,customers.cust_id,COUNT(orders.order_num) AS N
num_ord FROM customers INNER JOIN orders ONcustomers.cust_id = orders.cust_id G
ROUP BY customers.cust_id;
+----------------+---------+----------+
| cust_name | cust_id | Nnum_ord |
+----------------+---------+----------+
| Coyote Inc. | 10001 | 2 |
| Wascals | 10003 | 1 |
| Yosemite Place | 10004 | 1 |
| E Fudd | 10005 | 1 |
+----------------+---------+----------+
4 rows in set (0.00 sec)
17.组合查询
组合查询也通常称为并(union)或复合查询
有两种基本情况,其中需要使用组合查询:
1)在单个查询中从不同的表返回类似结构的数据
2)对单个表执行多个查询,按单个查询返回数据
17.1创建组合查询
SELECT vend_id,prod_id,prod_price FROM productsWHERE prod_price
将UNION换位UNION ALL可以可以包含不同SELECT子句选中的重复的列
17.2 UNION规则
1)UNION必须由两条或两条以上的SELECT语句组成,语句之间用关键字UNION分隔。
2)UNION中的 每个查询必须包含相同的列、表达式或聚集函数
3)列数据类型可以不完全相同,但必须兼容
17.3对组合查询结果排序
ORDER BY必须出现在最后一条SELECT语句之后
18.全文本搜索
在进行全文本搜索之前,首先应将表中的一列或多列设为FULLTEXT。然后使用Match()和Against()执行全文搜索,其中Match()指定被搜索的列,Against()指定要使用的搜索表达式。
18.1进行全文本搜索
SELECT note_text FROM productnotes WHERE Match(note_text)Against('rabbit');
+-------------------------------------------------------------------------------
----------------------------------------+
| note_text
|
+-------------------------------------------------------------------------------
----------------------------------------+
| Customer complaint: rabbit has been ableto detect trap, food apparently less
effective now. |
| Quantity varies, sold by the sack load.
All guaranteed to be bright and orange, andsuitable for use as rabbit bait. |
+-------------------------------------------------------------------------------
----------------------------------------+
2 rows in set (0.05 sec)
上面输出的两行结果的输出顺序是进过排序后得到的,也就是包含词rabbit作为第3个词的等级比作为第20个词的行高。下面演示全文本搜索如何排序工作。
mysql> SELECT note_text,Match(note_text)Against('rabbit') AS rank FROM productn
otes;
+-------------------------------------------------------------------------------
-----------------------------------------------------------------------------+--
----------------+
| note_text
| r
ank |
+-------------------------------------------------------------------------------
-----------------------------------------------------------------------------+--
----------------+
| Customer complaint:
Sticks not inpidually wrapped, too easyto mistakenly detonate all at once.
Recommend inpidual wrapping. | 0 |
| Can shipped full, refills not available.
Need to order new can if refill needed.
| 0 |
| Safe is combination locked, combinationnot provided with safe.
This is rarely a problem as safes aretypically blown up or dropped by customers
. | 0 |
| Quantity varies, sold by the sack load.
All guaranteed to be bright and orange, andsuitable for use as rabbit bait.
| 1.59055435657501 |
| Included fuses are short and have beenknown to detonate too quickly for some
customers.
Longer fuses are available (item FU1) andshould be recommended. |
0 |
| Matches not included, recommend purchaseof matches or detonator (item DTNTR).
|
0 |
| Please note that no returns will beaccepted if safe opened using explosives.
|
0 |
| Multiple customer returns, anvils failingto drop fast enough or falling backw
ards on purchaser. Recommend that customerconsiders using heavier anvils. |
0 |
| Item is extremely heavy. Designed for dropping,not recommended for use with s
lings, ropes, pulleys, or tightropes. |
0 |
| Customer complaint: rabbit has been ableto detect trap, food apparently less
effective now. | 1
.64080536365509 |
| Shipped unassembled, requires commontools (including oversized hammer).
|
0 |
| Customer complaint:
Circular hole in safe floor can apparentlybe easily cut with handsaw.
| 0 |
| Customer complaint:
Not heavy enough to generate flying starsaround head of victim. If being purcha
sed for dropping, recommend ANV02 or ANV03instead. | 0 |
| Call from inpidual trapped in safeplummeting to the ground, suggests an esc
ape hatch be added.
Comment forwarded to vendor. | 0 |
+-------------------------------------------------------------------------------
-----------------------------------------------------------------------------+--
----------------+
14 rows in set (0.03 sec)
这里,在SELECT而不是WHERE子句中使用Match()和Against()。这使所有行都被返回。Match()和Against()用来建立一个计算列,此列包含全文本搜索计算出的等级值。等级有MySQL根据行中词的数目、唯一词的数目、整个索引中词的总数以及包含该词的行的数目计算出来。
18.2使用查询扩展
查询扩展用来设法房款所返回的全文本搜素结果的范围。在使用查询扩展时,MySQL对数据和索引进行两边扫描来完成搜索:
1) 首先,进行一个基本的全文本搜索,找粗与搜索条件匹配的所有行
2) 其次,MySQL检查这些匹配行并进行选择所有有用的词(我们将会简要地解释MySQL如何判定什么有用,什么无用)
3) 再其次,MySQL再次进行全文本搜索,这次不仅使用原来的条件,而且还使用所有有用的词
mysql> select note_text FROMproductnotes WHERE Match(note_text) Against('anvils
' WITH QUERY EXPANSION);
+-------------------------------------------------------------------------------
---------------------------------------------------------------------------+
| note_text
|
+-------------------------------------------------------------------------------
---------------------------------------------------------------------------+
| Multiple customer returns, anvils failingto drop fast enough or falling backw
ards on purchaser. Recommend that customerconsiders using heavier anvils. |
| Customer complaint:
Sticks not inpidually wrapped, too easyto mistakenly detonate all at once.
Recommend inpidual wrapping. |
| Customer complaint:
Not heavy enough to generate flying starsaround head of victim. If being purcha
sed for dropping, recommend ANV02 or ANV03instead. |
| Please note that no returns will beaccepted if safe opened using explosives.
|
| Customer complaint: rabbit has been ableto detect trap, food apparently less
effective now. |
| Customer complaint:
Circular hole in safe floor can apparentlybe easily cut with handsaw.
|
| Matches not included, recommend purchaseof matches or detonator (item DTNTR).
|
+-------------------------------------------------------------------------------
---------------------------------------------------------------------------+
7 rows in set (0.00 sec)
这里第一行包含词anvils,因此等级最高。第二行与anvils无关,但因为它包含第一行中的两个词(customer和recommend),所以也被检索出来。接下去的几行也会如此。
18.3布尔文本搜索
MySQL支持全文本搜索的另外一种形式,布尔搜索,可以提供如下内容的细节:
1) 要匹配的词
2) 要排斥的词(如果某行包含这种词,则不返回改行,即使它包含要匹配的词)
3) 排列提示(指定某些词比其他次更重要,更重的词等级更高)
4) 表达式分组
5) 另外一些内容
布尔方式不同于一般的全文本搜索的地方在于:即使没有定义FULLTEXT索引,也可以使用它。
布尔操作符与说明如下:
+ 包含,词必须存在
- 排除,词必须不出现
> 包含,而且增加等级值
() 把词组成子表达式
~ 取消一个词的排序值
* 词尾的通配符
“ ” 定义一个短语
SELECT note_text FROM productnotes WHERE Match(note_text)Against('heavy' IN BOOLEAN MODE);//输出结果如下
+-------------------------------------------------------------------------------
---------------------------------------------------------------------------+
| note_text
|
+-------------------------------------------------------------------------------
---------------------------------------------------------------------------+
| Item is extremely heavy. Designed fordropping, not recommended for use with s
lings, ropes, pulleys, or tightropes. |
| Customer complaint:
Not heavy enough to generate flying starsaround head of victim. If being purcha
sed for dropping, recommend ANV02 or ANV03instead. |
+-------------------------------------------------------------------------------
---------------------------------------------------------------------------+
2 rows in set (0.00 sec)
这里使用了关键字IN BOOLEAN MODEN
mysql> SELECT note_text FROMproductnotes WHERE Match(note_text) Against('heavy
-rope*' IN BOOLEAN MODE);
+-------------------------------------------------------------------------------
---------------------------------------------------------------------------+
| note_text
|
+-------------------------------------------------------------------------------
---------------------------------------------------------------------------+
| Customer complaint:
Not heavy enough to generate flying starsaround head of victim. If being purcha
sed for dropping, recommend ANV02 or ANV03instead. |
+-------------------------------------------------------------------------------
---------------------------------------------------------------------------+
1 row in set (0.00 sec)
这里-rope*明确地指示MySQL排除包含rope*。
下面举几个例子
SELECT note_text FROM productnotes WHEREMatch(note_text) Against(‘+rabbit +bait’ IN BOOLEAN MODE);//这个搜索匹配包含词rabbit和bait的行
SELECT note_text FROM productnotes WHEREMatch(note_text) Against(‘rabbit bait’ IN BOOLEAN MODE);//没有指定操作符,这个搜索匹配rabbit和bait中的至少一个词的行
SELECT note_text FROM productnotes WHEREMatch(note_text) Against(‘”rabbit +bait”’ IN BOOLEAN MODE);//这个词匹配短语rabbitbait而不是匹配两个词rabbit和bait
SELECT note_text FROM productnotes WHEREMatch(note_text) Against(‘>rabbit SELECT note_text FROM productnotes WHEREMatch(note_text) Against(‘+safe +( 19.插入数据 19.1插入完整的行 mysql> INSERT INTOcustomers(cust_name,cust_address,cust_city,cust_state,cust_zi p,cust_country,cust_contact,cust_email)VALUES('Pep E. Lapew','100 main Street', 'LosAngeles','CA','90046','USA','NULL','NULL'); Query OK, 1 row affected (0.06 sec) 19.2插入多个行 mysql> INSERT INTOcustomers(cust_name,cust_address,cust_city,cust_state,cust_zi p,cust_country) VALUES('Pep E. Lapew','100main Street', 'Los Angeles','CA','90046','USA'),(‘M.Martian’,’42 Galaxy Way’,’New York’,’NY’,’11213’,’USA’); 19.3插入检索出的数据 INSERT INTOcustomers(cust_name,cust_address,cust_city,cust_state,cust_zi p,cust_country)SELECTcust_id,cust_contact,cust_email,cust_name,cust_address,cust_city,cust_state,cust_zip,cust_countryFROM custnew; 20.更新和删除数据 20.1跟新数据 两种方式 1)更新表中所有行,不加WHERE 2)更新表中特定行,加WHERE UPDATE语句由3个部分组成,分别是: 1) 要更新的表 2) 列名和他们的新值 3) 确定要更新的过滤条件 mysql> UPDATE customers SET cust_name ='The Fudds',cust_email = 'elmer@fudd.com ' WHERE cust_id = 10005; Query OK, 1 row affected (0.08 sec) Rows matched: 1 Changed: 1 Warnings: 0 20.2删除数据 两种方式: 1) 从表中删除特定的行,不省略WHERE子句 2) 从表中删除所有行,省略WHERE子句 DELETE FROM customers WHERE cust_id = 10006; DELETE删除的是表的内容而不是表本身 要删除所有行,不要使用DELETE,用TRUNCATETABLE; ==参考MySQL必知必会

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Microsoft Word 문서는 저장 시 일부 메타데이터를 포함합니다. 이러한 세부 정보는 문서 작성 날짜, 작성자, 수정 날짜 등 문서 식별에 사용됩니다. 또한 문자 수, 단어 수, 단락 수 등과 같은 기타 정보도 있습니다. 다른 사람이 값을 알 수 없도록 작성자나 마지막 수정 정보 또는 기타 정보를 제거하려는 경우 방법이 있습니다. 이번 글에서는 문서 작성자와 최종 수정 정보를 제거하는 방법을 살펴보겠습니다. Microsoft Word 문서에서 작성자 및 마지막 수정 정보 제거 1단계 – 다음으로 이동

iOS 17에는 두 개의 iPhone을 터치하여 누군가와 연락처 정보를 교환할 수 있는 새로운 AirDrop 기능이 있습니다. NameDrop이라고 하며 작동 방식은 다음과 같습니다. 전화를 걸거나 문자를 보내기 위해 새로운 사람의 전화번호를 입력하는 대신, NameDrop을 사용하면 iPhone을 상대방의 iPhone 근처에 두기만 하면 연락처 정보를 교환하여 상대방이 귀하의 전화번호를 알 수 있습니다. 두 장치를 함께 놓으면 연락처 공유 인터페이스가 자동으로 나타납니다. 팝업을 클릭하면 개인의 연락처 정보와 연락처 포스터가 표시됩니다(iOS17의 새로운 기능인 자신의 사진을 사용자 정의하고 편집할 수도 있습니다). 이 화면에는 "수신만" 또는 응답으로 자신의 연락처 정보를 공유하는 옵션도 포함되어 있습니다.

시스템 정보 사용 시작을 클릭하고 시스템 정보를 입력합니다. 아래 이미지에 표시된 대로 프로그램을 클릭하기만 하면 됩니다. 여기에서는 대부분의 시스템 정보를 찾을 수 있으며, 그 중 하나는 그래픽 카드 정보입니다. 시스템 정보 프로그램에서 구성 요소를 확장한 다음 표시를 클릭합니다. 프로그램이 필요한 모든 정보를 수집하도록 하고, 준비가 되면 시스템에서 그래픽 카드별 이름과 기타 정보를 찾을 수 있습니다. 그래픽 카드가 여러 개 있더라도 여기에서 컴퓨터에 연결된 전용 및 통합 그래픽 카드와 관련된 대부분의 콘텐츠를 찾을 수 있습니다. 장치 관리자 사용 Windows 11 대부분의 다른 Windows 버전과 마찬가지로 장치 관리자에서 컴퓨터의 그래픽 카드를 찾을 수도 있습니다. 시작을 클릭한 다음

현재 영상 3D 재구성 작업은 일반적으로 일정한 자연광 조건 하에서 여러 시점(멀티뷰)에서 대상 장면을 캡처하는 멀티뷰 스테레오 재구성 방식(Multi-view Stereo)을 사용합니다. 그러나 이러한 방법은 일반적으로 Lambertian 표면을 가정하므로 고주파수 세부 정보를 복구하는 데 어려움이 있습니다. 장면 재구성에 대한 또 다른 접근 방식은 고정된 시점에서 캡처한 이미지를 다양한 포인트 라이트로 활용하는 것입니다. 예를 들어 포토메트릭 스테레오 방법은 이 설정을 사용하고 해당 음영 정보를 사용하여 램버시안 개체가 아닌 개체의 표면 세부 정보를 재구성합니다. 하지만 기존의 싱글뷰 방식에서는 눈에 보이는 것을 표현하기 위해 보통 노멀맵이나 깊이맵을 사용하는 경우가 많습니다.

iOS17에는 아이폰 두 대를 동시에 터치해 누군가와 연락처 정보를 교환할 수 있는 새로운 에어드롭(AirDrop) 기능이 있다. NameDrop이라고 하며 실제 작동 방식은 다음과 같습니다. NameDrop을 사용하면 전화를 걸거나 문자를 보낼 때 새로운 사람의 전화번호를 입력할 필요가 없어 상대방이 귀하의 전화번호를 알 수 있습니다. iPhone을 상대방의 iPhone에 가까이 갖다 대기만 하면 연락처 정보를 교환할 수 있습니다. 두 장치를 함께 놓으면 연락처 공유 인터페이스가 자동으로 나타납니다. 팝업을 클릭하면 사람의 연락처 정보와 연락처 포스터(사용자 정의하고 편집할 수 있는 자신의 사진, iOS 17의 새로운 기능)가 표시됩니다. 이 화면에는 "수신 전용"도 포함되어 있거나 이에 대한 응답으로 자신의 연락처 정보를 공유할 수 있습니다.

WeChat의 정보 수신이 지연되는 이유는 네트워크 문제, 서버 부하, 버전 문제, 장치 문제, 메시지 전송 문제 또는 기타 요인 때문일 수 있습니다. 자세한 소개: 1. 네트워크 문제 WeChat의 정보 수신 지연은 네트워크 연결과 관련이 있을 수 있습니다. 네트워크 연결이 불안정하거나 신호가 약한 경우 휴대폰이 지연될 수 있습니다. 2. 서버 부하가 높을 때, 특히 바쁜 시간이나 많은 사용자가 WeChat을 사용할 때 정보 전송이 지연될 수 있습니다. 같은 시간 등등

컴퓨터 네트워크에서의 정보 전송은 "단어"를 기반으로 합니다. 단어는 데이터 전송의 기본 단위입니다. 컴퓨터 네트워크에는 데이터 통신과 자원 공유라는 두 가지 주요 기능이 있으며, 데이터 통신에서 전송되는 정보는 바이너리 데이터 형식으로 표현됩니다. 데이터 통신은 데이터 전송 기술을 이용하여 특정 통신 프로토콜에 따라 두 단말 간에 데이터 정보를 전송하는 통신 방법 및 통신 서비스입니다.

Apple은 NameDrop을 통해 연락처 정보를 다른 iPhone과 공유하는 매우 빠른(가장 빠르지는 않더라도) 방법을 도입했습니다. 여기에 당신이 알아야 할 모든 것이 있습니다. 네임드롭(NameDrop)이란 무엇입니까? iOS 17에는 연락처 포스터를 활용하는 혁신적인 기능인 NameDrop이 도입되었습니다. 이러한 개인화된 카드는 자신과 다른 연락처를 위해 생성될 수 있으며 전화를 걸 때마다 표시됩니다. 사진, 미모티콘, 모노그램 등과 같은 다양한 사용자 정의 옵션을 통해 선호하는 색 구성표와 글꼴을 사용하여 연락처 포스터를 자신의 개성에 맞게 맞춤화할 수 있습니다. NameDrop은 iPhone이 다른 사용자와 가까이 있을 때 자동으로 포스터를 공유하므로 양 당사자가 쉽게 포스터를 공유할 수 있습니다.
