目录

SQL Server 内连接

SQL Server 左连接

ON与WHERE子句

SQL Server 右连接

SQL Server 交叉连接

SQL Server自连接

SQL Server全外链接


在关系数据库中,数据分布在多个逻辑表中。 要获得完整有意义的数据集,需要使用连接来查询这些表中的数据。

SQL Server支持多种连接,包括 [内连接],[左连接],[右连接],[全外连接]和[交叉连接]。

每种连接类型指定SQL Server如何使用一个表中的数据来选择另一个表中的行。

1.SQL Server 内连接

内连接是SQL Server中最常用的连接之一。 内部联接子句用于查询来自两个或多个相关表的数据。

SQL Server INNER JOIN子句的语法:

Select 列名From 表1Inner join 表2  on 连接主外键

在此语法中,从表1和表2中查询检索数据:

  1. 首先,在FROM子句中指定主表(表1)
  2. 其次,在INNER JOIN子句和连接谓词中指定第二个表(表2)。 只有连接谓词计算为TRUE的行才包含在结果集中。

INNER JOIN子句将表1的每一行与表2的行进行比较,以查找满足连接谓词的所有行对。 如果连接谓词的计算结果为TRUE,则匹配的表1和表2行的列值将合并为一个新行并包含在结果集中。

上图的黄色部分是两个表里面相同的数据,两个表的连接需要一个主键和一个外键来进行连接。下面通过一个例子来使用一下 inner join 。

例:使用 INNER JOIN 来连接三个表

select * FROm SC AINNER JOIN Student B ON A.Sid = B.SidINNER JOIN Course C ON A.Cid = C.Cid

2.SQL Server 左连接

左连接和内连接的区别在与左连接是返回左表的所有信息并返回右表匹配的行,找不到的行使用null来代替显示。

语法:

Select 字段From T1Left join T2 on 连接条件;

对于 T1 表中的每一行,查询将其与 T2 表中的所有行进行比较。

如果一对行导致连接谓词计算为 TRUE ,则将组合这些行中的列值以形成新行,然后将其包含在结果集中。

如果左表( T1 )中的行没有与来自 T2 表的任何匹配行,则查询将左表中的行的列值与来自右表的每个列值的 NULL 组合。

例:查询没有选择课程的学生

select sname ,b.snofrom student aleft join sc b on a.sno = b.sno

3. ONWHERE子句

在了解左连接后,我们说一下On 与 where 的使用。

在完成左连接后,我们可以在下方写where来编写查询条件,还有一种方法就是将它们连接在一起使用。

例:

select sname ,b.snofrom student aleft join sc b on a.sno = b.sno = and b.sno = null

注:对于 INNER JOIN 子句,如果将 ON 子句中的条件放在 WHERE 子句中,则它在功能上是等效的

4. SQL Server 右连接

RIGHT JOIN 子句组合来自两个或多个表的数据。 RIGHT JOIN 开始从右表中选择数据并与左表中的行匹配。

RIGHT JOIN 返回一个结果集,该结果集包含右表中的所有行,无论是否具有左表中的匹配行。 如果右表中的行没有来自右表的任何匹配行,则结果集中右表的列将使用 NULL 值。

语法:

Select 字段From T1right join T2 on 连接条件;

5. SQL Server 交叉连接

CROSS JOIN 连接两个或多个不相关的表。

以下是两个表的SQL Server CROSS JOIN 的语法:

SELECT  select_listFROM  T1CROSS JOIN  T2;或者SELECT  select_listFROM   T1, T2;

CROSS JOIN 将第一个表(T1)中的每一行与第二个表(T2)中的每一行连接起来。 换句话说,交叉连接返回两个表中行的笛卡尔积。

与INNER JOIN或LEFT JOIN不同,交叉连接不会在连接的表之间建立关系。

下面我们通过一个例子来了解一下笛卡尔积。

假设 T1 表包含三行: 1 , 2 和 3 , T2 表包含三行: A , B 和 C 。

CROSS JOIN 从第一个表(T1)获取一行,然后为第二个表(T2)中的每一行创建一个新行。 然后它对第一个表(T1)中的下一行执行相同操作,依此类推。

1-A ,1-B,1-C,2-A ……

在此例中, CROSS JOIN 总共创建了 9 行。 通常,如果第一个表有 n 行,第二个表有 m 行,则交叉连接

将产生 n x m 行。

6. SQL Server自连接

自联接用于将表连接到自身(同一个表)。 它对于查询分层数据或比较同一个表中的行很有用。

由于使用自联接的查询引用同一个表,因此表别名用于为查询中的表分配不同的名称。

例:

select * from sc aInner join sc b on a.ano = b.sno

在上面的例子中,a 和 b 是我们给表自定义的一个名称。如果我们不使用表别名,那它会报错,因为在连表时它引用了同一个ID或列名,不使用表别名就无法判断你要查询的是那个表里面的字段。

注:如果在不使用表别名的情况下在查询中多次引用同一个表,则会出现错误。

7.SQL Server全外链接

FULL OUTER JOIN当左表或右表中存在匹配项时,该命令将返回所有行。

  语法:

select * from student aFULL OUTER JOIN sc b on a.sno = b.sno

SQL Server 表连接相关推荐

  1. SQL Server 表和索引存储结构

    SQL Server 表和索引存储结构 杜飞 在上一篇文章中,我们介绍了SQL Server数据文件的页面类型,系统通过96个字节的头部信息和系统表从逻辑层面上将表的存储结构管理起来,具体到表的存储结 ...

  2. SQL Server表分区【转】

    转自:http://www.cnblogs.com/knowledgesea/p/3696912.html SQL Server表分区 什么是表分区 一般情况下,我们建立数据库表时,表数据都存放在一个 ...

  3. SQL Server表分区-水平分区

    SQL Server表分区,sql server水平分区 转自:http://www.cnblogs.com/knowledgesea/p/3696912.html  根据时间的,直接上T-SQL代码 ...

  4. 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许...

    *引用*/SQL Server 2000连接中的四个最常见错误: 一."SQL Server 不存在或访问被拒绝" 这个是最复杂的,错误发生的原因比较多,需要检查的方面也比较多. ...

  5. 使用SSIS包将多个Excel文件中的数据导入SQL Server表中

    This article explores an SSIS package for importing multiple Excel files data into SQL Server tables ...

  6. sql2012找不到到服务器,SQL Server无法连接到服务器怎么办

    SQL Server无法连接到服务器怎么办 SQL Server无法连接究竟应该如何解决呢?提示"无法连接到服务器,用户xxx登陆失败" 是因为什么原因呢? 该错误产生的原因是由于 ...

  7. 系统错误无法连接到服务器失败怎么办啊,SQL Server无法连接到服务器怎么办

    SQL Server无法连接到服务器怎么办 SQL Server无法连接究竟应该如何解决呢?提示"无法连接到服务器,用户xxx登陆失败" 是因为什么原因呢? 该错误产生的原因是由于 ...

  8. SQL Server左连接

    LEFT JOIN 子句用于查询来自多个表的数据.它返回左表中的所有行和右表中的匹配行. 如果在右表中找不到匹配的行,则使用 NULL 代替显示. 以下图说明了两个结果集的左连接结果: 以下说明如何使 ...

  9. SQL Server 2008 连接JDBC详细图文教程

    SQL Server 2008是目前windows上使用最多的sql数据库,2008的安装机制是基于framework重写的,特点是非常耗时间(我的小本本配置还是可以的.^_^).但不需要原ISO或隐 ...

最新文章

  1. Android HttpClient post MultipartEntity - Android 上传文件
  2. Window平台下的Android的环境配置
  3. leetcode算法题--数组中数字出现的次数
  4. linux c调用wcf服务,Silverlight+WCF实现跨域调用
  5. php计算程序运行时间的简单例子分享
  6. Bound Found POJ - 2566 (尺取+前缀和)
  7. matlab中变.,Matlab变系数微分方程
  8. 遭遇掌控欲望极强的上司,郁闷的项目
  9. iOS使用得图SDK开发VR播放器
  10. android 性能测试 简介,android性能测试工具traceview简介[转载]
  11. Tianchi big data competition天池大数据挑战(CV场)
  12. iText和flying saucer结合生成pdf的技术
  13. vue3+ts+vite 路径别名配置
  14. 通过opencv在图片上加上文字_基于Ubuntu16
  15. shell程序设计小知识
  16. Ubuntu安装后,无启动项,解决办法
  17. linux 底下traceroute报错(下载安装流程教学)
  18. C++ Reference: Standard C++ Library reference: C Library: cmath: erfc
  19. 串口通信,IIC通信,SPI通信的简单区别
  20. art-法线贴图制作

热门文章

  1. 如何选择适合自己的显卡
  2. 有些星座天生不适合干有些事情,如果一定要为之恐怕就会落到饿死的地步了!你知道自己这个星座有哪些事情是容易让自己饿死的吗?
  3. 增进人生幸福的六大诀窍
  4. python 之 类(一个类包含一个类)
  5. cmd连接mysql的方法详解
  6. 360加固宝客户端使用
  7. win7调高分辨率,字体变小了
  8. 说说使用nose、noes2、pytest感受
  9. GET请求参数带有特殊符号被转码!
  10. 你真的了解Android系统启动流程吗?深入理解Flutter动画原理,讲的明明白白!