SQL连接查询2 外连接(左右联接查询)

2024-08-23 04:18

本文主要是介绍SQL连接查询2 外连接(左右联接查询),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

1)左连接:Left Join Left Outer Join

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

我们看对应的SQL语句:

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

FromStudent

LeftJOIN BorrowBook

OnStudent.StudentID = BorrowBook.StudentID

运行的结果如下:

StudentName StudentAgeBorrowBookName BorrowBookPublish

---------------------------------------------------------------------------------

张三 25 马克思主义政治经济学 电子工业出版社

李四 26 ***思想概论 高等教育出版社

王五 27 邓小平理论 人民邮电出版社

赵六 28 大学生思想道德修养 中国铁道出版社

无名氏 27 NULL NULL

(所影响的行数为 5 )

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

2) 右连接:Right Join Right Outer Join

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

我们看对应的SQL语句

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

FromStudent

Right JOIN BorrowBook

OnStudent.StudentID = BorrowBook.StudentID

运行的结果如下:

StudentName StudentAgeBorrowBookName BorrowBookPublish

----------------------------------------------------------------------------------------------------------------------

张三 25 马克思主义政治经济学 电子工业出版社

李四 26 ***思想概论 高等教育出版社

王五 27 邓小平理论 人民邮电出版社

赵六 28 大学生思想道德修养 中国铁道出版社

NULL NULL C语言程序设计 高等教育出版社

(所影响的行数为 5 )

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

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

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

我们看对应的SQL语句

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

FromStudent

FULL OUTER JOIN BorrowBook

OnStudent.StudentID = BorrowBook.StudentID

结果如下:

StudentName StudentAgeBorrowBookName BorrowBookPublish----------------------------------------------------------------------------------------------------------------------

NULL NULL C语言程序设计 高等教育出版社

张三 25 马克思主义政治经济学 电子工业出版社

李四 26 ***思想概论 高等教育出版社

王五 27 邓小平理论 人民邮电出版社

赵六 28 大学生思想道德修养 中国铁道出版社

无名氏 27 NULL NULL

(所影响的行数为 6 )

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

    交叉连接

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

我们看对应的SQL语句

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

FromStudent CrossJoin BorrowBook

运行的结果如下:

StudentName StudentAgeBorrowBookName 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行,即笛卡尔积,它执行的语句也就等效于

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

From Student,BorrowBook

 

来自 <http://www.cnblogs.com/zhangqs008/archive/2010/07/02/2341196.html>

 

这篇关于SQL连接查询2 外连接(左右联接查询)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1098321

相关文章

MySQL更新某个字段拼接固定字符串的实现

《MySQL更新某个字段拼接固定字符串的实现》在MySQL中,我们经常需要对数据库中的某个字段进行更新操作,本文就来介绍一下MySQL更新某个字段拼接固定字符串的实现,感兴趣的可以了解一下... 目录1. 查看字段当前值2. 更新字段拼接固定字符串3. 验证更新结果mysql更新某个字段拼接固定字符串 -

python连接本地SQL server详细图文教程

《python连接本地SQLserver详细图文教程》在数据分析领域,经常需要从数据库中获取数据进行分析和处理,下面:本文主要介绍python连接本地SQLserver的相关资料,文中通过代码... 目录一.设置本地账号1.新建用户2.开启双重验证3,开启TCP/IP本地服务二js.python连接实例1.

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换功能

《SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能》:本文主要介绍SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能,本文分步骤给大家介绍的... 目录原理解析1. mysql主从复制(Master-Slave Replication)2. 读写分离3.

Mybatis 传参与排序模糊查询功能实现

《Mybatis传参与排序模糊查询功能实现》:本文主要介绍Mybatis传参与排序模糊查询功能实现,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、#{ }和${ }传参的区别二、排序三、like查询四、数据库连接池五、mysql 开发企业规范一、#{ }和${ }传参的

Ubuntu中远程连接Mysql数据库的详细图文教程

《Ubuntu中远程连接Mysql数据库的详细图文教程》Ubuntu是一个以桌面应用为主的Linux发行版操作系统,这篇文章主要为大家详细介绍了Ubuntu中远程连接Mysql数据库的详细图文教程,有... 目录1、版本2、检查有没有mysql2.1 查询是否安装了Mysql包2.2 查看Mysql版本2.

基于SpringBoot+Mybatis实现Mysql分表

《基于SpringBoot+Mybatis实现Mysql分表》这篇文章主要为大家详细介绍了基于SpringBoot+Mybatis实现Mysql分表的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录基本思路定义注解创建ThreadLocal创建拦截器业务处理基本思路1.根据创建时间字段按年进

Python3.6连接MySQL的详细步骤

《Python3.6连接MySQL的详细步骤》在现代Web开发和数据处理中,Python与数据库的交互是必不可少的一部分,MySQL作为最流行的开源关系型数据库管理系统之一,与Python的结合可以实... 目录环境准备安装python 3.6安装mysql安装pymysql库连接到MySQL建立连接执行S

MySQL双主搭建+keepalived高可用的实现

《MySQL双主搭建+keepalived高可用的实现》本文主要介绍了MySQL双主搭建+keepalived高可用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、测试环境准备二、主从搭建1.创建复制用户2.创建复制关系3.开启复制,确认复制是否成功4.同

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

Mysql表的简单操作(基本技能)

《Mysql表的简单操作(基本技能)》在数据库中,表的操作主要包括表的创建、查看、修改、删除等,了解如何操作这些表是数据库管理和开发的基本技能,本文给大家介绍Mysql表的简单操作,感兴趣的朋友一起看... 目录3.1 创建表 3.2 查看表结构3.3 修改表3.4 实践案例:修改表在数据库中,表的操作主要