博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
联接查询
阅读量:6076 次
发布时间:2019-06-20

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

一、交叉联接(纯粹的联接查询)

     只进行笛卡尔积操作

     Customers表中的原始数据:

      2011062800033158.jpg

     Employees表中的原始数据:

      2011062800035684.jpg

     进行交叉联接:

 
1
use
edisondb;
2
 
select
C.custid
as
'
顾客号
'
, E.empid
as
'
售货员号
'
3
 
from
customers
as
C
4
CROSS
JOIN
employees
as
E
5
;

     查询结果如下:

     2011062800054980.jpg

重要习惯:在使用联接查询时,尽可能使用“表别名.列名”的形式,这样可有效区分不同表中列名相同的列

二、内联接=交叉联接+条件过滤  

 1.简单内联接

 
1
use
edisondb;
2
 
select
C.custid
as
'
顾客号
'
, E.empid
as
'
售货号
'
3
from
customers
as
C
4
JOIN
employees
as
E
5
ON
C.age
=
E.age
6
;

   查询结果如下:

   2011062800151347.jpg

   执行步骤:a)进行交叉联接操作,得到如下“中间数据集”:

                      2011062800215258.jpg

                  b)对以上“中间数据集”进行条件过滤,选出C.age=E.age的行,按适当形式输出

                      2011062800232843.jpg

 2.组合联接

    实际上就是有多个行过滤条件

 
1
use
edisondb;
2
select
C.custid
as
'
顾客号
'
, E.empid
as
'
售货号
'
3
from
customers
as
C
4
JOIN
employees
as
E
5
ON
C.age
=
E.age
and
C.country
=
E.country
6
;

   查询结果如下:

   2011062800391458.jpg

  执行步骤:a)进行交叉联接操作,得到如下“中间数据集”:

                    2011062800400322.jpg

                 b)对以上“中间数据集”进行条件过滤,选出C.age=E.age 且 C.country=E.country 的行,按适当形式输出

                    2011062800412182.jpg

 3.多表联接

   新增一张Region表中数据如下:

   2011062801011349.jpg

   进行多表联接查询:

 
1
use
edisondb;
2
select
C.custid
as
'
顾客号
'
, E.empid
as
'
售货员号
'
,R.country
as
'
售货员号有效国家
'
3
from
customers
as
C
4
JOIN
employees
as
E
5
ON
C.age
=
E.age
6
JOIN
region
as
R
7
ON
E.country
=
R.country
8
;
   查询结果如下:

   2011062801034143.jpg

  执行步骤:1)先对前面两张表进行简单内联接操作,得到数据集如下(省略一步“中间数据集”):

                     2011062801112072.jpg

                    注:可以将其视作一张新的表,再与第三张表进行简单内联接操作

                  2)将上面得到的数据集与第Region表进行简单内联接操作

                     步骤:a)进行交叉联接操作,得到如下“中间数据集”:

                               2011062801191689.jpg

                              b) 对以上“中间数据集”进行条件过滤,选出E.country=R.country的行,按适当形式输出

                               2011062801212063.jpg

三、外联接=交叉联接+条件过滤+添加外部行 

1.左联接(添加左边表中未出现在“中间数据集”中的行)   进行左联接查询:
 
1 use edisondb;
2 select *
3 from customers as C
4 LEFT OUTER JOIN employees as E
5 ON C.age=E.age and C.country=E.country
6 ;
查询结果如下:
2011062801365594.jpg
执行步骤:1)先进行简单内联接操作,得到数据集如下(省略一步“中间数据集”):
2011062801400063.jpg
2)对照左边表Employee表,找到未出现在“中间数据集”中的行,添加进“中间数据集”,空列用NULL填充
2011062801433833.jpg
2.右联接(添加右边表中未出现在“中间数据集”中的行)   略,和左联接相似

转载于:https://www.cnblogs.com/edisonfeng/archive/2011/06/28/2091811.html

你可能感兴趣的文章
我的友情链接
查看>>
用yum安装mariadb
查看>>
一点IT"边缘化"的人的思考
查看>>
Gallery循环滑动
查看>>
Sql与C#中日期格式转换总结
查看>>
iOS开发流程总结
查看>>
hadoop datanode 启动出错
查看>>
js颜色拾取器
查看>>
IDEA使用(1)intellIJ idea 配置 svn
查看>>
WPF 降低.net framework到4.0
查看>>
数据管理DMS 全量SQL诊断:你的SQL是健康的蓝色,还是危险的红色?
查看>>
搭建一个通用的脚手架
查看>>
开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
查看>>
开源磁盘加密软件VeraCrypt教程
查看>>
本地vs云:大数据厮杀的最终幸存者会是谁?
查看>>
阿里云公共镜像、自定义镜像、共享镜像和镜像市场的区别 ...
查看>>
shadowtunnel v1.7 发布:新增上级负载均衡支持独立密码
查看>>
Java线程:什么是线程
查看>>
mysql5.7 创建一个超级管理员
查看>>
【框架整合】Maven-SpringMVC3.X+Spring3.X+MyBatis3-日志、JSON解析、表关联查询等均已配置好...
查看>>