VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 数据库 > sql数据库 >
  • sql语句大全之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

  Union纵向查询的几个说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
--Union
--1,列的数目必须相同,对于没有的列,可以给默认的值,如NULL
SELECT StuID,StuName,StuSex,Class,Height FROM dbo.Student WHERE StuID<2
UNION
SELECT  StuID,StuName,StuSex,Class,180 AS Height  FROM dbo.Student WHERE StuID=2
UNION
SELECT  StuID,StuName,StuSex,Class,NULL  FROM dbo.Student WHERE StuID>2
 
--2,查询结果呈现的列名称是以第一列为准,如下面学生身高StuHeight
SELECT StuID,StuName,StuSex,Class,Height AS StuHeight FROM dbo.Student WHERE StuID<2
UNION
SELECT  StuID,StuName,StuSex,Class,180 AS Height  FROM dbo.Student WHERE StuID=2
UNION
SELECT  StuID,StuName,StuSex,Class,NULL AS hei FROM dbo.Student WHERE StuID>2
 
--3, 纵向对应的列的数据类型之间可以相互转换,如下 StuID和Height之间可以转换,可以纵向连接
SELECT StuID,StuName,StuSex,Class,Height AS StuHeight FROM dbo.Student WHERE StuID<2
UNION
SELECT  Height,StuName,StuSex,Class,NULL AS hei FROM dbo.Student WHERE StuID>2
 
--4,对Union的查询结果进行排序,Order 写在最后
SELECT StuID,StuName,StuSex,Class,Height AS StuHeight FROM dbo.Student WHERE StuID<2
UNION
SELECT  StuID,StuName,StuSex,Class,180 AS Height  FROM dbo.Student WHERE StuID=2
UNION
SELECT  StuID,StuName,StuSex,Class,NULL AS hei FROM dbo.Student WHERE StuID>2
ORDER BY Class


相关教程