MySQL多表查詢(內連線和外連線)

2021-10-01 13:45:29 字數 1928 閱讀 9704

新建兩張表a_table和b_table,如果把**當作乙個集合,那麼**中的記錄就是集合中的乙個元素。

表a:

表b:

1.內連線(只有一種場景)

select a.,b. from a_table a inner join b_table b on a.a_id=b.b_id;

或select a.,b. from a_table a join b_table b on a.a_id=b.b_id;

求兩個集合的交集:

如圖:

2.外連線(左外連線、又外連線、全連線)

2.1.左外連線

select a.,b. from a_table a left join b_table b on a.a_id=b.b_id;

或select a.,b. from a_table a left outer join b_table b on a.a_id=b.b_id;

結果集:left outer子句中指定的左表的所有行,而不僅僅是聯接列所匹配的行。如果左表的某行在右表中沒有匹配行,則在相關聯的結果集行中右表的所有選擇列表列均為空值。

如圖:

2.2.右外連線

select a.,b. from a_table a right join b_table b on a.a_id=b.b_id;

或select a.,b. from a_table a right outer join b_table b on a.a_id=b.b_id;

結果集:將返回右表的所有行。如果右表的某行在左表中沒有匹配行,則將為左表返回空值。

如圖:

2.3.全連線

full join (mysql不支援,但是可以用 left join union right join代替)

select a.,b. from a_table a left join b_table b on a.a_id=b.b_id union select a.,b. from a_table a right join b_table b on a.a_id=b.b_id;

結果集:完整外部聯接返回左表和右表中的所有行。當某行在另乙個表中沒有匹配行時,則另乙個表的選擇列表列包含空值。如果表之間有匹配行,則整個結果集行包含基表的資料值。

如圖:

3.交叉連線(cross join)

select a.,b. from a_table a cross join b_table b;

結果集:實際應用中還有這樣一種情形,想得到a,b記錄的排列組合,即笛卡兒積。

Mysql連表查詢(內連線 外連線)

建立兩張 並分別插入資料 create table ifnot exists left table id int auto increment,age int,name varchar 20 primary key id engine innodb default charset utf8 auto...

mysql 內連線和外連線查詢

一 內連線查詢 笛卡兒積 內聯接查詢inner join,mysql可以簡寫為join 二 外連線查詢 左外聯接查詢left outer join,mysql可以簡寫為left join 右外聯接查詢right outer join,mysql可以簡寫為right join 舉個栗子 建立兩張表t1...

資料庫多表連線查詢 外連線和內連線

本文主要列舉兩張和三張表來講述多表連線查詢。新建兩張表 表1 student 截圖如下 表2 course 截圖如下 此時這樣建表只是為了演示連線sql語句,當然實際開發中我們不會這樣建表,實際開發中這兩個表會有自己不同的主鍵。一 外連線 外連線可分為 左連線 右連線 完全外連線。1 左連線 lef...