sql server 各種查詢語句詳解left jion,right join,full join ,join,inner join ,union all,union等


建庫建表

create database testDataBase

create table TStudent
(
Stuid int identity (1,1) PRIMARY KEY,
StuName varchar(50),
StuClass int FOREIGN KEY REFERENCES TClass(ClassId)
)

create table TClass
(
ClassId int identity (100,1) PRIMARY KEY,
ClassName varchar(50)
)


create table teacher
(
tid int identity (10,1) PRIMARY KEY,
tname varchar(50),
tage int ,
CountryName varchar(50) FOREIGN KEY REFERENCES Country(cname)
)

create table Country
(
Stuname varchar(50) ,
cname varchar(50) primary key
)

–內連接相關知識
–1.等值連接
–1.1 概念:在連接條件中使用等於號(=)運算符,其查詢結果中列出被連接表中的所有列,包括其中的重復列。

select * from  TStudent ts,TClass tc where ts.StuClass = tc.ClassId 

–這條語句可以采用inner join
–等於

select * from TStudent ts inner join TClass tc on ts.StuClass = tc.ClassId 

–2.不等連接
–2.1概念:在連接條件中使用除等於號之外運算符(>、<、<>、>=、<=、!>和!<)
– 各類>、<、<>、>=、<=、!>和!< 都可以試試看

select * from TStudent ts inner join TClass tc on ts.StuClass !> tc.ClassId

–外連接相關知識
–1.左連接 left join
–1.1 概念:返回左表中的所有行,如果左表中行在右表中沒有匹配行,則結果中右表中的列返回空值。

select * from TStudent ts left join TClass tc on ts.StuClass = tc.ClassId

–1.2總結:左連接顯示左表全部行,和右表與左表相同行。

–2.右連接 right join
–2.1 恰與左連接相反,返回右表中的所有行,如果右表中行在左表中沒有匹配行,則結果中左表中的列返回空值。

select * from TStudent ts right join TClass tc on ts.StuClass = tc.ClassId

–2.2總結:右連接恰與左連接相反,顯示右表全部行,和左表與右表相同行。

–3.全連接 full join
–3.1概念:返回左表和右表中的所有行。當某行在另一表中沒有匹配行,則另一表中的列返回空值

select * from TStudent ts full join TClass tc on ts.StuClass = tc.ClassId

–3.2總結:返回左表和右表中的所有行。

–4.交叉連接( 笛卡爾積) CROSS JOIN
–4.1 概念:不帶WHERE條件子句,它將會返回被連接的兩個表的笛卡爾積,返回結果的行數等於兩個表行數的乘積
–(例如:TStudent和TClass,返回4*4=16條記錄),如果帶where,返回或顯示的是匹配的行數。
–不帶where 條件寫法

select * from TStudent cross join TClass

–也等於

select * from TStudent , TClass

–4.2有where子句,往往會先生成兩個表行數乘積的數據表,然后才根據where條件從中選擇。

select * from TStudent ts cross join TClass tc where ts.StuClass = tc.ClassId 

–(注:cross join后加條件只能用where,不能用on)

–5 聯合查詢 union , union all
–5.1 找到所有的班級編號:

select StuClass from TStudent
union
select ClassId from TClass

–5.2
–Union all這個指令的目的也是將兩個SQL語句的結果合並起來,不過它與union的不同之處在
–Union all會將所有的結果都列出來,包括重復的結果,這是它與union的不同之處。
–union all規則
–就是把2個具有相同列及數據類型的 結果 放到一起顯示,並且不去重。
–select a,b,c from table1 union all select ca,cb,cc from table2

select a,b,c from table1 union all select ca,cb,cc from table2
select StuClass from TStudent
union all
select ClassId from TClass

–6.intersect用法和minus用法:
–6.1 intersect用法

select tname as '相同名' from teacher intersect select Stuname from Country

–6.2 minus用法
–Minus指令是運用在兩個SQL語句上,它先找出第一個SQL語句所產生的結果,然后看這些結果
–有沒有在第二個sql語句的結果中,如果有的話就去除。還有一點就是如果第二個sql語句所產生
–的結果沒有在第一個sql語句所產生的結果內,那么這個數據也去除。

select * from teacher
select tname  from teacher  
minus
select Stuname from Country

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com