SQL Server 2012 - 多表连接查询

Posted i-shanghai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server 2012 - 多表连接查询相关的知识,希望对你有一定的参考价值。

-- 交叉连接产生笛卡尔值 (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 StuID>2

--Union 去重复
SELECT  StuSex
FROM    Student WHERE StuID<=2
UNION
SELECT StuSex
FROM dbo.Student WHERE StuID>2

--Union 显示全部
SELECT  StuSex
FROM    Student WHERE StuID<=2
UNION ALL
SELECT StuSex
FROM dbo.Student WHERE StuID>2

--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 - 多表连接查询的主要内容,如果未能解决你的问题,请参考以下文章

Sql Server数据库之多表查询

sql server 2005多表连接查询,去除部分列不查询

Sql Server多表查询

SQL Server学习笔记——多表查询

SQL Server学习笔记——多表查询

sql多表连接查询怎么添加其它条件