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