MySQL的那些事兒(五)連線查詢

2021-10-13 15:31:27 字數 4181 閱讀 9120

sql的四種連線查詢

內連線

inner join 或 join

外連線

1.左連線 left join 或 left outer join

2.右連線 right join 或 right outer join

3.完全外連線 full join 或 full outer join

以 on 宣告條件

原理?建立兩個表來驗證一下

//person表,有三個字段 

//id

//name

//cardid(儲存card表的id)

//card表,有兩個字段

//id

//name

create table person(

id int primary key,

name varchar(20),

cardid int

); create table card(

id int primary key,

name varchar(20)

); //向card表中插入一些資料

insert into card values(1,'**卡');

insert into card values(2,'門禁卡');

insert into card values(3,'健身卡');

insert into card values(4,'銀行卡');

insert into card values(5,'社保卡');

//向person表中插入一些資料

insert into person values(1,'小明',2);

insert into person values(2,'小敏',4);

insert into person values(3,'小可',7);

//---------card表

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

| id | name |

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

| 1 | **卡 |

| 2 | 門禁卡 |

| 3 | 健身卡 |

| 4 | 銀行卡 |

| 5 | 社保卡 |

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

//---------person表

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

| id | name | cardid |

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

| 1 | 小明 | 2 |

| 2 | 小敏 | 4 |

| 3 | 小可 | 7 |

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

----內連線

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

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

//有無 inner 並無區別,下面 outer 同樣

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

| id | name | cardid | id | name |

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

| 1 | 小明 | 2 | 2 | 門禁卡 |

| 2 | 小敏 | 4 | 4 | 銀行卡 |

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

//總結:把左右表中能相互對應上的記錄取出,無對應的就不要

----左外連線

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

//結果

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

| id | name | cardid | id | name |

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

| 1 | 小明 | 2 | 2 | 門禁卡 |

| 2 | 小敏 | 4 | 4 | 銀行卡 |

| 3 | 小可 | 7 | null | null |

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

//總結:左外連線,會把左表中所有記錄取出,而右表中的資料,有對應的就取出,沒有就補null

//總行數等於左表行數

----右外連線

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

//結果

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

| id | name | cardid | id | name |

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

| 1 | 小明 | 2 | 2 | 門禁卡 |

| 2 | 小敏 | 4 | 4 | 銀行卡 |

| null | null | null | 1 | **卡 |

| null | null | null | 3 | 健身卡 |

| null | null | null | 5 | 社保卡 |

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

//總結:右外連線,會把右表中所有記錄取出,而左表中的資料,有對應的就取出,沒有就補null

//總行數等於右錶行數

----完全外連線

mysql並不支援 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 | name |

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

| 1 | 小明 | 2 | 2 | 門禁卡 |

| 2 | 小敏 | 4 | 4 | 銀行卡 |

| 3 | 小可 | 7 | null | null |

| null | null | null | 1 | **卡 |

| null | null | null | 3 | 健身卡 |

| null | null | null | 5 | 社保卡 |

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

08 1連線查詢 外連線 MySQL

外連線 應用場景 用於查詢乙個表中有,另乙個表中沒有的記錄 特點 1 外連線的查詢結果為主表中的所有記錄 如果從表中有和主表匹配的,則顯示匹配的值 如果從表中沒有和主表匹配的,則顯示null 外連線查詢的結果 內鏈結結果 主表中有而從表中沒有的記錄 2 左外連線 left join 左邊的是主表 右...

MySQL5 連線查詢

連線查詢可以實現多個表的查詢,一次取出多個表中的資料。連線查詢可分為四種 內連線,外連線,交叉連線,自然連線。如果連線查詢的不同表有同名字段,必須加表名或表名的別名來區分。資料庫的預設查詢方式,inner可以省略不寫。從左表取出記錄後,去匹配右表中的記錄,如果滿足條件則記錄保留,否則捨棄。語法 左表...

MySQL8 連線查詢

連線查詢 連線是關係型資料庫模型的主要特點。連線查詢是關係型資料庫中最主要的查詢,主要包括內連線 外連線等通過聯結運算子可以實現多個表查詢。在關係型資料庫管理系統中,表建立時各種資料之間的關係不必確定,常把乙個實體的所有資訊存放在乙個表中,當查詢資料時通過連線操作查詢出存放在多個表中的不同實體資訊,...