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 ...
随机推荐
- 结合JDK源码看设计模式——模板方法模式
前言: 相信很多人都听过一个问题:把大象关进冰箱门,需要几步? 第一,把冰箱门打开:第二,把大象放进去:第三,把冰箱门关上.我们可以看见,这个问题的答案回答的很有步骤.接下来我们介绍一种设计模式--模 ...
- vue之$root,$parent
$root vue状态管理使用vuex,如果项目不大,逻辑不多,name我们没必要用vuex给项目增加难度,只需要用$root设置vue实例的data就行了,如下 main.js new Vue({ ...
- CASE 表达式
通过本篇文章我们来学习一下CASE表达式的基本使用方法. CASE表达式有简单 CASE表达式(simple case expression)和搜索 CASE表达式(searched caseexpr ...
- 《SQL CookBook 》笔记-准备工作
目录 准备 1.建立员工表--EMP 2.建立部门表--DEPT 3.EMP表和DEPT表插入数据 4.建立透视表T1,并插入数据 5.建立透视表T10,并插入数据 第二章 shanzm 准备 1.建 ...
- 「技巧」如何将Sketch改为深色模式
之前Sketch只能根据mac系统的外观设置变更皮肤.在更新了版本54之后,可以脱离操作系统,在自己的偏好设置中更改外观了. 准备 Sketch 54 更多工具:whose.design 第一步:打开 ...
- 通信(二):进程间通信之socket
一.为什么要学习socket? 我们打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?我们用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket.本地的进程间通 ...
- 从Android源码修改cpu信息
cpuinfo 网上的文章都是怎么查看/proc/cpuinfo,一直以为这种东西没法改呢,我还是太天真了./proc/cpuinfo是个文件,只读,想直接写肯定不行的.今天研究了一下,发现它的输出逻 ...
- Vue(day4)
这里说的Vue中的路由是指前端路由,与后端路由有所区别.我们可以使用url来获取服务器的资源,而这种url与资源的映射关系就是我们所说的路由.对于单页面程序来说,我们使用url时常常通过hash的方法 ...
- AI - 深度学习之美十四章-概念摘要(1~7)
原文链接:https://yq.aliyun.com/topic/111 本文是对原文内容中部分概念的摘取记录,可能有轻微改动,但不影响原文表达. 01 - 一入侯门"深"似海,深 ...
- js实现二分查找算法
二分查找:是一种搜索某个值的索引的算法. 基本条件:有序的数组. 思路:1.将数组折半,分成左右两个数组. 2.判断要查找的数和中间位置数值的大小,来判断要查找的数实在哪一半. 3.之后继续折半查找, ...