更新時(shí)間:2021-02-11 09:00:00 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2495次
MySQL是目前最流行的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)之一,在 WEB 應(yīng)用方面,MySQL是最好的 RDBMS (Relational Database Management System,關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)) 應(yīng)用軟件之一。MySQL的流行得益于MySQL的強(qiáng)大功能和系統(tǒng),MySQL支持多表聯(lián)查,大大減少了查詢數(shù)據(jù)的時(shí)間。本文我們就來(lái)聊一聊MySQL多表聯(lián)查。
1. 嵌套查詢:一個(gè)查詢的結(jié)果是另外sql查詢的條件
如:查詢stu表中年齡最大的是誰(shuí)?
mysql> select * from stu where age=(select max(age) from stu);
mysql> select * from stu where age in(select max(age) from stu); --(子查詢結(jié)果是多條時(shí)使用in查詢)
+----+------+------+-----+----------+
| id | name | age | sex | classid |
+----+------+------+-----+----------+
| 14 | abc | 33 | w | python01 |
+----+------+------+-----+----------+
1 row in set (0.01 sec)
2. where關(guān)聯(lián)查詢
已知:?jiǎn)T工personnel表和部門department表,其中員工表中的did字段為部門表id主鍵關(guān)聯(lián)。
查詢所有員工信息,并顯示所屬部門名稱
要求:顯示字段:?jiǎn)T工id 部門 姓名
mysql> select * from stu where age=(select max(age) from stu);
mysql> select * from stu where age in(select max(age) from stu); --(子查詢結(jié)果是多條時(shí)使用in查詢)
+----+------+------+-----+----------+
| id | name | age | sex | classid |
+----+------+------+-----+----------+
| 14 | abc | 33 | w | python01 |
+----+------+------+-----+----------+
1 row in set (0.01 sec)
3. 連接join查詢
左聯(lián):left join
右聯(lián):right join
內(nèi)聯(lián):inner join
已知如下表所示,商品類別信息表(具有兩層類別關(guān)系,通過(guò)pid表示,0表示一級(jí)類別)
mysql> select * from type;
+----+-----------+------+
| id | name | pid |
+----+-----------+------+
| 1 | 服裝 | 0 |
| 2 | 數(shù)碼 | 0 |
| 3 | 男裝 | 1 |
| 4 | 手機(jī) | 2 |
| 5 | 相機(jī) | 2 |
| 6 | 電腦 | 2 |
| 7 | 女裝 | 1 |
| 8 | 童裝 | 1 |
| 9 | 食品 | 0 |
| 10 | 零食 | 9 |
| 11 | 特產(chǎn) | 9 |
| 12 | 休閑裝 | 1 |
+----+-----------+------+
12 rows in set (0.00 sec)
mysql> desc type;
+-------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(16) | NO | | NULL | |
| pid | int(10) unsigned | YES | | NULL | |
+-------+------------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
-- 查詢二級(jí)類別信息,并關(guān)聯(lián)出他們的父類別名稱
mysql> select t1.id,t1.name,t2.name from type t1,type t2 where t1.pid!=0 and t1.pid=t2.id;
+----+-----------+--------+
| id | name | name |
+----+-----------+--------+
| 3 | 男裝 | 服裝 |
| 4 | 手機(jī) | 數(shù)碼 |
| 5 | 相機(jī) | 數(shù)碼 |
| 6 | 電腦 | 數(shù)碼 |
| 7 | 女裝 | 服裝 |
| 8 | 童裝 | 服裝 |
| 10 | 零食 | 食品 |
| 11 | 特產(chǎn) | 食品 |
| 12 | 休閑裝 | 服裝 |
+----+-----------+--------+
9 rows in set (0.01 sec)
--統(tǒng)計(jì)每個(gè)一級(jí)類別下都有多少個(gè)子類別。
mysql> select t1.id,t1.name,count(t2.id) from type t1,type t2 where t1.pid=0 and t1.id=t2.pid group by t1.id;
+----+--------+--------------+
| id | name | count(t2.id) |
+----+--------+--------------+
| 1 | 服裝 | 4 |
| 2 | 數(shù)碼 | 3 |
| 9 | 食品 | 2 |
+----+--------+--------------+
3 rows in set (0.00 sec)
其實(shí)我們通過(guò)上面的實(shí)例很容易看出MySQL多表聯(lián)查是有一些限制的,但這絲毫不影響它對(duì)MySQL數(shù)據(jù)查詢的效率提升。在本站的MySQL教程中,還有更多的優(yōu)秀的MySQL知識(shí)等你來(lái)學(xué)!
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)