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