SQL Server中的连接查询(内连接、外连接、交叉连接)
在数据库查询中,经常会用到两个有关联的表进行查询,需要把两个表中的数据按照某些条件查出来,这时就可以使用连接查询
连接查询分为三种:内连接、外连接和交叉连接
1. 内连接
内连接inner join ,和join是一个东西,join是inner join的简写。 例如: select * from TestA a inner join TestB b on a.id = b.aId
内连接是返回被连接表(a表和b表)中所有的列,包括重复列
在实际使用中,可能连接查询会应用在a表与b表的数据关系是一对多(比如一个学生可以选择好多门课),b表对a表是一对一这样的关系查询中,此时,查询结果的行数是一对一那张表(b表)中符合查询条件的行数
2. 外连接
外连接分为: 左(外)连接、右(外)连接、全连接
左(外)连接 left (outer) join,左连接是以左边表为主表,右边表为辅表,返回左表中的所有行,如果左表中的行在右表中没有匹配行,那么结果中右表的列返回空值。如果左表和右表的数据关系是一对多的关系,那么查询结果中,左表可能会有重复数据。
右(外)连接 right (outer) join,右外连接和左外连接正好相反,右外连接是以右表为主表,左表为辅表,会返回右表中的所有行,如果右表中的行在左表中没有匹配行,那么结果中左表的列返回空值。如果右表与左表是一对多关系,那么查询结果中,右表可能有重复数据。
全连接 full join,全连接就是把左表和右表的数据全部都查询出来,如果左表的行在右表中没有匹配行,那么结果中右表的列返回空值,如果右表的行在左表中没有匹配行,那么结果中左表中的列返回空值。
3. 交叉连接
交叉连接 cross join,使用交叉连接时,如果不带where条件,那么查询结果返回的就是著名的笛卡尔积,也就是左表中的每一条数据都会逐条与右表中每一条数据进行匹配,查询结果返回的行数是左表行数与右表行数的乘积。
带where条件时,返回的就是符合条件的行数
总结:
左连接:以左表为主,左边表的数据肯定会完整展示(可能会有重复),右表没对应的就是null;
右连接:以右表为主,右表数据肯定会完整展示(可能会有重复),左表没对应的就是null;
全连接:两个表的数据都会完整展示(也可能会有重复数据);
交叉连接:不带where条件时查询结果就是笛卡尔积
SQL Server中的连接查询(内连接、外连接、交叉连接)的更多相关文章
- c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程
c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...
- SQL server中的一些查询
SQL 不同于与其他编程语言的最明显特征是处理代码的顺序.在大数编程语言中,代码按编码顺序被处理,但是在SQL语言中,第一个被处理的子句是FROM子句,尽管SELECT语句第一个出现,但是几乎总是最后 ...
- SQL Server中获取指定时间段内的所有日期
DECLARE @days INT, @date_start DATETIME = '2016-11-01', @date_end DATETIME = '2016-11-10' SET @days ...
- 补充:sql server 中的相关查询、case函数
相关查询(在同一个表中) 相关查询类似子查询,但是又不同于子查询:子查询中的子条件可以单独查出数据,但是相关查询的子条件不能查处数据.(可以理解成C#中for的穷举法,第一个for走一个,第二个for ...
- SQL Server中获取指定时间段内的所有月份
例如查询 2012-1-5 到 2012-11-3 之间所有的月份 declare @begin datetime,@end datetime set @begin='2012-1-5' set @e ...
- [SQL]sql server中如何直接查询存储过程EXEC返回的结果集?
Declare @T Table (iDay VARCHAR(),iNum DECIMAL(,),yuxiang DECIMAL(,)) Insert @T --EXEC [dbo].[BSP0101 ...
- 在sql server 中查找一定时间段内访问数据库情况
total_worker_time AS [总消耗CPU 时间(ms)], execution_count [运行次数], qs.total_worker_time AS [平均消耗CPU 时间(ms ...
- MS sql server 基础知识回顾(二)-表连接和子查询
五.表连接 当数据表中存在许多重复的冗余信息时,就要考虑将这些信息建在另一张新表中,在新表中为原表设置好外键,在进行数据查询的时候,就要使用到连接了,表连接就好像两根线,线的两端分别连接两张表的不同字 ...
- 在SQL Server中为什么不建议使用Not In子查询
在SQL Server中,子查询可以分为相关子查询和无关子查询,对于无关子查询来说,Not In子句比较常见,但Not In潜在会带来下面两种问题: 结果不准确 查询性能低下 下面 ...
- (网页)在SQL Server中为什么不建议使用Not In子查询(转)
转自博客园宋沄剑 英文名:CareySon : 在SQL Server中,子查询可以分为相关子查询和无关子查询,对于无关子查询来说,Not In子句比较常见,但Not In潜在会带来下面两种问题: ...
随机推荐
- 跟随我在oracle学习php(17)
通用设定形式 定义一个字段的时候的类型的写法. 比如: create table tab1 (f1 数据类型 ); 数据类型: 类型名[(长度n)] [unsigned] [zerofil ...
- nodejs操作 mongoose(mongodb)和Sequelize(mysql)查询数据后添加新属性未生效
最近在着手koa时候,发现mongoose(mongodb)查询数据库后添加新属性,前端拿不到新属性问题, 然后测试了一下Sequelize(mysql),发现也有同样的问题存在.此时着手干! 1.1 ...
- git删除远程文件夹
git rm -r -n --cached "bin/" //-n:加上这个参数,执行命令时,是不会删除任何文件,而是展示此命令要删除的文件列表预览. git rm -r --ca ...
- vue 特点
1.双向绑定 v-model 2.组件化 页面扩展 单文件组件 js css html 都在一个文件中 好处:前端组件化的突破性设计 scoped限制css的渲染,防止污染 lang 定义预处理器 ...
- asp.net webAPI POST方法的CORS跨域问题
端口不同会判断为不同域 Method Not Allowed . web.config中设定·customHeaders 错误变化为 原因‘ post方法使用前会有一次OPTION方法的请求’ 解决: ...
- mysql的简单安装方法
准备工作MySQL-Front与mysql-5.5.15-win32 开始安装 选择compelete,完整安装 自动弹出配置界面 选择标准配置 设置root密码 成功界面 MySQL-Front 的 ...
- Cowboy http服务器 websocket
一.基础介绍 cowboy是一个小巧.快速.模块化的http服务器,采用Erlang开发.其中良好的clean module使得我们可以扩展到多种网络协议之中,cowboy自带的有tcp和ssl,而也 ...
- HIVE中IN的坑
问题:为什么HIVE中用了 NOT IN,结果集没了? 注:这个是原创,转载请注明,谢谢!直接进实验室>> > select * from a;OK1 a12 a23 a3Time ...
- CDN原理介绍(转)
内容分发网络(Content delivery network或Content distribution network,缩写:CDN)是指一种通过互联网互相连接的电脑网络系统,利用最靠近每位用户的服 ...
- 2018-2019-2 《网络对抗技术》Exp5 MSF基础应用 20165326
Exp5 MSF基础应用 实践内容 主动攻击实践 ms17_010_enternalblue 靶机:win7 x64成功 针对浏览器的攻击 ms14_064_ole_code_execution 靶机 ...