SQLServer基础语法实例应用(一)(二)

2014-11-24 10:16:04 · 作者: · 浏览: 1
1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。

注意:根本没有EXCEPT ALL 的用法;网上很多文章里写有EXCEPT ALL ,实际上是错误的。(测试SQL Server 2000 2005 2008R2 2012都不好用)

--> 测试数据:[a]
if object_id('[a]') is not null drop table [a]
go 
create table [a]([ID] int)
insert [a]
select 1 union all
select 1 union all
select 2 union all
select 3 union all
select null 
select * from a
/*

(5 行受影响)
ID
-----------
1
1
2
3
NULL

(5 行受影响)
*/

--> 测试数据:[b]
if object_id('[b]') is not null drop table [b]
go 
create table [b]([ID] int)
insert [b]
select 1 union all
select 2 union all
select 2 union all
select 4 union all
select null 
select * from b
/*

(5 行受影响)
ID
-----------
1
2
2
4
NULL

(5 行受影响)

*/
--取两表不同数据并去重
select * from a 
EXCEPT 
select * from b
/*
ID
-----------
3

(1 行受影响)
*/ 
C: INTERSECT 运算符

INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。

注意:根本没有INTERSECT ALL 的用法;网上很多文章里写有INTERSECT ALL ,实际上是错误的。(测试SQL Server 2000 2005 2008R2 2012都不好用)

--> 测试数据:[a]
if object_id('[a]') is not null drop table [a]
go 
create table [a]([ID] int)
insert [a]
select 1 union all
select 1 union all
select 2 union all
select 3 union all
select null 
select * from a
/*

(5 行受影响)
ID
-----------
1
1
2
3
NULL

(5 行受影响)
*/

--> 测试数据:[b]
if object_id('[b]') is not null drop table [b]
go 
create table [b]([ID] int)
insert [b]
select 1 union all
select 2 union all
select 2 union all
select 4 union all
select null 
select * from b
/*

(5 行受影响)
ID
-----------
1
2
2
4
NULL

(5 行受影响)

*/
--取两表相同数据并去重
select * from a 
INTERSECT  
select * from b
/*
ID
-----------
NULL
1
2

(3 行受影响)
*/ 
12、说明:使用外连接
A、left (outer) join:
左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。

SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

--> 测试数据:[a]
if object_id('[a]') is not null drop table [a]
go 
create table [a]([ID] int)
insert [a]
select 1 union all
select 1 union all
select 2 union all
select 3 union all
select null 
select * from a
/*

(5 行受影响)
ID
-----------
1
1
2
3
NULL

(5 行受影响)
*/

--> 测试数据:[b]
if object_id('[b]') is not null drop table [b]
go 
create table [b]([ID] int)
insert [b]
select 1 union all
select 2 union all
select 2 union all
select 4 union all
select null 
select * from b
/*

(5 行受影响)
ID
-----------
1
2
2
4
NULL

(5 行受影响)

*/


select a.*,b.* from a  a LEFT  JOIN b b ON a.id= b.id
/*
ID          ID
----------- -----------
1           1
1           1
2           2
2           2
3           NULL
NULL        NULL

(6 行受影响)

*/
B:right (outer) join:

右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。

--> 测试数据:[a]
if object_id('[a]') is not null drop table [a]
go 
create table [a]([ID] int)
insert [a]
select 1 union all
select 1 union all
select 2 union all
select 3 union all
select null 
select * from a
/*

(5 行受影响)
ID
-----------
1
1
2
3
NULL

(5 行受影响)
*/

--> 测试数据:[b]
if object_id('[b]') is not null drop table [b]
go 
create table [b]([ID] int)
insert [b]
select 1 union all
select 2 union all
select 2 union all
select 4 union all
select null 
select * from b
/*

(5 行受影响)
ID
-----------
1
2
2
4
NULL

(5 行受影响)

*/


select a.*,b.* from a  a RIGHT  JOIN b b ON a.id= b.id
/*
ID          ID
----------- -----------
1           1
1           1
2           2
2           2
NULL        4
NULL        NULL

(6 行受影响)


*/
C:full/cross (outer) join:

全外连接:不仅包括符号连接表的匹配行,