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 ...
随机推荐
- nginx + lua 限制ip地址访问
实验环境:docker + openresty 我限制的5秒钟内允许访问两次效果图: default.conf 代码如下: lua_shared_dict my_limit_count_store ...
- 浅谈CSS3 box-sizing 属性 有趣的盒模型
盒模型的组成大家肯定都懂,由里向外content,padding,border,margin. 盒模型是有两种标准的,一个是标准模型,一个是IE模型. 从上面两图不难看出在标准模型中,盒模型的宽高只是 ...
- QT文件操作
/* 写文件 */ QFile file(filePath); bool bo = file.open(QIODevice::WriteOnly | QIODevice::Append); //qDe ...
- Web前端 前端工程师首选的几款编辑器/IDE以及Markdown的编辑器、语法
前端工程师常使用的编辑器/IDE 本地在线工具 webstrom 推荐指数 ***** vs code 推荐指数 **** atom 推荐指数 **** subline-text 推荐指数 **** ...
- wep api 运行周期
1 程序集解析 2.HttpController类型的解析 3.HttpController 的选择 4.HttpController的创建 二,web api的承载宿主,iis selfhost.O ...
- Vue番外篇 -- vue-router浅析原理
近期被问到一个问题,在你们项目中使用的是Vue的SPA(单页面)还是Vue的多页面设计? 这篇文章主要围绕Vue的SPA单页面设计展开. 关于如何展开Vue多页面设计请点击查看. 官网vue-rout ...
- 做自己的CEO
目录 前言 做自己的CEO 做自己的CEO是指什么 为什么要做自己的CEO 如何做自己的CEO 定义自己的愿景.使命和价值观 愿景 (Vision) 使命 (Mission) 价值观 (Values) ...
- SpringMVC 参数传递和接收的几种方式
普通传参 测试项目:SpringBoot2.0.不使用 form 表单传参,后端不需要指定 consumes . 使用 Postman 进行测试. @PathVariable 只能接收 URL 路径里 ...
- Servlet生命周期 、Filter生命周期、Listering(监听器)总结
Servlet生命周期简述 (1)加载和实例化 当Servlet容器启动或客户端发送一个请求时,Servlet容器会查找内存中是否存在该Servlet实例,若存在,则直接读取该实例响应请求:如果不存在 ...
- Mybatis之旅第二篇-Mapper动态代理方式
一.引言 通过上一篇mybatis的入门学习,我们已经会使用mybatis实现简单的增删改查,但是我们也发现了用原始Dao开发的一些问题: Dao方法体存在重复代码:通过SqlSessionFacto ...