一、釋義。
1、Left Join(左聯接)
以左表為中心,返回左表中符合條件的所有記錄以及右表中聯結字段相等的記錄——當右表中無相應聯接記錄時,返回空值。
2、Right Join(右聯接)
以右表為中心,返回右表中符合條件的所有記錄以及左表中聯結字段相等的記錄——當左表中無相應聯接記錄時,返回空值。
3、Inner Join(等值連接)
返回兩個表中聯結字段相等的行。
二、示例。
1、插入測試表(test1,test2)
create table test1 --測試表1
(id int not null,
value char(10) )
create table test2 --測試表2
(id int not null,
value char(10) )
2、插入數據
--insert into test1
insert into test1
values (1,'testaa')
insert into test1
values (2,'testaa')
insert into test1
values (3,'testaa')
--insert into test2
insert into test2
values (1,'testaa2')
insert into test2
values (2,'testaa2')
insert into test2
values (4,'testaa2')
3、查詢結果比較(附圖)
select * from test1 a left join test2 b on a.id = b.id
select * from test1 a right join test2 b on a.id = b.id
select * from test1 a inner join test2 b on a.id = b.id
4、刪除測試表
drop table test1
drop table test2
總結:
連接:A xjoin B(主表 操作 關聯表)
select過程:from->where->group by->having->order by->limit
在不使用on語法時,join、inner join、逗號、cross join結果相同,都是取2個表的笛卡爾積。逗號與其他操作符優先級不同,所以有可能產生語法錯誤,儘量減少用逗號
join、inner join、cross join支持on和using語法,逗號不支持on和using語法
on語法:篩選連接後的結果,兩表的對應列值相同才在結果集中,可以通過and連接多個列值的匹配要求,列名可以不同
select * from tb_test1 inner join tb_student on tb_test1.id=tb_student.id;
using語法:篩選連接後的結果,兩表的對應列值相同才在結果集中,括號內用多個列名要求用逗號連接,列名必須相同。
閱讀更多 程序員界的彭于晏 的文章