首页 数据库 mysql教程 SqlServer之连接

SqlServer之连接

Jun 07, 2016 pm 03:51 PM
server sql sqlserver 我们 连接

在sql server中,我们经常能用到连接,今天总结一下连接的基础知识。 连接的分类: 交叉连接 CROSS JOIN 内连接 INNER JOIN 外连接{左外连接 LEFT [OUTER] JOIN ;右外连接 RIGHT [OUTER] JOIN ;全外连接 full [outer] join } 自连接 以下通过例子来了解各

在sql server中,我们经常能用到连接,今天总结一下连接的基础知识。
连接的分类:

  • 交叉连接CROSS JOIN
  • 内连接INNER JOIN
  • 外连接{左外连接LEFT [OUTER] JOIN ;右外连接RIGHT [OUTER] JOIN;全外连接full [outer] join}
  • 自连接

以下通过例子来了解各个连接的异同点:

有两张表Teacher表和Course表:

SqlServer之连接

SqlServer之连接

交叉连接:

1.如果不带WHERE条件子句,它将会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积;

<span>select</span> <span>*</span> <span>from</span> Course <span>cross</span> <span>join</span> Teacher
登录后复制

结果为:

SqlServer之连接

由此结果可知,它的结果与 SELECT * FROM Course,Teacher 的结果相同。

2.如果有WHERE子句的话,往往会先生成两个表行数乘积的数据表然后才根据WHERE条件从中选择。

<span>1. select</span> <span>*</span> <span>from</span> Course,Teacher <span>where</span> Course.T#<span>=</span>Teacher.T#
<span>2. select</span> <span>*</span> <span>from</span> Course <span>cross</span> <span>join</span> Teacher <span>where</span> Course.T#<span>=</span>Teacher.T#<strong><span><span>  (</span><span>注:cross join后加条件只能用where,不能用on)</span></span></strong>
<span>3. select</span> <span>*</span> <span>from</span> Course <span>inner</span> <span>join</span> Teacher <span>on</span> Course.T#<span>=</span>Teacher.T#
登录后复制

结果为:

SqlServer之连接

一般情况下,在效率上,Where可能具有和Inner join一样的效率,但是,在多表连接时,我们并不推荐使用where语句。
所以如果可以选择,我们最好使用语句3,有时使用Join语句可以帮助检查语句中的无效或者误写的关联条件。

内连接

内连接表示两边表同时符合条件的组合,就相当于普通的CROSS JOIN,只是格式不一样,
INNER JOIN在后面有一个ON子句(相当于WHERE)的搜索条件,用于过滤返回的行。
内连接没有笛卡尔积那么复杂要先生成行数乘积的数据表,所以内连接的效率要高于笛卡尔积的交叉连接。

外连接

指定条件的内连接,仅仅返回符合连接条件的条目。
外连接则不同,返回的结果不仅包含符合连接条件的行,而且包括左表(左外连接时), 右表(右连接时)或者两边连接(全外连接时)的所有数据行。

1)左外连接LEFT [OUTER] JOIN
显示符合条件的数据行,同时显示左边数据表不符合条件的数据行,右边没有对应的条目显示NULL

<span>select</span> <span>*</span> <span>from</span> Course <span>left</span> <span>outer</span> <span>join</span> Teacher <span>on</span> Course.T#<span>=</span>Teacher.T#
登录后复制

结果为:

SqlServer之连接

2)右外连接RIGHT [OUTER] JOIN
显示符合条件的数据行,同时显示右边数据表不符合条件的数据行,左边没有对应的条目显示NULL

<span>select</span> <span>*</span> <span>from</span> Course <span>right</span> <span>outer</span> <span>join</span> Teacher <span>on</span> Course.T#<span>=</span>Teacher.T#
登录后复制
结果为:

SqlServer之连接



3)全外连接full [outer] join

显示符合条件的数据行,同时显示左右不符合条件的数据行,相应的左右两边显示NULL,即显示左连接、右连接和内连接的并集。

<span>select</span> <span>*</span> <span>from</span> Course <span>full</span> <span>outer</span> <span>join</span> Teacher <span>on</span> Course.T#<span>=</span>Teacher.T#
登录后复制

结果为:

SqlServer之连接

自连接

其实,在Sql Server中,我们还经常用到一种连接——自连接。
通过以下的例子,来了解自连接:
表树形结构表tb_TestTreeView

SqlServer之连接

解决问题: 树形层次结构显示
/*
 这是一个地区表,里面存放了地区名及其所属上级地区,假设现在需要查询出各地区及其所属上级地区。
*/

自连接的方法1:

<span>select</span> <span>[</span><span>Name</span><span>]</span> <span>as</span> <span>'</span><span>地区名</span><span>'</span>,
  (<span>select</span> <span>[</span><span>Name</span><span>]</span> <span>from</span> tb_TestTreeView <span>as</span> a
    <span>where</span> a.ID <span>=</span> b.Parent ) <span>as</span> <span>'</span><span>上级地区名</span><span>'</span>
<span>from</span> tb_TestTreeView <span>as</span> b
登录后复制

自连接的方法2:

<span>select</span> a.<span>[</span><span>Name</span><span>]</span> <span>as</span> <span>'</span><span>地区名</span><span>'</span>,
       b.<span>[</span><span>Name</span><span>]</span> <span>as</span> <span>'</span><span>上级地区名</span><span>'</span>
<span>from</span> tb_TestTreeView <span>as</span> a
<span>left</span> <span>join</span> tb_TestTreeView <span>as</span> b
     <span>on</span> a.Parent <span>=</span> b.ID
登录后复制

结果为:

SqlServer之连接

自连接三级(左联接):

SqlServer之连接

<span>select</span> a.<span>[</span><span>Name</span><span>]</span> <span>as</span> <span>'</span><span>地区名</span><span>'</span>,
       b.<span>[</span><span>Name</span><span>]</span> <span>as</span> <span>'</span><span>上级地区名</span><span>'</span>,
       c.<span>[</span><span>Name</span><span>]</span> <span>as</span> <span>'</span><span>上上级地区名</span><span>'</span>
<span>from</span> tb_TestTreeView <span>as</span> a
<span>left</span> <span>join</span> tb_TestTreeView <span>as</span> b
     <span>on</span> a.Parent <span>=</span> b.ID 
<span>left</span> <span>join</span> tb_TestTreeView <span>as</span> c
     <span>on</span> b.parent<span>=</span>c.id
登录后复制

SqlServer之连接

结果为:

SqlServer之连接

自连接三级(内联接):

SqlServer之连接

<span>select</span> a.<span>[</span><span>Name</span><span>]</span> <span>as</span> <span>'</span><span>地区名</span><span>'</span>,
       b.<span>[</span><span>Name</span><span>]</span> <span>as</span> <span>'</span><span>上级地区名</span><span>'</span>,
       c.<span>[</span><span>Name</span><span>]</span> <span>as</span> <span>'</span><span>上上级地区名</span><span>'</span>
<span>from</span> tb_TestTreeView <span>as</span> a
<span>inner</span> <span>join</span> tb_TestTreeView <span>as</span> b
     <span>on</span> a.Parent <span>=</span> b.ID 
<span>inner</span> <span>join</span> tb_TestTreeView <span>as</span> c
     <span>on</span> b.parent<span>=</span>c.id
登录后复制

SqlServer之连接

结果为:SqlServer之连接

自连接四级(左链接):

SqlServer之连接

<span>select</span> a.<span>[</span><span>Name</span><span>]</span> <span>as</span> <span>'</span><span>地区名</span><span>'</span>,
       b.<span>[</span><span>Name</span><span>]</span> <span>as</span> <span>'</span><span>上级地区名</span><span>'</span>,
       c.<span>[</span><span>Name</span><span>]</span> <span>as</span> <span>'</span><span>上上级地区名</span><span>'</span>,
       d.<span>[</span><span>Name</span><span>]</span> <span>as</span> <span>'</span><span>上上上级地区名</span><span>'</span>
<span>from</span> tb_TestTreeView <span>as</span> a
<span>left</span> <span>join</span> tb_TestTreeView <span>as</span> b
     <span>on</span> a.Parent <span>=</span> b.ID 
<span>left</span> <span>join</span> tb_TestTreeView <span>as</span> c
     <span>on</span> b.parent<span>=</span>c.id
<span>left</span> <span>join</span> tb_TestTreeView <span>as</span> d
     <span>on</span> c.parent<span>=</span>d.id
登录后复制

SqlServer之连接

结果为:


SqlServer之连接



自连接四级(内链接):

SqlServer之连接

<span>select</span> a.<span>[</span><span>Name</span><span>]</span> <span>as</span> <span>'</span><span>地区名</span><span>'</span>,
       b.<span>[</span><span>Name</span><span>]</span> <span>as</span> <span>'</span><span>上级地区名</span><span>'</span>,
       c.<span>[</span><span>Name</span><span>]</span> <span>as</span> <span>'</span><span>上上级地区名</span><span>'</span>,
       d.<span>[</span><span>Name</span><span>]</span> <span>as</span> <span>'</span><span>上上上级地区名</span><span>'</span>
<span>from</span> tb_TestTreeView <span>as</span> a
<span>inner</span> <span>join</span> tb_TestTreeView <span>as</span> b
     <span>on</span> a.Parent <span>=</span> b.ID
<span>inner</span> <span>join</span> tb_TestTreeView <span>as</span> c
     <span>on</span> b.Parent <span>=</span> c.ID
<span>inner</span> <span>join</span> tb_TestTreeView <span>as</span> d
     <span>on</span> c.Parent <span>=</span> d.ID
登录后复制

SqlServer之连接

结果为:

SqlServer之连接



本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

​sqlserver怎么导入mdf文件 ​sqlserver怎么导入mdf文件 Apr 08, 2024 am 11:41 AM

导入步骤如下:将 MDF 文件复制到 SQL Server 的数据目录(通常为 C:\Program Files\Microsoft SQL Server\MSSQL\DATA)。在 SQL Server Management Studio(SSMS)中,打开数据库并选择“附加”。单击“添加”按钮,选择 MDF 文件。确认数据库名称,点击确定按钮即可。

sqlserver数据库中已存在名为的对象怎么解决 sqlserver数据库中已存在名为的对象怎么解决 Apr 05, 2024 pm 09:42 PM

对于 SQL Server 数据库中已存在同名对象,需要采取以下步骤:确认对象类型(表、视图、存储过程)。如果对象为空,可使用 IF NOT EXISTS 跳过创建。如果对象有数据,使用不同名称或修改结构。使用 DROP 删除现有对象(谨慎操作,建议备份)。检查架构更改,确保没有引用删除或重命名的对象。

Hibernate 框架中 HQL 和 SQL 的区别是什么? Hibernate 框架中 HQL 和 SQL 的区别是什么? Apr 17, 2024 pm 02:57 PM

HQL和SQL在Hibernate框架中进行比较:HQL(1.面向对象语法,2.数据库无关的查询,3.类型安全),而SQL直接操作数据库(1.与数据库无关的标准,2.可执行复杂查询和数据操作)。

怎么查看sqlserver端口号 怎么查看sqlserver端口号 Apr 05, 2024 pm 09:57 PM

要查看 SQL Server 端口号:打开 SSMS,连接到服务器。在对象资源管理器中找到服务器名称,右键单击它,然后选择“属性”。在“连接”选项卡中,查看“TCP 端口”字段。

sqlserver服务无法启动怎么办 sqlserver服务无法启动怎么办 Apr 05, 2024 pm 10:00 PM

当 SQL Server 服务无法启动时,可采取以下步骤解决:检查错误日志以确定根本原因。确保服务帐户具有启动服务的权限。检查依赖项服务是否正在运行。禁用防病毒软件。修复 SQL Server 安装。如果修复不起作用,重新安装 SQL Server。

sqlserver误删数据库怎么恢复 sqlserver误删数据库怎么恢复 Apr 05, 2024 pm 10:39 PM

若误删 SQL Server 数据库,可采取以下步骤恢复:停止数据库活动;备份日志文件;检查数据库日志;恢复选项:从备份恢复;从事务日志恢复;使用 DBCC CHECKDB;使用第三方工具。请定期备份数据库并启用事务日志以防止数据丢失。

sqlserver数据库在哪里 sqlserver数据库在哪里 Apr 05, 2024 pm 08:21 PM

SQL Server 数据库文件通常存储在以下默认位置:Windows: C:\Program Files\Microsoft SQL Server\MSSQL\DATALinux: /var/opt/mssql/data可通过修改数据库文件路径设置来自定义数据库文件位置。

sqlserver安装失败怎么样删除干净 sqlserver安装失败怎么样删除干净 Apr 05, 2024 pm 11:27 PM

如果 SQL Server 安装失败,可通过以下步骤清理:卸载 SQL Server删除注册表项删除文件和文件夹重启计算机

See all articles