`
emowuyi
  • 浏览: 1482084 次
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

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

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

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

  我们看对应的SQL语句:

Select Student.StudentName,Student.StudentAge,BorrowBook.BorrowBookName,BorrowBook.BorrowBookPublish
From Student
Left JOINBorrowBook
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 JOINBorrowBook
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 OUTERJOIN 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 StudentCross JoinBorrowBook

  运行的结果如下:

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

分享到:
评论

相关推荐

    SQL的几种连接:内连接、左联接、右连接、全连接、交叉连接

    SQL的几种连接:内连接、左联接、右连接、全连接、交叉连接

    SQL多表连接查询

    SQL多表连接查询,内联 外联(左外联,右外联)交叉联接

    SQL_左外连接_右外连接_全连接_内连接

    SQL 左外连接,右外连接,全连接,内连接 。联接条件可在FROM或WHERE子句中指定,建议在FROM子句中指定联接条件。WHERE和HAVING子句也可以包含搜索条件,以进一步筛选联接条件所选的行。

    SqlDbx连接oracle

    Sqldbx连接oracle,不用安装client http://www.cnblogs.com/ycdx2001/p/5441405.html

    kettle 连接sqlserver 驱动

    kettle连接SqlServer需要的驱动 下载后直接解压到lib目录下就可以重新连接到数据库上面。

    SQL的几种连接:内连接、左联接、右连接、全连接、交叉连接.zip

    SQL的几种连接:内连接、左联接、右连接、全连接、交叉连接

    SQL 四种连接-左外连接、右外连接、内连接、全连接详解

    SQL的四种连接-左外连接、右外连接、内连接、全连接 今天在看一个遗留系统的数据表的时候发现平时查找的视图是FULL OUT JOIN的,导致平时的数据记录要进行一些限制性处理,其实也可以设置视图各表为右外连接并在...

    linux操作系统配置ODBC数据源连接SQL Server

    本文档详细说明了Linux操作系统下配置ODBC数据源, 连接sql server的方法和步骤。

    T-SQL高级查询

    查询id大于2的数据,并完成运算后的结果进行分组和排序 select count(*), (sex * id) new from student where id > 2 group by sex * id order by sex * id; --group by all 所有分组 按照年龄分组,是所有的年龄 ...

    MySql基本查询、连接查询、子查询、正则表达查询讲解

    2、在单表上查询数据 3、使用聚合函数查询数据 4、多表上联合查询 5、子查询 6、合并查询结果 7、为表和字段取别名 8、使用正则表达式查询 什么是查询? 怎么查的? 数据的准备如下: [sql] view plain copy ...

    SQL查询技巧(范例宝典)

     10.11 多表查询(连接查询) 498  实例340 利用FROM子句进行多表查询 498  实例341 使用表别名 499  实例342 合并多个结果集 501  10.12 嵌套查询 503  实例343 简单嵌套查询 503  实例344...

    SQLSserver2008 上

    1、SQL 2008视频教程—SQL数据库连接 ? 2、SQL 2008视频教程-系统数据库 ? 3、SQL 2008视频教程-数据库创建 ? 4、SQL 2008视频教程-数据库创建2 ? 5、SQL 视频教程-对数据库属性的更改 ? 6、SQL 2008...

    SQL查询插件修改版 (ODBC连接)

    该EXE软件可以免去通过SQL EXPLOR或者数据库查询界面进行查询的麻烦,直接可以打开该EXE文件,因为该EXE是读去BDE中的数据库别名进行连接,所以使用的时候你的保证你的数据库是否通过ODBC连接上。因为在程序中用到了...

    Oracle DBA 常用的一些SQL语句(50个)

    外连接.SQL 外部例程.SQL 建6节点回滚段.SQL 建回滚段.SQL 建立一个与现存数据库相同但不含数据的空库.sql 扩展超过100M查询.sql 整理表空间碎片.sql 新建表.sql 显示数据文件信息.sql 查插入表的性能.sql 查看...

    Oracle 数据库连接查询SQL语句

    外连接与内连接不一样,外连接返回的查询结果中不仅包含符合条件的行,还包括左表(左外连接),右表(右外连接)或者两个连接表(全外连接)中的所有不符合条件的数据行。 1.左连接 (left [outer] join) 左外连接就是将左...

    (第一卷)Microsoft.SQL.Server.2008技术内幕:T-SQL语言基础

    主要包括SQL的基础理论、逻辑查询处理、SELECT查询、连接和子查询、表表达式、过滤和分组、透视转换、修改数据、事务和一致性的处理、可编程对象等内容。  书中并非系统地罗列T-SQL的各种语法元素,而是结合实践中...

    经典SQL脚本大全

    │ 1.9.2(2) 使用文件及文件组.sql │ 1.9.2(3) 调整tempdb数据库的文件属性.sql │ ├─第02章 │ │ 2.1 日期概念理解中的一些测试.sql │ │ 2.2.4 CONVERT在日期转换中的使用示例.sql │ │ 2.3.3 SET ...

    SQL无法联接到服务器

    无法用“电脑名\实例名”连接数据库的解决方案

    程序员的SQL金典完整版

    子查询、表联接、不同 DBMS 中 SQL 语法差异、SQL 调优、NULL 值处理、事务、开窗函数 等高级技术;第三部分为案例篇,讲解了前两部分的知识的综合运用。此书适用于学习数据 库编程的读者,对于有一定数据库开发经验...

    SQL查询安全性及性能优化

    经验:使用子查询嵌套不要过多,尽量使用表连接查询代替子查询,因为表连接查询效率稍高一点。 SQL优化工具 使用报表服务 通过Reporting Service查找低效SQL 选择 性能 - 批处理执行统计信息和性能相关的几个...

Global site tag (gtag.js) - Google Analytics