當(dāng)同時(shí)要現(xiàn)實(shí)多張表中的數(shù)據(jù)庫(kù)時(shí)渺鹦,可以會(huì)用表連接來(lái)完成這樣的需求舀透。從大類上分,表連接分為內(nèi)連接和外連接密任,他們的區(qū)別主要是颜启,內(nèi)連接可以選出兩張表中互相匹配的記錄,外連接會(huì)選出其他不匹配的記錄浪讳。我們最常用的是內(nèi)連接缰盏。
學(xué)生表
mysql> select * from student;
+----+--------+-------+---------+
| id | name | score | classid |
+----+--------+-------+---------+
| 1 | 張三 | 99 | 3 |
| 2 | 李四 | 60 | 2 |
| 3 | 王五 | 88 | 2 |
| 4 | 趙6 | 22 | 1 |
+----+--------+-------+---------+
4 rows in set (0.00 sec)
班級(jí)表
mysql> select * from class;
+---------+-----------+
| classid | classname |
+---------+-----------+
| 1 | 快班 |
| 2 | 慢班 |
| 3 | 中等班 |
+---------+-----------+
3 rows in set (0.00 sec)
查詢出所有學(xué)生的名字,和他們所在的班級(jí)淹遵。
mysql> select name,classname from student ,class where student.classid=class.classid;
+--------+-----------+
| name | classname |
+--------+-----------+
| 張三 | 中等班 |
| 李四 | 慢班 |
| 王五 | 慢班 |
| 趙6 | 快班 |
+--------+-----------+
4 rows in set (0.00 sec)
外連接又分為左連接
和右連接
口猜。
左連接:包含所有的左邊表中的記錄甚至是右邊表中沒有和它匹配的記錄。
右連接:包含所有的右邊表中的記錄甚至是左邊表中沒有和它匹配的記錄透揣。
學(xué)生表
mysql> select * from student;
+----+--------+-------+---------+
| id | name | score | classid |
+----+--------+-------+---------+
| 1 | 張三 | 99 | 3 |
| 2 | 李四 | 60 | 2 |
| 3 | 王五 | 88 | 2 |
| 4 | 趙6 | 22 | 1 |
| 5 | 神童 | 100 | NULL |
+----+--------+-------+---------+
5 rows in set (0.00 sec)
班級(jí)表
mysql> select * from class;
+---------+-----------+
| classid | classname |
+---------+-----------+
| 1 | 快班 |
| 2 | 慢班 |
| 3 | 中等班 |
+---------+-----------+
3 rows in set (0.00 sec)
查出學(xué)生表中所有學(xué)生名字和他們所在的班級(jí)
mysql> select s.name,c.classname from student as s left join class as c on s.classid=c.classid;
+--------+-----------+
| name | classname |
+--------+-----------+
| 趙6 | 快班 |
| 李四 | 慢班 |
| 王五 | 慢班 |
| 張三 | 中等班 |
| 神童 | NULL |
+--------+-----------+
5 rows in set (0.00 sec)
右連接和左連接類似济炎,兩者可以互相轉(zhuǎn)化,用student表作為右表查詢?nèi)缦隆?mysql> select s.name,c.classname from class as c right join student as s on s.classid=c.classid;
+--------+-----------+
| name | classname |
+--------+-----------+
| 趙6 | 快班 |
| 李四 | 慢班 |
| 王五 | 慢班 |
| 張三 | 中等班 |
| 神童 | NULL |
+--------+-----------+
5 rows in set (0.01 sec)
右連接辐真,用班級(jí)表作為右表冻辩,查詢結(jié)果則沒有神童這條記錄。
mysql> select s.name,c.classname from student as s right join class as c on s.classid=c.classid;
+--------+-----------+
| name | classname |
+--------+-----------+
| 張三 | 中等班 |
| 李四 | 慢班 |
| 王五 | 慢班 |
| 趙6 | 快班 |
+--------+-----------+
4 rows in set (0.00 sec)