SQLServer之多表联合查询
多表联合查询简介
定义:连接查询是关系型数据库最主要的查询,通过连接运算符可以实现多个表连接数据查询。
分类:内连接,外连接,全外连接。
内连接
定义
内联接使用比较运算符根据每个表的通用列中的值匹配两个表中的行。
语法
select 表1.*,表2.* from 表1 as a [wtih(锁)] inner join 表2 as b [wtih(锁)] on a.值 {= | != } b.值 [条件1] [where 条件] [group by 条件] [having 条件] [order by 条件];
语法注释
{}:大括号内的值必选一个,例如:选择=号。
[]:索引符号的值表示是可添加也可不添加的,例如:选择不添加[条件1]。
[条件1]:[条件1]=[and | or ] [a.值=b.值 | a.值!=b.值 | a.值=值 | a.值!=值 | b.值=值 | b.值!=值],例如:and a.值=b值,或者,or a.值等于b.值。
[where 条件]:where后跟表中数据的筛选条件,例如:where a.值=1。
[group by 条件]:group by后面跟分组条件,可以跟一个或者多个分组条件,例如:group by a.值,b.值。
[having 条件]:having后边主要是筛选group by条件分组后的结果,后面可以跟一个或者多个条件,例如:select max(a.id),min(b.name) from A as a inner join B as b on a.id=b.id group by a.id,b.name having a,id>1 and b.name=1。
[order by 条件]:order by后面跟排序条件,可以根据一个值或者多个值排序,例如:根据多个值排序,select a.* from A as a inner join B as b on a.id=b.id order by a.值 asc,b.值 desc。
示例:A表内连接B表,使用A表中的数据逐行匹配B表的中数据,匹配成功则返回,匹配失败则不返回值,匹配成功一共返回五行数据,where条件筛选返回五行数据,group by条件筛选返回两行数据,having条件筛选返回两行数据,order by条件筛选3大于1,则3在第一行,1在第二行。
外连接
分类
left outer join(左外连接)和right outer join(右连接)。
左外连接
定义
从表(右表)中的数据逐条匹配主表(左表)中的数据,如果匹配,如果右表匹配一行或者多行则将右表匹配值一行或者多行追加到左表匹配行输出到结果集,如果无匹配,NULL值追加到左表不匹配行输出到结果集。
语法
select 表1.*,表2.* from 表1 as a [wtih(锁)] left [outer] join 表2 as b [wtih(锁)] on a.值 {= | != } b.值 [条件1] [where 条件] [group by 条件] [having 条件] [order by 条件];
语法注释
{}:大括号内的值必选一个,例如:选择=号。
[]:索引符号的值表示是可添加也可不添加的,例如:选择不添加[条件1]。
[条件1]:[条件1]=[and | or ] [a.值=b.值 | a.值!=b.值 | a.值=值 | a.值!=值 | b.值=值 | b.值!=值],例如:and a.值=b值,或者,or a.值等于b.值。
[where 条件]:where后跟表中数据的筛选条件,例如:where a.值=1。
[group by 条件]:group by后面跟分组条件,可以跟一个或者多个分组条件,例如:group by a.值,b.值。
[having 条件]:having后边主要是筛选group by条件分组后的结果,后面可以跟一个或者多个条件,例如:select max(a.id),min(b.name) from A as a left outer join B as b on a.id=b.id group by a.id,b.name having a,id>1 and b.name=1。
[order by 条件]:order by后面跟排序条件,可以根据一个值或者多个值排序,例如:根据多个值排序,select a.* from A as a left outer join B as b on a.id=b.id order by a.值 asc,b.值 desc。
示例:A表左外连接B表,B表中数据逐行取出与A表中数据匹配,右表取出第一行数据1与A表逐行匹配,匹配到两行,将B表数据1追加到A表数据行输出到结果集,同理剩余的数据3和1匹配到三行数据,共匹配到五行数据输出,A中存在数据2与B表无匹配行,则将NULL值追加到A表数据2行输出,匹配的结果集和不匹配的结果集共七行数据输出到结果集。(where条件筛选后输出七行数据,group by条件筛选后会输出三行数据,having筛选后会输出三行数据,order by条件筛选后则会按照数据从大到小排列),依次显示不加筛选条件和添加所有筛选条件的结果。
右外连接
定义
从表(左表)中的数据逐条匹配主表(右表)中的数据,如果匹配,如果左表匹配一行或者多行则将左表匹配值一行或者多行追加到右表匹配行输出到结果集,如果无匹配,NULL值追加到右表不匹配行输出到结果集。
语法
select 表1.*,表2.* from 表1 as a [wtih(锁)] right [outer] join 表2 as b [wtih(锁)] on a.值 {= | != } b.值 [条件1] [where 条件] [group by 条件] [having 条件] [order by 条件];
语法注释
{}:大括号内的值必选一个,例如:选择=号。
[]:索引符号的值表示是可添加也可不添加的,例如:选择不添加[条件1]。
[条件1]:[条件1]=[and | or ] [a.值=b.值 | a.值!=b.值 | a.值=值 | a.值!=值 | b.值=值 | b.值!=值],例如:and a.值=b值,或者,or a.值等于b.值。
[where 条件]:where后跟表中数据的筛选条件,例如:where a.值=1。
[group by 条件]:group by后面跟分组条件,可以跟一个或者多个分组条件,例如:group by a.值,b.值。
[having 条件]:having后边主要是筛选group by条件分组后的结果,后面可以跟一个或者多个条件,例如:select max(a.id),min(b.name) from A as a right outer join B as b on a.id=b.id group by a.id,b.name having a,id>1 and b.name=1。
[order by 条件]:order by后面跟排序条件,可以根据一个值或者多个值排序,例如:根据多个值排序,select a.* from A as a right outer join B as b on a.id=b.id order by a.值 asc,b.值 desc。
示例:A表右外连接B表,A表中数据逐行取出与B表中数据匹配,左表取出第一行数据1与B表逐行匹配,匹配到两行,将A表数据1追加到B表数据行输出到结果集,同理剩余的数据1和3匹配到三行数据,共匹配到五行数据输出,A中存在数据2与B表无匹配行,自动过滤掉并不添加输出,B表数据全部匹配完成,不匹配的结果集为零行,匹配的结果集和不匹配的结果集共五行数据输出到结果集。(where条件筛选后输出五行数据,group by条件筛选后会输出两行数据,having筛选后会输出两行数据,order by条件筛选后则会按照数据从大到小排列),依次显示不加筛选条件和添加所有筛选条件的结果。
全外连接
定义
全外连接又称为完全外连接,该连接查询方式返回两个连接中所有的记录数据。根据匹配条件,如果满足匹配条件时,则返回匹配的一行或者多行数据;如果不满足匹配条件时,同样返回数据,但在相应的列中填入NULL,全外连接返回的结果集中包含了两个完全表的所有数据。全外连接关键字FULL OUTER JOIN。
语法
select 表1.*,表2.* from 表1 as a [wtih(锁)] full [outer] join 表2 as b [wtih(锁)] on a.值 { = | != } b.值 [条件1] [where 条件] [group by 条件] [having 条件] [order by 条件];
语法注释
{}:大括号内的值必选一个,例如:选择=号。
[]:索引符号的值表示是可添加也可不添加的,例如:选择不添加[条件1]。
[条件1]:[条件1]=[and | or ] [a.值=b.值 | a.值!=b.值 | a.值=值 | a.值!=值 | b.值=值 | b.值!=值],例如:and a.值=b值,或者or a.值等于b.值。
[where 条件]:where后跟表中数据的筛选条件,例如:where a.值=1。
[group by 条件]:group by后面跟分组条件,可以跟一个或者多个分组条件,例如:group by a.值,b.值。
[having 条件]:having后边主要是筛选group by条件分组后的结果,后面可以跟一个或者多个条件,例如:select max(a.id),min(b.name) from A as a full outer join B as b on a.id=b.id group by a.id,b.name having a,id>1 and b.name=1。
[order by 条件]:order by后面跟排序条件,可以根据一个值或者多个值排序,例如:根据多个值排序,select a.* from A as a full outer join B as b on a.id=b.id order by a.值 asc,b.值 desc。
示例:全外连接A表与B表,首先输出所有符合条件的数据,A表中数据逐行取出和B表中数据逐行匹配,存在1和3的数据匹配行,匹配成功输出5行数据,然后输出不符合条件的行,A中存在2行不符合条件的值,B表数据全部匹配成功无不符合条件的值,返回A中不符合条件的值并将其它列值置为NULL输出2行数据,总共输出5加2共七行数据。
SQLServer之多表联合查询的更多相关文章
- MVC5+EF6简单实例---以原有SQLServer数据库两表联合查询为例
有二三年没写代码了,**内的工作就是这样,容易废人!看到园子里这么多大侠朝气蓬勃的,我想也要学点东西并和大家分享,共同进步!快乐每一天,进步每一天!言归正传! 通过最近一段时间对MVC5.EF6的学习 ...
- yii 多表联合查询的几种方法
yii多表联合查询, 第一种,用command,自己拼接sql语句执行查询 第二种,用AR,model需继承下面的ar,执行queryall或queryrow方法 <?php //applica ...
- Dynamic CRM 2013学习笔记(九)CrmFetchKit.js介绍:Fetchxml、多表联合查询, 批量更新
CrmFetchKit.js是一个跨浏览器的一个类库,允许通过JavaScript来执行fetch xml的查询,还可以实现批量更新,分页查询等.目前已支持Chrome 25, Firefox 19 ...
- SharePoint 2013 列表多表联合查询
在SharePoint的企业应用中,遇到复杂的逻辑的时候,我们会需要多表查询:SharePoint和Sql数据表一样,也支持多表联合查询,但是不像Sql语句那样简单,需要使用SPQuery的Joins ...
- MyBatis 多表联合查询及优化 以及自定义返回结果集
下面就来说一下 mybatis 是通过什么来实现多表联合查询的.首先看一下表关系,如图: 这 里,我已经搭好了开发的环境,用到的是 SpringMVC + Spring + MyBatis,当然,为了 ...
- 一步步学Mybatis-实现多表联合查询(4)
上一章节中我们已经完成了对单表的CRUD操作,接下来今天这一讲讲述的是关于Mybatis在多表查询时候的应用,毕竟实际业务中也是多表的联合查询比较多嘛~ 还记得最一开始我们新建过一张Website表吗 ...
- MyBatis之三:多表联合查询
在这篇文章里面主要讲解如何在mybatis里面使用一对一.一对多.多表联合查询(类似视图)操作的例子. 注:阅读本文前请先大概看一下之前两篇文章. 一.表结构 班级表class,学生表student, ...
- MyBatis 多表联合查询,字段重复的解决方法
MyBatis 多表联合查询,两张表中字段重复时,在配置文件中,sql语句联合查询时使用字段别名,resultMap中对应的column属性使用相应的别名: <resultMap type=&q ...
- ormlite 多表联合查询
ormlite 多表联合查询 QueryBuilder shopBrandQueryBuilder = shopBrandDao.queryBuilder(); QueryBuilder shopQu ...
随机推荐
- Odoo开源智造IT经理人创业圆梦计划正式启动
概念定义 IT经理人创业圆梦计划是什么? 甲方IT经理人的行业背景 + 其他甲方需求及可靠信任的线索资源 = 自主创业圆梦计划 具体措施 甲方IT经理人的职业行业背景取得其他甲方需求线索及信任——通过 ...
- Android之greenDao使用
文章大纲 一.greenDao简介二.greenDao实战三.项目源码下载四.参考文章 一.greenDao简介 1. 什么是greenDao GreenDAO是一个开源的Android OR ...
- Storm入门(十)Twitter Storm: Transactional Topolgoy简介
作者: xumingming | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://xumingming.sinaapp.com/736/twitter-stor ...
- LOJ #6041. 「雅礼集训 2017 Day7」事情的相似度
我可以大喊一声这就是个套路题吗? 首先看到LCP问题,那么套路的想到SAM(SA的做法也有) LCP的长度是它们在parent树上的LCA(众所周知),所以我们考虑同时统计多个点之间的LCA对 树上问 ...
- 滚动视差?CSS 不在话下
何为滚动视差 视差滚动(Parallax Scrolling)是指让多层背景以不同的速度移动,形成立体的运动效果,带来非常出色的视觉体验. 作为网页设计的热点趋势,越来越多的网站应用了这项技术. 通常 ...
- python的进程与线程(三)
线程的锁 1.几个概念 讲起线程的锁,先要了解几个概念:什么是并行?什么是并发?什么是同步?什么是异步? 并发:是指系统具有处理多个任务(动作)的能力 并行:是指系 ...
- .NET Core TDD 前传: 编写易于测试的代码 -- 依赖项
第1篇: 讲述了如何创造"缝". "缝"(seam)是需要知道的概念. 第2篇, 避免在构建对象时写出不易测试的代码. 本文是第3篇, 讲述依赖项和迪米特法则 ...
- python接口自动化(十)--post请求四种传送正文方式(详解)
简介 post请求我在python接口自动化(八)--发送post请求的接口(详解)已经讲过一部分了,主要是发送一些较长的数据,还有就是数据比较安全等.我们要知道post请求四种传送正文方式首先需要先 ...
- 一次composer错误使用引发的思考
一次composer错误使用引发的思考 这个思考源自于一个事故.让我对版本依赖重新思考了一下. 事故现象 一个线上的管理后台,一个使用laravel搭建的管理后台,之前在线上跑的好好的,今天comop ...
- Bumblebee微服务网关的部署和扩展
Bumblebee是.netcore下开源基于BeetleX.FastHttpApi扩展的HTTP微服务网关组件,它的主要作用是针对WebAPI集群服务作一个集中的转发和管理:作为应用网关它提供了应用 ...