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潜在会带来下面两种问题: ...
随机推荐
- Python_Mix*异常处理
name 结果为: Traceback (most recent call last): #错误的追溯 File "C:/Users/Mi/PycharmProjects/untitled/ ...
- 记-统计svn与git的log日志中的代码行变更
任务要求 统计指定时间内,指定git地址与svn地址上的所有人员的代码行变更情况. 解决方案 最初为根据数据库中存储的所有git与svn地址来统计所有人员的提交代码行.之后由于库中存储的地址不全,改为 ...
- springMVC控制器,处理器,映射器,适配器
前端控制器DispatcherServlet <!--定义spring mvc 的前端控制器Servlet --><servlet> <!--Servlet的名称--&g ...
- Vue 插槽
插槽的概念: 插槽的关键字slot,默认情况下,组件中的模板会覆盖组件中的原始内容(即自定义标签对内部的内容会不显示),解决办法就是使用插槽. 组件的原始内容: 即在vue实例范围之内,因此可以调用实 ...
- python threading模块中的join()方法和setDeamon()方法的一些理解
之前用多线程的时候看见了很多文章,比较常用的大概就是join()和setDeamon()了. 先说一下自己对join()的理解吧: def join(self, timeout=None): &quo ...
- Altium designer 新建快捷键
示例: 1.按下Ctrl: 2.点击需要建立快捷键的图标:点击交互式布线图标,然后在选择性输入要用到的快捷键:
- 如何用css实现一个三角形?
昨天被人问到说如何用css实现一个三角形?em.... 当时被问到了,汗颜,今天找了一些帖子看了一下,也算是记录一下吧 代码如下: 实现效果:
- MySQL行转列、列转行
一.行转列 有如图所示的表,现在希望查询的结果将行转成列 建表语句如下: CREATE TABLE `TEST_TB_GRADE` ( `ID` int(10) NOT NULL AUTO_INCRE ...
- Shiro-ini认证
#2019.2.2 shiro的ini认证 先用IDEA创建一个普通的MAVEN项目,并导入依赖 <!--Junit单元测试--> <groupId>junit</gro ...
- jmeter之关联
前言:当请求之间有依赖关系,比如一个请求的入参是另一个请求返回的数据,这时候就需要用到关联处理,Jmeter可以通过“后置处理器”中的“正则表达式提取器”来处理关联. 一.后置处理器-------正则 ...