SQL左右连接查询
2013-11-18 15:49
218 查看
外连接主要包括左连接、右连接和完整外部连接。
1)左连接:Left Join 或 Left Outer Join
左连接的结果集包括LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值(Null)。
我们看对应的SQL语句:
运行的结果如下:
(所影响的行数为 5 行)
可以看到的是,它查询的结果是以左表Student为主,Student对应的StudentID在右表BorrowBook如果不存在的话,就会用NULL值来代替。
2) 右连接:Right Join 或 Right Outer Join
右连接和左连接相反,它将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值(Null)。
我们看对应的SQL语句
运行的结果如下:
可以看到的是,它查询的结果是以右表BorrowBook为主,BorrowBook对应的StudentID在左表Student如果不存在的话,就会用NULL值来代替。
3) 完整外部联接:Full Join 或 Full Outer Join
完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。
我们看对应的SQL语句
结果如下:
(所影响的行数为 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
运行的结果如下:
(所影响的行数为 25 行)
可以看到的是,它把表Student中的每一行和BorrowBook中的每一条记录都进行关联,返回的记录数为5*5=25行,即笛卡尔积,它执行的语句也就等效于
Select Student.StudentName,Student.StudentAge,BorrowBook.BorrowBookName,BorrowBook.BorrowBookPublish
From Student,BorrowBook
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
相关文章推荐
- SQL连接查询2 外连接(左右联接查询)
- SQL连接查询2 外连接(左右联接查询)
- SQL连接查询2 外连接(左右联接查询)
- SQL连接查询2 外连接(左右联接查询)
- SQL连接查询2 外连接(左右联接查询)
- SQL多表查询之左右连接
- 关于SQL的左右连接查询
- sql(三):多表查询、左右连接、组函数与分组统计
- (转)Hibernate中关于多表连接查询hql 和 sql 返回值集合中对象问题
- SQL连接查询
- excel vba进行SQL查询几个连接情况
- sql的各种连接查询
- oralce 取前几条数据 分页查询 左右内外连接 order by group by
- SQL连接查询_LEFT JOIN
- SQL连接查询语句(内、外、交叉和合并查询)
- sql内外连接查询的区别
- Sql连接查询
- SQL表连接查询(inner join、full join、left join、right join)
- sql连接一对多查询获取一对一
- leetcode 181. Employees Earning More Than Their Managers(SQL,相关子查询,自身连接)38