重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
sqlserver 是 except
创新互联是一家专业从事成都做网站、网站设计的网络公司。作为专业网站制作公司,创新互联依托的技术实力、以及多年的网站运营经验,为您提供专业的成都网站建设、成都全网营销及网站设计开发服务!
select * from ta where col1 = xxx
except
select * from ta where col2 = yyy;
oracle 是 minus
select * from ta where col1 = xxx
minus
select * from ta where col2 = yyy;
使用 EXISTS 和 NOT EXISTS 查找交集与差集
使用 EXISTS 和 NOT EXISTS 引入的子查询可用于两种集合原理的操作:交集与差集。两个集合的交集包含同时属于两个原集合的所有元素。差集包含只属于两个集合中的第一个集合的元素。
city 列中 authors 和 publishers 的交集是作者和出版商共同居住的城市的集合。
USE pubs
SELECT DISTINCT city
FROM authors
WHERE EXISTS
(SELECT *
FROM publishers
WHERE authors.city = publishers.city)
下面是结果集:
city
--------
Berkeley
(1 row(s) affected)
当然,该查询可以写成一个简单的联接。
USE pubs
SELECT DISTINCT authors.city
FROM authors INNER JOIN publishers
ON authors.city = publishers.city
city 列中 authors 和 publishers 的差集是作者所居住的、但没有出版商居住的所有城市的集合,也就是除 Berkeley 以外的所有城市。
USE pubs
SELECT DISTINCT city
FROM authors
WHERE NOT EXISTS
(SELECT *
FROM publishers
WHERE authors.city = publishers.city)
该查询也可以写成:
USE pubs
SELECT DISTINCT city
FROM authors
WHERE city NOT IN
(SELECT city
FROM publishers)
SQL 是一种 ANSI 的标准计算机语言如今无论是像Oracle、Sybase、DB2、Informix、SQL Server这些大型的数据库管理系统,还是像Visual Foxpro、PowerBuilder这些PC上常用的数据库开发系统,都支持SQL语言作为查询语言 oracle sql与其他数据库sql没有区别 只是每种数据库具体怎么去实现(内部运行机制不同但是 提供的SQL(算是编程中说的接口吧)是一样的
1:union 相当于数学里面的并集,另外还有expect(差集),Intersect交集分别返回两个表的差集和交集
2:insert into WORKERS
select 'A',25,'统计',3000,1 union all
select 'B',30,'设计规划',9000,2 union all
select 'C',20,'代码员',2000,3
此处union all相当于将三条数据并起来通过一个insert语句插入数据库的,
亦即是执行了三个inser into WORKERS values('A',25,'统计',3000,1);语句
3,以上是单值插入,如果要将一张表满足某一条件的所有数据插入另一张表的话就要用到insert .....into.....select.....from语句了
比如:insert into 目标表(字段1,字段2,字段3) select 字段1_1,字段2_1,字段3_1 from 源表 where 条件表达式
4,有其他疑问可以问我!
思路是这样:用sql语句在数据库先建一个空的临时表,例如#temp,再用SqlBulkCopy 复制到数据库的#temp,然后用sql 语句将#temp与目标表的差集插入到目标表,最后将临时表删除掉。
废话不多说了,直接给大家贴代码了,具体代码如下所示:
--
交叉连接产生笛卡尔值
(X*Y)
SELECT
*
FROM
Student
cross
Join
dbo.ClassInfo
--另外一种写法
SELECT
*
FROM
Student
,
ClassInfo
--
内连接
(Inner
可以省略)
SELECT
*
FROM
Student
JOIN
dbo.ClassInfo
ON
dbo.Student.Class
=
dbo.ClassInfo.ID;
--
Inner
Join
SELECT
*
FROM
Student
INNER
JOIN
dbo.ClassInfo
ON
dbo.Student.Class
=
dbo.ClassInfo.ID;
--
on
条件,通常是
主外键,但是不限于主外键
--
on
条件,允许有多个,而且可能是针对某个表的
SELECT
*
FROM
Student
INNER
JOIN
dbo.ClassInfo
ON
dbo.Student.Class
=
dbo.ClassInfo.ID
AND
dbo.Student.Class
IN
(1,2)
--
针对Student表增加查询条件
--
不等于
(笛卡尔值减去
相等的值)
SELECT
*
FROM
Student
INNER
JOIN
dbo.ClassInfo
ON
dbo.Student.Class
dbo.ClassInfo.ID;
--自连接
从Class表中查询到Class所在的系
SELECT
T1.*
,T2.ClassName
FROM
dbo.ClassInfo
AS
T1
INNER
JOIN
dbo.ClassInfo
AS
T2
ON
T1.PID=T2.ID
--
Left
Join
SELECT
*
FROM
Student
Left
JOIN
dbo.ClassInfo
ON
dbo.Student.Class
=
dbo.ClassInfo.ID;
--
Right
Join
SELECT
*
FROM
Student
RIGHT
JOIN
dbo.ClassInfo
ON
dbo.Student.Class
=
dbo.ClassInfo.ID;
--
全外连接
SELECT
*
FROM
Student
FULL
OUTER
JOIN
dbo.ClassInfo
ON
dbo.Student.Class
=
dbo.ClassInfo.ID;
--
外连接和内连接的区别是:
--
内连接,on条件不符合的话,会过滤掉数据
--
外连接,以保留表为主,on条件成立显示数据,否则显示NULL
--Union
纵向连接
SELECT
StuID,StuName,StuEnName,StuAge,StuBirthday
FROM
Student
WHERE
StuID=2
UNION
SELECT
StuID,StuName,StuEnName,StuAge,StuBirthday
FROM
dbo.Student
WHERE
StuID2
--Union
去重复
SELECT
StuSex
FROM
Student
WHERE
StuID=2
UNION
SELECT
StuSex
FROM
dbo.Student
WHERE
StuID2
--Union
显示全部
SELECT
StuSex
FROM
Student
WHERE
StuID=2
UNION
ALL
SELECT
StuSex
FROM
dbo.Student
WHERE
StuID2
--Except
差集,排除
SELECT
StuID,StuName,StuEnName,StuAge,StuBirthday
FROM
Student
Except
SELECT
StuID,StuName,StuEnName,StuAge,StuBirthday
FROM
dbo.Student
WHERE
StuID=2
--Intersect
交集
SELECT
StuID,StuName,StuEnName,StuAge,StuBirthday
FROM
Student
WHERE
StuID=2
Except
SELECT
StuID,StuName,StuEnName,StuAge,StuBirthday
FROM
dbo.Student
WHERE
StuID=3
以上所述是小编给大家介绍的SQL
Server
2012
多表连接查询功能实例代码,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!