连接(交叉连接、内连接、外连接、自连接)

本文非原创

可分为:交叉连接、内连接、外连接、自连接

1.使用交叉连接:

它是非限制连接,就是将两个表格不加任何条件的组合在一起,
即第一个表格的所有记录分别和第二个表格的每一条记录相连接
组合成新的记录,连接后结果集的行数是两个表格的行数的乘积,
列为两表列之和。

语法: (1)select 列名列表 from 表名1 cross join 表名2
(2)select 列名列表 from 表名1 (起别名) , 表名2

注意:当显示某一些字段要用表名指定。

例:select a.book_name , b.book_num from table1 a , table2 b


2.使用内连接:

内连接是将两个表中满足条件的记录显示出来,就是在交叉连接的
基础上加条件,一般采用“主键 = 外键”的形式。

语法:(1)select 列名列表 from 表名1 [inner] join 表名2 on 条件表达式

(2)select 列名列表 from 表名1 , 表名2 where 条件表达式

例:select * from table1 a join table2 b on a.book_name = b.book_name

3.使用外连接:

外连接分为:左外连接、右外连接、全外连接

(1)左外连接:

它是将左表中的所有数据分别与右表的每一条数据进行组合,
结果集中除了显示内连接的记录外,还显示左表中不符合条
件的记录,并在右表中相应的列上填 Null 值.

语法: select * from 表名1 left [outer] join 表名2 on 条件表达式

(2)右外连接:

它是将右表中的所有数据分别与左表的每一条数据进行组合,
结果集中除了显示内连接的记录外,还显示右表中不符合条
件的记录,并在左表中相应的列上填 Null 值.

语法: select * from 表名1 right [outer] join 表名2 on 条件表达式

(3)全外连接:

全外连接就是左表中的所有记录分别与右表中的每一条进行组合,
结果集中除返回内部连接记录之外,还要显示出两个表中不符合
条件的全部记录,并在左表、右表中对应的位置添上Null 值。

语法: select * from 表名1 full join 表名2 on 条件表达式

4.使用自连接:

自连接就是一张表的两个副本之间的连接,就是将同一个表的
不同行连接起来;使用自连接时,必须为本表指定两个别名,
使其在逻辑上成为两个表。

例: select a.biao_jia , a.biao_liang from qian a join qian b
on a.biao_jia = b.biao_jia and a.biao_liang <> b.biao_liang


5. 合并结果集:

使用union 语句可以把两个以上的结果集合并为一个结果集。

语法: select …………
union
select …………

合并结果集时有以下三点限制:
(1)union 合并的结果集的两个 select 语句的列数相同,
所使用列的数据类型要对应相同;

(2)最后结果集中的列名来自第一个 select 语句;

(3)在合并结果集时,默认将从最后结果集中删除重复的行,
除非使用关键字。

例:select book_name , book_id into #new_1 from YI
go
select egg_name , egg_shu into #new_2 from egg
go
select * from #new_1
union all
select * from # new_2

原文地址:https://www.cnblogs.com/xieyuanzheng/p/5597089.html