Home Database Mysql Tutorial SqlServer之连接

SqlServer之连接

Jun 07, 2016 pm 03:51 PM
server sql sqlserver us connect

在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
Copy after login

结果为:

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#
Copy after login

结果为:

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#
Copy after login

结果为:

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#
Copy after login
结果为:

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#
Copy after login

结果为:

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
Copy after login

自连接的方法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
Copy after login

结果为:

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
Copy after login

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
Copy after login

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
Copy after login

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
Copy after login

SqlServer之连接

结果为:

SqlServer之连接



Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to import mdf file into sqlserver How to import mdf file into sqlserver Apr 08, 2024 am 11:41 AM

The import steps are as follows: Copy the MDF file to SQL Server's data directory (usually C:\Program Files\Microsoft SQL Server\MSSQL\DATA). In SQL Server Management Studio (SSMS), open the database and select Attach. Click the Add button and select the MDF file. Confirm the database name and click the OK button.

How to solve the problem that the object named already exists in the sqlserver database How to solve the problem that the object named already exists in the sqlserver database Apr 05, 2024 pm 09:42 PM

For objects with the same name that already exist in the SQL Server database, the following steps need to be taken: Confirm the object type (table, view, stored procedure). IF NOT EXISTS can be used to skip creation if the object is empty. If the object has data, use a different name or modify the structure. Use DROP to delete existing objects (use caution, backup recommended). Check for schema changes to make sure there are no references to deleted or renamed objects.

What is the difference between HQL and SQL in Hibernate framework? What is the difference between HQL and SQL in Hibernate framework? Apr 17, 2024 pm 02:57 PM

HQL and SQL are compared in the Hibernate framework: HQL (1. Object-oriented syntax, 2. Database-independent queries, 3. Type safety), while SQL directly operates the database (1. Database-independent standards, 2. Complex executable queries and data manipulation).

What to do if the sqlserver service cannot be started What to do if the sqlserver service cannot be started Apr 05, 2024 pm 10:00 PM

When the SQL Server service fails to start, here are some steps to resolve: Check the error log to determine the root cause. Make sure the service account has permission to start the service. Check whether dependency services are running. Disable antivirus software. Repair SQL Server installation. If the repair does not work, reinstall SQL Server.

How to check sqlserver port number How to check sqlserver port number Apr 05, 2024 pm 09:57 PM

To view the SQL Server port number: Open SSMS and connect to the server. Find the server name in Object Explorer, right-click it and select Properties. In the Connection tab, view the TCP Port field.

How to recover accidentally deleted database in sqlserver How to recover accidentally deleted database in sqlserver Apr 05, 2024 pm 10:39 PM

If you accidentally delete a SQL Server database, you can take the following steps to recover: stop database activity; back up log files; check database logs; recovery options: restore from backup; restore from transaction log; use DBCC CHECKDB; use third-party tools. Please back up your database regularly and enable transaction logging to prevent data loss.

Where is the sqlserver database? Where is the sqlserver database? Apr 05, 2024 pm 08:21 PM

SQL Server database files are usually stored in the following default location: Windows: C:\Program Files\Microsoft SQL Server\MSSQL\DATALinux: /var/opt/mssql/data The database file location can be customized by modifying the database file path setting.

How to delete sqlserver if the installation fails? How to delete sqlserver if the installation fails? Apr 05, 2024 pm 11:27 PM

If the SQL Server installation fails, you can clean it up by following these steps: Uninstall SQL Server Delete registry keys Delete files and folders Restart the computer

See all articles