http://www.cnblogs.com/zhangqs008/archive/2010/07/02/2341196.html

外连接主要包括左连接、右连接和完整外部连接

  1)左连接:Left Join 或 Left Outer Join

      左连接的结果集包括LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值(Null)。

  我们看对应的SQL语句:

Select Student.StudentName,Student.StudentAge,BorrowBook.BorrowBookName,BorrowBook.BorrowBookPublish
From Student
Left JOIN BorrowBook
On Student.StudentID = BorrowBook.StudentID

  运行的结果如下:

StudentName StudentAge BorrowBookName BorrowBookPublish
---------------------------------------------------------------------------------
张三 25 马克思主义政治经济学 电子工业出版社
李四 26 ***思想概论 高等教育出版社
王五 27 邓小平理论 人民邮电出版社
赵六 28 大学生思想道德修养 中国铁道出版社
无名氏 27 NULL NULL

  (所影响的行数为 5 行)

  可以看到的是,它查询的结果是以左表Student为主,Student对应的StudentID在右表BorrowBook如果不存在的话,就会用NULL值来代替。

  2) 右连接:Right Join 或 Right Outer Join

  右连接和左连接相反,它将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值(Null)。

  我们看对应的SQL语句

Select Student.StudentName,Student.StudentAge,BorrowBook.BorrowBookName,BorrowBook.BorrowBookPublish
From Student
Right JOIN BorrowBook
On Student.StudentID = BorrowBook.StudentID

  运行的结果如下:

StudentName StudentAge BorrowBookName BorrowBookPublish
----------------------------------------------------------------------------------------------------------------------
张三 25 马克思主义政治经济学 电子工业出版社
李四 26 ***思想概论 高等教育出版社
王五 27 邓小平理论 人民邮电出版社
赵六 28 大学生思想道德修养 中国铁道出版社
NULL NULL C语言程序设计 高等教育出版社

(所影响的行数为 5 行)

  可以看到的是,它查询的结果是以右表BorrowBook为主,BorrowBook对应的StudentID在左表Student如果不存在的话,就会用NULL值来代替。

  3) 完整外部联接:Full Join 或 Full Outer Join

  完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。

  我们看对应的SQL语句

Select Student.StudentName,Student.StudentAge,BorrowBook.BorrowBookName,BorrowBook.BorrowBookPublish
From Student
FULL OUTER JOIN BorrowBook
On Student.StudentID = BorrowBook.StudentID

  结果如下:

StudentName StudentAge BorrowBookName BorrowBookPublish ----------------------------------------------------------------------------------------------------------------------
NULL NULL C语言程序设计 高等教育出版社
张三 25 马克思主义政治经济学 电子工业出版社
李四 26 ***思想概论 高等教育出版社
王五 27 邓小平理论 人民邮电出版社
赵六 28 大学生思想道德修养 中国铁道出版社
无名氏 27 NULL NULL

  (所影响的行数为 6 行)

  可以看到的是,它查询的结果除了把相对应完全匹配的记录查出来以后,还会把左连接及右连接两种情形都包括,对应的值用NULL值来代替。

    交叉连接

  交叉连接(CROSS JOIN),就是指不带W H E R E子句的查询。在数学上,就是表的笛卡尔积。也就是它查询出来的记录数行为两个表的乘积,对应记录也就是为表A*表B。

我们看对应的SQL语句

  Select Student.StudentName,Student.StudentAge,BorrowBook.BorrowBookName,BorrowBook.BorrowBookPublish

  From Student Cross Join BorrowBook

  运行的结果如下:

StudentName StudentAge BorrowBookName BorrowBookPublish
---------------------------------------------------------------------------------
张三 25 马克思主义政治经济学 电子工业出版社
李四 26 马克思主义政治经济学 电子工业出版社
王五 27 马克思主义政治经济学 电子工业出版社
赵六 28 马克思主义政治经济学 电子工业出版社
无名氏 27 马克思主义政治经济学 电子工业出版社
张三 25 ***思想概论 高等教育出版社
李四 26 ***思想概论 高等教育出版社
王五 27 ***思想概论 高等教育出版社
赵六 28 ***思想概论 高等教育出版社
无名氏 27 ***思想概论 高等教育出版社
张三 25 邓小平理论 人民邮电出版社
李四 26 邓小平理论 人民邮电出版社
王五 27 邓小平理论 人民邮电出版社
赵六 28 邓小平理论 人民邮电出版社
无名氏 27 邓小平理论 人民邮电出版社
张三 25 大学生思想道德修养 中国铁道出版社
李四 26 大学生思想道德修养 中国铁道出版社
王五 27 大学生思想道德修养 中国铁道出版社
赵六 28 大学生思想道德修养 中国铁道出版社
无名氏 27 大学生思想道德修养 中国铁道出版社
张三 25 C语言程序设计 高等教育出版社
李四 26 C语言程序设计 高等教育出版社
王五 27 C语言程序设计 高等教育出版社
赵六 28 C语言程序设计 高等教育出版社
无名氏 27 C语言程序设计 高等教育出版社

  (所影响的行数为 25 行)

  可以看到的是,它把表Student中的每一行和BorrowBook中的每一条记录都进行关联,返回的记录数为5*5=25行,即笛卡尔积,它执行的语句也就等效于

  Select Student.StudentName,Student.StudentAge,BorrowBook.BorrowBookName,BorrowBook.BorrowBookPublish

  From Student,BorrowBook

关注微信公众号:CS尼克。我们一起学习计算机相关知识

转载-- SQL连接查询2 外连接(左右联接查询)的更多相关文章

  1. 4.mysql数据库创建,表中创建模具模板脚本,mysql_SQL99标准连接查询(恩,外部连接,全外连接,交叉连接)

     mysql数据库创建,表创建模等模板脚本 -- 用root用户登录系统,运行脚本 -- 创建数据库 create database mydb61 character set utf8 ; -- ...

  2. SQL:内连接、左外连接、右外连接、全连接、交叉连接区别

    有两个表A和表B.表A结构如下: Aid:int:标识种子,主键,自增ID Aname:varchar 数据情况,即用select * from A出来的记录情况如下图1所示: 图1:A表数据表B结构 ...

  3. Oracle 左连接、右连接、全外连接、(+)号作用、inner join(等值连接) (转载)

    Oracle  外连接 (1)左外连接 (左边的表不加限制)       (2)右外连接(右边的表不加限制)       (3)全外连接(左右两表都不加限制) 外连接(Outer Join) oute ...

  4. Oracle学习笔记—Oracle左连接、右连接、全外连接以及(+)号用法(转载)

    转载自: Oracle左连接.右连接.全外连接以及(+)号用法 对于外连接,Oracle中可以使用“(+)”来表示. 关于使用(+)的一些注意事项: (+)操作符只能出现在WHERE子句中,并且不能与 ...

  5. Oracle 左连接、右连接、全外连接、(+)号作用

    分类: Oracle Oracle  外连接 (1)左外连接 (左边的表不加限制)       (2)右外连接(右边的表不加限制)       (3)全外连接(左右两表都不加限制) 外连接(Outer ...

  6. Oracle左连接、右连接、全外连接

    Oracle  外连接 (1)左外连接 (左边的表不加限制)(2)右外连接(右边的表不加限制)(3)全外连接(左右两表都不加限制) 外连接(Outer Join) outer join则会返回每个满足 ...

  7. mysql的内连接,外连接(左外连接,右外连接)巩固

    1:mysql的内连接: 内连接(inner join):显示左表以及右表符合连接条件的记录: select a.goods_id,a.goods_name,b.cate_name from tdb_ ...

  8. Oracle内连接、外连接、右外连接、全外连接小总结

    数据库版本:Oracle 9i 表TESTA,TESTB,TESTC,各有A, B两列 A B 001 10A 002 20A A B 001 10B 003 30B A B 001 10C 004 ...

  9. SQL夯实基础(九)MySQL联接查询算法

    书接上文<SQL夯实基础(八):联接运算符算法归类>. 这里先解释下EXPLAIN 结果中,第一行出现的表就是驱动表(Important!). 对驱动表可以直接排序,对非驱动表(的字段排序 ...

随机推荐

  1. i.MX RT600之DMIC外设介绍及应用

    恩智浦的i.MX RT600是跨界处理器产品,同样也是i.MX RTxxx系列的开山之作.不同于i.MX RT1xxx系列单片机,i.MX RT600 采用了双核架构,将新一代Cortex-M33内核 ...

  2. Xftp和Xshell

    Xftp 用于跟云虚拟机文件传输的工具,Xftp官网 Xshell Xftp的兄弟工具,用于执行云虚拟机命令,Xshell官网 两个都是付费工具,各需要几百块钱,当然破解的版本也很多 登陆 这两个的连 ...

  3. uniGUI之MASK遮罩(22)

    在页面进行后台数据库操作的时候,不想 用户再进行 页面上的 其他操作,这时候就要 将页面 遮罩.例如UniDBGrid有LoadMask属性. 1]使用ScreenMask函数 2]JS调用 3]一个 ...

  4. 「HNOI2003」消防局的设立

    题目 [内存限制:$256 MiB$][时间限制:$1000 ms$] [标准输入输出][题目类型:传统][评测方式:文本比较] 题目描述 2020 年,人类在火星上建立了一个庞大的基地群,总共有 $ ...

  5. 九 SpringMvc与json交互

    将json输出到页面: 1 加入jar包 2 配置Controller层,开启注解ResponseBody,将json发送到页面: 3 访问url 4 响应json,在形参列表里面加上注解

  6. 初识PromQL

    初识PromQL Prometheus通过指标名称(metrics name)以及对应的一组标签(labelset)唯一定义一条时间序列.指标名称反映了监控样本的基本标识,而label则在这个基本特征 ...

  7. Hadoop基准测试(二)

    Hadoop Examples 除了<Hadoop基准测试(一)>提到的测试,Hadoop还自带了一些例子,比如WordCount和TeraSort,这些例子在hadoop-example ...

  8. P1481 魔族密码(LIS变形)

    题目描述(题目链接:https://www.luogu.org/problem/P1481) 风之子刚走进他的考场,就…… 花花:当当当当~~偶是魅力女皇——花花!!^^(华丽出场,礼炮,鲜花) 风之 ...

  9. idea2019 jsp页面加载不到静态文件原因No mapping found for HTTP request with URI

    最近在使用idea2019 学习ssm,但是发现我在项目引用的静态文件怎么都无法加载出来,找了很久才解决~~ 给上目录结构图: 第一种:使用 ${pageContext.request.context ...

  10. Git安装及基本配置

    一.在Linux上安装 1.Linux系统安装 使用Linux发布版包含的基础软件包管理工具可以很容易安装Git.例如,在Ubuntu系统上可使用以下指令安装Git: $ sudo apt-get i ...