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作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

mysql8.0.43使用InnoDB Cluster配置主从复制

《mysql8.0.43使用InnoDBCluster配置主从复制》本文主要介绍了mysql8.0.43使用InnoDBCluster配置主从复制,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录1、配置Hosts解析(所有服务器都要执行)2、安装mysql shell(所有服务器都要执行)3、

k8s中实现mysql主备过程详解

《k8s中实现mysql主备过程详解》文章讲解了在K8s中使用StatefulSet部署MySQL主备架构,包含NFS安装、storageClass配置、MySQL部署及同步检查步骤,确保主备数据一致... 目录一、k8s中实现mysql主备1.1 环境信息1.2 部署nfs-provisioner1.2.

MySQL中VARCHAR和TEXT的区别小结

《MySQL中VARCHAR和TEXT的区别小结》MySQL中VARCHAR和TEXT用于存储字符串,VARCHAR可变长度存储在行内,适合短文本;TEXT存储在溢出页,适合大文本,下面就来具体的了解... 目录一、VARCHAR 和 TEXT 基本介绍1. VARCHAR2. TEXT二、VARCHAR

MySQL中C接口的实现

《MySQL中C接口的实现》本节内容介绍使用C/C++访问数据库,包括对数据库的增删查改操作,主要是学习一些接口的调用,具有一定的参考价值,感兴趣的可以了解一下... 目录准备mysql库使用mysql库编译文件官方API文档对象的创建和关闭链接数据库下达sql指令select语句前言:本节内容介绍使用C/

mybatis直接执行完整sql及踩坑解决

《mybatis直接执行完整sql及踩坑解决》MyBatis可通过select标签执行动态SQL,DQL用ListLinkedHashMap接收结果,DML用int处理,注意防御SQL注入,优先使用#... 目录myBATiFBNZQs直接执行完整sql及踩坑select语句采用count、insert、u

MySQL之搜索引擎使用解读

《MySQL之搜索引擎使用解读》MySQL存储引擎是数据存储和管理的核心组件,不同引擎(如InnoDB、MyISAM)采用不同机制,InnoDB支持事务与行锁,适合高并发场景;MyISAM不支持事务,... 目录mysql的存储引擎是什么MySQL存储引擎的功能MySQL的存储引擎的分类查看存储引擎1.命令

MyBatis Plus大数据量查询慢原因分析及解决

《MyBatisPlus大数据量查询慢原因分析及解决》大数据量查询慢常因全表扫描、分页不当、索引缺失、内存占用高及ORM开销,优化措施包括分页查询、流式读取、SQL优化、批处理、多数据源、结果集二次... 目录大数据量查询慢的常见原因优化方案高级方案配置调优监控与诊断总结大数据量查询慢的常见原因MyBAT

一文详解MySQL索引(六张图彻底搞懂)

《一文详解MySQL索引(六张图彻底搞懂)》MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度,:本文主要介绍MySQL索引的相关资料,文中通过代码介绍的... 目录一、什么是索引?为什么需要索引?二、索引该用哪种数据结构?1. 哈希表2. 跳表3. 二叉排序树4.