咱們先創建兩個表插入一些Demo數據
----student=(sno,sname) 學號,姓名
insert into student(sno,sname) values('2005001','小施');
insert into student(sno,sname) values('2005002','小王');
insert into student(sno,sname) values('2005003','小張');
insert into student(sno,sname) values('2005004','小賈');
----stu_score=(sno,scrore) 學號,分數
insert into stu_score(sno,scrore) values('2005001',90.00);
insert into stu_score(sno,scrore) values('2005002',95.00);
insert into stu_score(sno,scrore) values('2005008',80.50);
insert into stu_score(sno,scrore) values('2005009',88.50);
(一) 內鏈接
內鏈接,inner join,join 查詢操做列出與鏈接條件匹配的數據行,它使用比較運算符比較被鏈接列的
列值。
----假設a表有M條記錄,b表有N條記錄,a和b表sno相同的記錄有K條
----內鏈接(數據量=K)
select a.*,b.* from student a join stu_score b on a.sno=b.sno;
select a.*,b.* from student a inner join stu_score b on a.sno=b.sno;
外鏈接,返回到查詢結果集合中的不只包含符合鏈接條件的行,並且還包括左表(左
外鏈接或左鏈接))、右表(右外鏈接或右鏈接)或兩個邊接表(全外鏈接)中的全部數據行
(二) 外鏈接 (左鏈接、右鏈接)
左鏈接或left join,left outer join 返回包括左表中的全部記錄和右表中聯接字段相等的記錄
右鏈接或right join ,right outer join 返回包括右表中的全部記錄和由表中聯接字段相等的記錄
----左鏈接/左外鏈接(數據量=M)
select a.*,b.* from student a left join stu_score b on a.sno=b.sno;
select a.*,b.* from student a left outer join stu_score b on a.sno=b.sno;
----右鏈接/右外鏈接(數據量=N)
select a.*,b.* from student a right join stu_score b on a.sno=b.sno;
select a.*,b.* from student a right outer join stu_score b on a.sno=b.sno;
(三) 徹底鏈接()
定義:在內鏈接的基礎上,還包含兩個表中全部不符合條件的數據行,並在其中的左表、和右表列填寫NULL
關鍵字:FULL JOIN
----徹底鏈接(數據量=M+N-K)
select a.*,b.* from student a full join stu_score b on a.sno=b.sno;
(四) 交叉鏈接
定義:將兩個表的全部行進行組合,鏈接後的行數爲兩個表的乘積數。(笛卡爾積)
關鍵詞:CROSS JOIN
格式:FROM 表名1 CROSS JOIN 表名2
----交叉鏈接(數據量=M*N)
select a.*,b.* from student a cross join stu_score b ;