簡介:
MySQL 的連接查詢,通常都是將來自兩個或多個表的行結合起來,基于這些表之間的共同欄位,進行資料的拼接,首先,要確定一個主表作為結果集,然后將其他表的行有選擇 性的連接到選定的主表結果集上,使用較多的連接查詢包括:內連接、左連接和右連接,
準備兩張表做演示,這兩張表必須要有相同的欄位內容可匹配,這兩張表是 id 和 bianhao 列
mysql> select * from a_player;
+----+----------+-------+
| id | name | score |
+----+----------+-------+
| 1 | zhangsan | 88 |
| 2 | lisi | 89 |
| 3 | wangwu | 67 |
| 4 | zhaoliu | 90 |
| 5 | xuli | 80 |
| 6 | keke | 75 |
+----+----------+-------+
6 rows in set (0.00 sec)
mysql> select * from b_table;
+---------+-------+
| bianhao | sushe |
+---------+-------+
| 1 | 301 |
| 2 | 303 |
| 3 | 308 |
| 7 | 301 |
| 8 | 305 |
| 9 | 304 |
| 10 | 308 |
+---------+-------+
7 rows in set (0.00 sec)
一、內連接定義和實體
簡而言之:找兩個表中的公共部分,
■ 兩張或多張表中同時符合某種條件的資料記錄組合
■ FROM子句中使用INNER JOIN關鍵字連接多張表,并使用ON設定連接條件
■ 是系統默認的表連接方式,可以省略INNER關鍵字
■ 多表支持連續使用INNER JOIN,建議不超過三個表
■ 語法結構
■ 實作原理,下圖所示:

內連陳述句:inner join
驗證:得到的結果是兩個表相同欄位的公共部分
mysql> select * from a_player inner join b_table on a_player.id=b_table.bianhao;
+----+----------+-------+---------+-------+
| id | name | score | bianhao | sushe |
+----+----------+-------+---------+-------+
| 1 | zhangsan | 88 | 1 | 301 |
| 2 | lisi | 89 | 2 | 303 |
| 3 | wangwu | 67 | 3 | 308 |
+----+----------+-------+---------+-------+
3 rows in set (0.01 sec)
二、外連接:左連接定義和實體
簡而言之:以左表為準,去匹配右表,左表有多少條資料,結果就是多少條資料,左表有的資料正常顯示,右表沒有的資料就用NULL顯示,
■ 也被稱為左外連接
■ 在FROM子句中使用LEFT JOIN關鍵字來表示
■ 匹配左表中所有及右表中符合條件的行
■ 實作原理,下圖所示:

左連接陳述句:left join
驗證:得到的是以a_player(左表)為準的所有資料顯示,再顯示b_table中與其匹配的項,未匹配到的用NULL,
mysql> select * from a_player left join b_table on a_player.id=b_table.bianhao;
+----+----------+-------+---------+-------+
| id | name | score | bianhao | sushe |
+----+----------+-------+---------+-------+
| 1 | zhangsan | 88 | 1 | 301 |
| 2 | lisi | 89 | 2 | 303 |
| 3 | wangwu | 67 | 3 | 308 |
| 4 | zhaoliu | 90 | NULL | NULL |
| 5 | xuli | 80 | NULL | NULL |
| 6 | keke | 75 | NULL | NULL |
+----+----------+-------+---------+-------+
6 rows in set (0.00 sec)
二、外連接:右連接定義和實體
簡而言之:與左外連接反之,以右表為準,去匹配左表,右表有多少條資料,結果就是多少條資料,右表的資料正常顯示,左表沒有的資料就用NULL顯示,
■ 也被稱為右外連接
■ 在FROM子句中使用RIGHT JOIN 關鍵字來表示
■ 匹配右表中所有行及左表中符合條件的行
■ 實作原理,下圖所示

右連接陳述句:right join
驗證:得到的是以b_table(右表)為準的所有資料顯示,再顯示a_player中與其匹配的項,未匹配到的用NULL,
mysql> select * from a_player right join b_table on a_player.id=b_table.bianhao;
+------+----------+-------+---------+-------+
| id | name | score | bianhao | sushe |
+------+----------+-------+---------+-------+
| 1 | zhangsan | 88 | 1 | 301 |
| 2 | lisi | 89 | 2 | 303 |
| 3 | wangwu | 67 | 3 | 308 |
| NULL | NULL | NULL | 7 | 301 |
| NULL | NULL | NULL | 8 | 305 |
| NULL | NULL | NULL | 9 | 304 |
| NULL | NULL | NULL | 10 | 308 |
+------+----------+-------+---------+-------+
7 rows in set (0.00 sec)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/204001.html
標籤:其他
上一篇:公布半小時下載量達10W:阿里大牛出品【MyCat筆記】真香
下一篇:程式執行查詢SQL過慢優化
