MySQL內連線 左外連線 右外連線 全外連線

2021-10-03 12:04:07 字數 3476 閱讀 3373

連線的優勢是減少了外來鍵的使用。

內連線:最常見的等值連線,指連線結果僅包含符合連線條件的行,參與連線的兩個表都應該符合連線條件。

inner join或join on condition

//首先建立兩個表person和card,內容如下

select * from card;

+------+----------+

| id | cardname |

+------+----------+

| 1 | cardyi |

| 2 | carder |

| 3 | cardsan |

| 4 | cardsi |

| 5 | cardwu |

| 6 | cardliu |

+------+----------+

select * from person;

+------+------+--------+

| id | name | cardid |

+------+------+--------+

| 1 | pyi | 1 |

| 1 | pyi | 2 |

| 1 | pyi | 4 |

| 1 | pyi | 7 |

| 2 | per | 6 |

+------+------+--------+

內連線示意:

select * from person inner join card on person.cardid=card.id;//需要兩個表都滿足連線條件。

+------+------+--------+------+----------+

| id | name | cardid | id | cardname |

+------+------+--------+------+----------+

| 1 | pyi | 1 | 1 | cardyi |

| 1 | pyi | 2 | 2 | carder |

| 1 | pyi | 4 | 4 | cardsi |

| 2 | per | 6 | 6 | cardliu |

+------+------+--------+------+----------+

外連線:包含左外連線、右外連線和全外連線

左外連線:left join on或者left outer join on

select * from person left join card on person.cardid =card.id;

+------+------+--------+------+----------+

| id | name | cardid | id | cardname |

+------+------+--------+------+----------+

| 1 | pyi | 1 | 1 | cardyi |

| 1 | pyi | 2 | 2 | carder |

| 1 | pyi | 4 | 4 | cardsi |

| 2 | per | 6 | 6 | cardliu |

| 1 | pyi | 7 | null | null |

+------+------+--------+------+----------+

左邊的全顯示,右邊有相等就顯示,沒有就顯示null

右外連線:right join或者right outer join

select * from person right join card on person.cardid=card.id;

+------+------+--------+------+----------+

| id | name | cardid | id | cardname |

+------+------+--------+------+----------+

| 1 | pyi | 1 | 1 | cardyi |

| 1 | pyi | 2 | 2 | carder |

| 1 | pyi | 4 | 4 | cardsi |

| 2 | per | 6 | 6 | cardliu |

| null | null | null | 3 | cardsan |

| null | null | null | 5 | cardwu |

+------+------+--------+------+----------+

右邊有的全顯示,左邊有的顯示,左邊沒有的顯示null。左邊有,右邊沒有的不顯示。

全外連線:full join

mysql本身不支援full join

如果要實現full join,就把左連線的實現和右連線的實現進行union

select * from person left join card on person.cardid=card.id

union

select * from person right join card on person.cardid=card.id;

+------+------+--------+------+----------+

| id | name | cardid | id | cardname |

+------+------+--------+------+----------+

| 1 | pyi | 1 | 1 | cardyi |

| 1 | pyi | 2 | 2 | carder |

| 1 | pyi | 4 | 4 | cardsi |

| 2 | per | 6 | 6 | cardliu |

| 1 | pyi | 7 | null | null |

| null | null | null | 3 | cardsan |

| null | null | null | 5 | cardwu |

+------+------+--------+--。----+----------+

左邊的全顯示,右邊的全顯示,左邊有,右邊沒有,右邊為null;右邊有,左邊沒有,左邊為null

連表查詢(內連線,左外連線,右外連線)

用兩個表 a table b table 關聯欄位a table.a id和b table.b id來演示一下mysql的內連線 外連線 左 外 連線 右 外 連線 全 外 連線 mysql版本 server version 5.6.31 mysql community server gpl 資料庫...

SQL 內連線,外連線(左外連線 右外連線)

參考整理筆記 關鍵字 inner join on 語句 select from a table a inner join b table bon a.a id b.b id 執行結果 說明 組合兩個表中的記錄,返回關聯字段相符的記錄,也就是返回兩個表的交集 陰影 部分。關鍵字 left join o...

Oracle外連線,左外連線,右外連線,內連線簡析

內連線即普通等值連線 select e.ename,e.job,e.sal,d.dname from emp e inner join dept d on e.deptno d.deptno where e.sal 2000 select e.ename e.job,e.sal d.dname fr...