博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL 连接语句
阅读量:6002 次
发布时间:2019-06-20

本文共 2106 字,大约阅读时间需要 7 分钟。

SQL code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
create 
table 
Customers (Cust_Id 
int
, Cust_Name 
varchar
(10))
   
insert 
Customers 
values 
(1, 
'Craig'
)
   
insert 
Customers 
values 
(2, 
'John Doe'
)
   
insert 
Customers 
values 
(3, 
'Jane Doe'
)
   
create 
table 
Sales (Cust_Id 
int
, Item 
varchar
(10))
   
insert 
Sales 
values 
(2, 
'Camera'
)
   
insert 
Sales 
values 
(3, 
'Computer'
)
   
insert 
Sales 
values 
(3, 
'Monitor'
)
   
insert 
Sales 
values 
(4, 
'Printer'
)

 

Inner joins(内连接)
Inner join是最常见的连接类型。一个inner join只是简单的找到两行,然后根据连接的谓词放在一起。例如,下面的查询使用这样的连接谓词“S.Cust_Id = C.Cust_Id”来找在Sales和Customer表中具有相同Cust_Id的行。

SQL code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
select 
*
   
from 
Sales S 
inner 
join 
Customers C
   
on 
S.Cust_Id = C.Cust_Id
   
Cust_Id     Item       Cust_Id     Cust_Name
   
----------- ---------- ----------- ----------
   
2           Camera     2           John Doe
   
3           Computer   3           Jane Doe
   
3           Monitor    3           Jane Doe

 

注意:
Cust_Id 3 买了两件item,所以该Customer会在结果中出现两次.
Cust_Id 1 没有购买任何东西,所以没在结果中出现。
我们卖了一个‘Printer’ 给 Cust_Id 4。但这边没有这个客户,所以在结果里面也看不到该客户。
Inner Join是中表的位置是可以交换的。也就是说‘A inner join B ‘ 等价于’B inner join A’。
Outer joins(外连接)
假设我们想要看到所有的sales的列表,即使是那些没有匹配的客户。我们可以通过外连接来实现。外连接会保留其中一个或者两个输入表里的所有行,即使我们通过join谓词找不到匹配的行。例如:

SQL code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
select 
*
   
from 
Sales S 
left 
outer 
join 
Customers C
   
on 
S.Cust_Id = C.Cust_Id
   
Cust_Id     Item       Cust_Id     Cust_Name
   
----------- ---------- ----------- ----------
   
2           Camera     2           John Doe
   
3           Computer   3           Jane Doe
   
3           Monitor    3           Jane Doe
   
4           Printer    
NULL        
NULL

 
注意到,SQL Server为对应的“Printer”的销售返回了为NULL的customer数据,因为该sale没有匹配的customer。我们又称这种行为NULL扩展。
使用一个完全外连接,我们可以得到所有的customer,不管他们是否曾经买过东西。以及得到所有的sale,不管他们是否有个合法的customer。

SQL code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
select 
*
   
from 
Sales S 
full 
outer 
join 
Customers C
   
on 
S.Cust_Id = C.Cust_Id
   
Cust_Id     Item       Cust_Id     Cust_Name
   
----------- ---------- ----------- ----------
   
2           Camera     2           John Doe
   
3           Computer   3           Jane Doe
   
3           Monitor    3           Jane Doe
   
4           Printer    
NULL        
NULL
   
NULL        
NULL       
1           Craig

 
下表显示了不同的外连接里哪些行会被保留,哪些行会进行NULL扩展

SQL code
1
2
3
4
5
6
Join                    
保留…
-------------------------------------------
left 
outer 
join 
B   
all 
rows
right 
outer 
join 
B   
all 
rows
full 
outer 
join 
B   
all 
and 
rows

转载地址:http://vnbmx.baihongyu.com/

你可能感兴趣的文章
docker学习谈
查看>>
未能从程序集“System.ServiceModel,xxx”中加载类型“System.ServiceModel.Activation.HttpModule”。...
查看>>
图像处理之图像切割---提取信封上的邮编
查看>>
wampserver 中127.0.0.1可以访问,但localhost无法访问
查看>>
黑马程序员---java基础----------------- 函数和数组
查看>>
extend()和append()区别
查看>>
并查集
查看>>
JSONObject跟JSONArray来自不同的包会有不同的功能
查看>>
Matplotlib学习---用matplotlib画面积图(area chart)
查看>>
实验六:类的封装
查看>>
用JS获得QQ号码的昵称,头像,生日
查看>>
开源中国愚人节网页变模糊的js blur代码
查看>>
scjp考试准备 - 8 - final关键字
查看>>
Sed 思维导图
查看>>
[模板] 常系数线性递推
查看>>
Ubuntu 16.04 LTS 搭建LAMP
查看>>
FTP用户-禁止登录系统
查看>>
Uva 10012 - How Big Is It?
查看>>
JAV基础学习
查看>>
3d max 动作Take 001改名
查看>>