SQL裏各種聯合查詢總結

create database mytest
go
use mytest
go
create table t_dept
(
 d_id int primary key identity(1,1),
 d_name varchar(20),
 d_remark varchar(20)
)
go
create table t_emp
(
 e_id int primary key identity(1,1),
 d_id int references t_dept(d_id),
 e_name varchar(20),
 e_sex varchar(4)
)
go
insert into t_dept values('一部','1111');
insert into t_dept values('二部','2222');
insert into t_dept values('三部','3333');
insert into t_dept values('四部','4444');
go
insert into t_emp values(1,'一部A君','男');
insert into t_emp values(1,'一部B君','男');
insert into t_emp values(2,'二部C君','女');
insert into t_emp values(null,'三部D君','男');
go
select * from t_dept;
select * from t_emp;
go
--注:聯接查詢,哪個表在前,就以哪個表爲主表

--內聯接(兩表標識號相同的所有行)
select * from t_dept a inner join t_emp b on a.d_id=b.d_id ;

1 一部 1111 1 1 一部A君 男
1 一部 1111 2 1 一部B君 男
2 二部 2222 3 2 二部C君 女

--外連接(外聯接可以是左向外聯接、右向外聯接或完整外部聯接)

--(1)
select * from t_dept a left outer join t_emp b on a.d_id=b.d_id ;--"左外連接  等同於  左連接"
select * from t_dept a left join t_emp b on a.d_id=b.d_id ;--左連接(所有的部門顯示,員工表裏部門id爲null的顯示不出來)

1 一部 1111 1 1 一部A君 男
1 一部 1111 2 1 一部B君 男
2 二部 2222 3 2 二部C君 女
3 三部 3333 NULL NULL NULL NULL
4 四部 4444 NULL NULL NULL NULL

--(2)
select * from t_dept a right outer join t_emp b on a.d_id=b.d_id ;--"右外連接  等同於  右連接"
select * from t_dept a right join t_emp b on a.d_id=b.d_id ;--右連接,員工表所有員工顯示,"三部"和"四部"沒有員工的部門則該部門不顯示

1 一部 1111 1 1 一部A君 男
1 一部 1111 2 1 一部B君 男
2 二部 2222 3 2 二部C君 女
NULL NULL NULL 4 NULL 三部D君 男

--(3)
--完整外部聯接,返回左表和右表中的所有行
--當某行在另一個表中沒有匹配行時,則另一個表的選擇列表列包含空值。如果表之間有匹配行,則整個結果集行包含基表的數據值。  
select * from t_dept a full outer join t_emp b on a.d_id=b.d_id ;
select * from t_dept a full join t_emp b on a.d_id=b.d_id ;

1 一部 1111 1 1 一部A君 男
1 一部 1111 2 1 一部B君 男
2 二部 2222 3 2 二部C君 女
3 三部 3333 NULL NULL NULL NULL
4 四部 4444 NULL NULL NULL NULL
NULL NULL NULL 4 NULL 三部D君 男


--笛卡爾積
select * from t_emp,t_dept
select * from t_dept,t_emp
--返回16條數據,左表有4條,右表有4條,返回行數爲4*4=16(條),產生笛卡爾積

1 一部 1111 1 1 一部A君 男
2 二部 2222 1 1 一部A君 男
3 三部 3333 1 1 一部A君 男
4 四部 4444 1 1 一部A君 男
1 一部 1111 2 1 一部B君 男
2 二部 2222 2 1 一部B君 男
3 三部 3333 2 1 一部B君 男
4 四部 4444 2 1 一部B君 男
1 一部 1111 3 2 二部C君 女
2 二部 2222 3 2 二部C君 女
3 三部 3333 3 2 二部C君 女
4 四部 4444 3 2 二部C君 女
1 一部 1111 4 NULL 三部D君 男
2 二部 2222 4 NULL 三部D君 男
3 三部 3333 4 NULL 三部D君 男
4 四部 4444 4 NULL 三部D君 男


最後,歡迎訪問風格清新簡潔的輕博客網站[指尖一刻]



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章