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

  

SQL Server 2012 - 多表连接查询的更多相关文章

  1. sql server 实现多表连接查询

    项目中要实现多表查询,用外连接实现. a表 a(aid,aname) 其中aid为pk b表 b(aid,bname,aid) 其中 bid为pk,aid为fk c表 c(cid,cname,aid) ...

  2. 【SQL】在SQL Server中多表关联查询问题

    好久没有写SQL语句的多表连接查询,总在用框架进行持久化操作.今天写了一个多表关联查询,想根据两个字段唯一确定一条数据 失败的案例如下: SELECT cyb.id,ad.name FROM [Gen ...

  3. SQL Server三种表连接原理

    在SQL Server数据库中,查询优化器在处理表连接时,通常会使用一下三种连接方式: 嵌套循环连接(Nested Loop Join) 合并连接 (Merge Join) Hash连接 (Hash ...

  4. SQL Server中多表连接时驱动顺序对性能的影响

    本文出处:http://www.cnblogs.com/wy123/p/7106861.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错 ...

  5. 多个程序对sql server中的表进行查询和插入操作导致死锁

    最近在做一个项目,是要用多个程序对sql server中的相同的数据库进行操作(查询和插入),所以在开始的时候常会出现死锁问题,后来在网上进行了咨询,发现了一些解决方法,留作大家参考: 并发去操纵一张 ...

  6. 开启SQL Server 2012的远程连接

    有个远程的SQL Server服务器需要连接,因为SQL server默认是把远程连接关闭的. 以下有文档,照着做了,但是还是连不上, http://www.2cto.com/database/201 ...

  7. SQl Server 数据库多表连接

    [缘由] 为了防止数据的冗余,我们会将数据库中表进行拆分,这样就产生了多张表,表与表之间通过主外键关联,但这样又造成了我们查找和修改的困难,如何进行多表之间的查找呢? 我们将一个查询同时设计两个或两个 ...

  8. SQL SERVER 2012文件表(FILETABLE)新体验之一

    SQLSERVER 2012 文件表功能很COOL,让我们体验一下吧. 1,创建数据库 [sql] DREATE DATABASE FileTableTest ON  PRIMARY (     NA ...

  9. Azure 云平台用 SQOOP 将 SQL server 2012 数据表导入 HIVE / HBASE

    My name is Farooq and I am with HDinsight support team here at Microsoft. In this blog I will try to ...

随机推荐

  1. C# mvc读取模板并修改上传到web

    C# mvc读取模板并修改上传到web 后台: public FileResult GetXls() { FileStream fs = new FileStream(System.Web.HttpC ...

  2. linux第一个C语言和sh脚本

    linux第一个C语言 $ gedit hello_world.c #include <stdio.h> int main(void) { printf("hello world ...

  3. jQuery Validate 无法验证 chosen-select元素

    chosen-select元素执行了chosen()方法后,为select元素加上了style="display: none;"进行隐藏,然后重新构造了一个看起来像select的下 ...

  4. C# Request获取URL常见用法

    如果测试的url地址是http://www.test.com/testweb/default.aspx, 结果如下: Request.ApplicationPath: /testweb Request ...

  5. CentOS7 Firewall超详细使用方法

    CentOs7改变的最大处就是防火墙了,下面列用了常用的防火墙规则,端口转发和伪装 一.Firewalld基础规则 --get-default-zone 打印已设置为默认区域的当前区域,默认情况下默认 ...

  6. ZT 苍天助曹不助汉哪

    诸葛亮能夜观星象,但为什么在上方谷一役中,孔明没有测出突如其来的大雨,却高呼“苍天助曹不助汉哪”断送了自己的性命,这是为什么 谋事在人,成事在天.   雁过留影 3级 2011-04-18 天命不可违 ...

  7. 高性能计算 GPU 等资料

    从石油领域的应用看GPU.CPU算法效果比较  http://www.csdn.net/article/2011-06-21/300207 HPC 论坛 http://hpcbbs.it168.com ...

  8. [原]零基础学习在Android进行SDL开发后记

    本着学习交流记录的目的编写了这个系列文章,主要用来记录如何从零开始学习SDL开发的过程,在这个过程中遇到了很多问题,差点就放弃了.首先是SDL的Android移植的时候遇到了比较坑的是SDL移植到An ...

  9. Dell R720上的系统安装问题的解决办法(关于RAID建立磁盘阵列的技术)

    摘要:本篇是本人在搭建大数量存储.搜索环境时,对于使用Dell PowerEdge R720 and R720xd作为服务器所遇到的一些问题进行的总结. 开始时,我们使用Dell提供的安装光盘(蓝色) ...

  10. Android(java)学习笔记210:Android线程形态之 IntentService

    1. IntentService原理 IntentService是一种特殊的Service,既然是Service,使用的时候记得在AndroidManifest清单文件中注册. 并且它是一个抽象类,因 ...