使用联接和联合合并数据之联合
在关系代数中,联合是加法,而联接是乘法,联合沿垂直方向扩展,而联接
沿水平方向扩展行。
基本语法:
select 语句1
union [ all ]
select 语句2
创建联合查询时必须遵循下述规则
1、列名和别名必须在第一个Select语句中指定
2、每个Select语句指定的列数必须相同,且对应列的数据类型必须是兼容的
3、可以在Select语句中使用表达式指定列的来源,条件是在每个Select语句中都包含
该列。
4、可以在Select into 中使用联合,但关键字into必须放在第一个Select 语句中。
5、除非指定了关键字Distinct,否则Select 命令默认返回所有的行,
而联合的默认行为与此相反。所以如果要返回所有的行,必须指定关键字all
union all
如:select id 列1 from bumen
union
select id from zhiwei order by 列1
结果:
列1
1
2
3
4
5
6
7
8
select id 列1 from bumen
union all
select id from zhiwei order by 列1
结果:
列1
1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
6、Order by子句对所有 Select的结果进行排序,必须放在最后一个Select中,但
它使用第一个Select指定的列名。
如:select id 列1,bmname 列2 from bumen
union
select id,zwname from zhiwei order by 列1
一、交联合
基本语法:
select 语句1
intersect
select 语句2
:在垂直方向上查找公有的行(select 指定的所有的列的值),查找两个数据集共有的行。
注:内联接在水平方向查找共有的行,交联合查询与内联接的类似之处在于,都根据匹配
来决定不否返回相应的行,然而,交联合查询将空值视为相同,进而在结果中包含相应的
行,而内联接将空值视为不同。因此不返回相应的行。
如:select id 列1 from bumen
intersect
select id from zhiwei order by 列1
结果:
列1
1
2
3
4
5
6
7
其中bumen表中的id值为1 -7,zhiwei表中的为1-8
二、差联合
基本语法:
select 语句1
except
select 语句2
返回只在第一个数据集中出现的行,
注:这里说的相同是指两行数据中Select 指定的列的值全相同
如:
select id from zhiwei
except
select id 列1 from bumen
结果:
8
select id 列1 from bumen
except
select id from zhiwei
结果:空