• 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纵向查询的几个说明:

    --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
    

      

  • 相关阅读:
    扯一扯纯函数
    10.28
    10.27 动手动脑5
    10.26
    10.25 周总结
    10.23
    10.22
    10.21 动手动脑4
    10.20
    10.19
  • 原文地址:https://www.cnblogs.com/i-shanghai/p/6349853.html
Copyright © 2020-2023  润新知