在数据库查询中,经常会用到两个有关联的表进行查询,需要把两个表中的数据按照某些条件查出来,这时就可以使用连接查询

连接查询分为三种:内连接、外连接和交叉连接

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中的连接查询(内连接、外连接、交叉连接)的更多相关文章

  1. c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程

    c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...

  2. SQL server中的一些查询

    SQL 不同于与其他编程语言的最明显特征是处理代码的顺序.在大数编程语言中,代码按编码顺序被处理,但是在SQL语言中,第一个被处理的子句是FROM子句,尽管SELECT语句第一个出现,但是几乎总是最后 ...

  3. SQL Server中获取指定时间段内的所有日期

    DECLARE @days INT, @date_start DATETIME = '2016-11-01', @date_end DATETIME = '2016-11-10' SET @days ...

  4. 补充:sql server 中的相关查询、case函数

    相关查询(在同一个表中) 相关查询类似子查询,但是又不同于子查询:子查询中的子条件可以单独查出数据,但是相关查询的子条件不能查处数据.(可以理解成C#中for的穷举法,第一个for走一个,第二个for ...

  5. SQL Server中获取指定时间段内的所有月份

    例如查询 2012-1-5 到 2012-11-3 之间所有的月份 declare @begin datetime,@end datetime set @begin='2012-1-5' set @e ...

  6. [SQL]sql server中如何直接查询存储过程EXEC返回的结果集?

    Declare @T Table (iDay VARCHAR(),iNum DECIMAL(,),yuxiang DECIMAL(,)) Insert @T --EXEC [dbo].[BSP0101 ...

  7. 在sql server 中查找一定时间段内访问数据库情况

    total_worker_time AS [总消耗CPU 时间(ms)], execution_count [运行次数], qs.total_worker_time AS [平均消耗CPU 时间(ms ...

  8. MS sql server 基础知识回顾(二)-表连接和子查询

    五.表连接 当数据表中存在许多重复的冗余信息时,就要考虑将这些信息建在另一张新表中,在新表中为原表设置好外键,在进行数据查询的时候,就要使用到连接了,表连接就好像两根线,线的两端分别连接两张表的不同字 ...

  9. 在SQL Server中为什么不建议使用Not In子查询

        在SQL Server中,子查询可以分为相关子查询和无关子查询,对于无关子查询来说,Not In子句比较常见,但Not In潜在会带来下面两种问题: 结果不准确 查询性能低下       下面 ...

  10. (网页)在SQL Server中为什么不建议使用Not In子查询(转)

    转自博客园宋沄剑  英文名:CareySon : 在SQL Server中,子查询可以分为相关子查询和无关子查询,对于无关子查询来说,Not In子句比较常见,但Not In潜在会带来下面两种问题: ...

随机推荐

  1. Android View的滑动

    Android View的滑动 文章目录 Android View的滑动 一.实现移动 1.1 layout() 1.2 设置位置偏移量 1.3 改变布局参数 1.4 动画 1.5 ScrollTo以 ...

  2. Problem - 1062 http://acm.hdu.edu.cn/showproblem.php?pid=1062

    对输入字符串的字符的倒置,在这个程序中,我觉得自己最大的问题是怎么识别一个字符,代码中有t个字符串,每个字符串,每个字符串中有若干个单词,单词之间有空格,所以对于下列的正确答案,我的疑惑是当我键盘输入 ...

  3. python学习之闭包

    闭包:是由函数及其相关应用环境组合而成的实体(函数+引用环境) 在嵌套函数中中,如果一个内部函数对外部函数(非全局作用域)中的变量进行引用,内部函数被认为是闭包 闭包中不能修改外部环境的变量中的值 d ...

  4. uboot中往s5p6818的emmc刷写内容

    建立分区: fdisk :: : fdisk Partition Map -- Partition Type: DOS Part Start Sector Num Sectors UUID Type ...

  5. Java容器解析系列(10) Map AbstractMap 详解

    前面介绍了List和Queue相关源码,这篇开始,我们先来学习一种java集合中的除Collection外的另一个分支------Map,这一分支的类图结构如下: 这里为什么不先介绍Set相关:因为很 ...

  6. 利用 Eclipse IDE 的强大功能远程调试 Java 应用程序

    II. Eclipse 连接套接字模式下的 VM 调用示例(具体引用实践) 说明:不管采用哪种方式,调试的源代码都在eclipse的环境下 一.调试方式一(将目标应用程序作为调试的服务器,eclips ...

  7. vim 匹配查找指定位置的数字,并将数字做运算后赋值

    举例,以下文本中有个DSC开头的以数字命名的jpg文件,我想修改文件名为在原来的基础上加上32,比如第一行中的字符改为:DSC00099.JPG 在vim中输入: :%s/DSC[]\+\(\d\+\ ...

  8. JS-斜杠和反斜杠的转换

    例子:var url = "http://localhost:64177/Home/AccordionIndex"; 将斜杠转换成反斜杠: url = url .replace(& ...

  9. python定时脚本判断服务器内存

    经常我们会发现服务器跑着跑着内存使用率达到了百分之八九十,或者有时候直接挂掉,在我们还没定位是哪块代码有问题导致内存占用很大的时候,可以先写个定时脚本,当服务器内存使用率达到一定值的时候,就重启一起服 ...

  10. 使用VBA轻松实现汉字与拼音的转换

    Function pinyin(p As String) As String i = Asc(p) Select Case i Case -20319 To -20318: pinyin = &quo ...