连接查询是关系数据中最主要的查询,包括内连接、外连接等。通过连接运算符可以实现多个表查询。内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。SQL Server中的内连接有:等值连接和不等连接。

1 内连接-相等连接

  相等连接又叫等值连接,在连接条件这使用等号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。

  示例:

SELECT [dbo].[Category].* , [dbo].[Product].*
FROM [dbo].[Category] INNER JOIN [dbo].[Product]
ON [dbo].[Category].[CategoryID] = [dbo].[Product].[CategoryID]
SELECT p.[ProductCode], p.[ProductName], c.[CategoryName], d.[Quantity], d.[Subtotal]
FROM [dbo].[Product] p
INNER JOIN [dbo].[Category] c
ON p.[CategoryID] = c.[CategoryID]
INNER JOIN [dbo].[OrderDetails] d
ON p.[ProductID] = d.[ProductID]

2 带选择条件的连接

  带选择条件的连接查询是在连接查询的过程中,通过添加过滤条件限制查询的结果,使查询的结果更加准确。

  示例:

SELECT [dbo].[Category].* , [dbo].[Product].*
FROM [dbo].[Category] INNER JOIN [dbo].[Product]
ON [dbo].[Category].[CategoryID] = [dbo].[Product].[CategoryID]
AND [dbo].[Category].[CategoryID] = 1

3 自连接

  如果在一个连接查询中,涉及到的两个表都是同一个表,这种查询称为自连接查询。自连接是一种特殊的内连接,它是指相互连接的表在物理上为同一张表,但可以在逻辑上分为两张表。

  示例:

SELECT c1.CategoryID, c1.CategoryName
FROM [dbo].[Category] c1 INNER JOIN [dbo].[Category] c2
ON c1.[CategoryID] = c2.[ParentID]

4 外连接

  连接查询将查询多个表中相关联的行,内连接时,返回查询结果集合中的仅是符号查询条件和连接条件的行,但有时需要包含没有关联的行中数据,即返回查询结果集合中的不仅包含符合连接条件的行,还需要包括左表(左外连接或左连接)、右表(右外连接或右连接)或者两个边接表(全外连接)中的所有数据行。外连接分为左外连接和右外连接。

  ◊ LEFT JOIN(左连接):返回包括左表中的所有记录和右表中连接字段相等的记录。

  ◊ RIGHT JOIN(右连接):返回包括右表中的所有记录和左表中连接字段相等的记录。

4.1 左外连接

  左连接的结果包括LEFT OUTER JOIN关键字左边连接的表的所有行,而不仅仅是连接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集中右表的所有选择字段均为NULL。

  示例:

SELECT [dbo].[Category].* , [dbo].[Product].*
FROM [dbo].[Category] LEFT OUTER JOIN [dbo].[Product]
ON [dbo].[Category].[CategoryID] = [dbo].[Product].[CategoryID]

4.2 右外连接

  右连接将返回RIGHT OUTER JOIN关键字右边的表中的所有行。如果右表的某行在左表中没有匹配行,左表将返回NULL。

  示例:

SELECT [dbo].[Category].* , [dbo].[Product].*
FROM [dbo].[Category] RIGHT OUTER JOIN [dbo].[Product]
ON [dbo].[Category].[CategoryID] = [dbo].[Product].[CategoryID]

4.3 全外连接

  全外连接又称为完全外连接,该连接查询方式返回两个连接中所有的记录数据。根据匹配条件,如果满足匹配条件时,则返回数据;如果不满足匹配条件时,同样返回数据,但在相应的列中填入NULL,全外连接返回的结果集中包含了两个完全表的所有数据。全外连接关键字FULL OUTER JOIN。

  示例:

SELECT [dbo].[Category].* , [dbo].[Product].*
FROM [dbo].[Category] FULL OUTER JOIN [dbo].[Product]
ON [dbo].[Category].[CategoryID] = [dbo].[Product].[CategoryID]

Sql Server系列:多表连接查询的更多相关文章

  1. sql server 实现多表连接查询

    项目中要实现多表查询,用外连接实现. a表 a(aid,aname) 其中aid为pk b表 b(aid,bname,aid) 其中 bid为pk,aid为fk c表 c(cid,cname,aid) ...

  2. SQL Server 2012 - 多表连接查询

    -- 交叉连接产生笛卡尔值 (X*Y) SELECT * FROM Student cross Join dbo.ClassInfo --另外一种写法 SELECT * FROM Student , ...

  3. 【SQL】在SQL Server中多表关联查询问题

    好久没有写SQL语句的多表连接查询,总在用框架进行持久化操作.今天写了一个多表关联查询,想根据两个字段唯一确定一条数据 失败的案例如下: SELECT cyb.id,ad.name FROM [Gen ...

  4. SQL Server三种表连接原理

    在SQL Server数据库中,查询优化器在处理表连接时,通常会使用一下三种连接方式: 嵌套循环连接(Nested Loop Join) 合并连接 (Merge Join) Hash连接 (Hash ...

  5. SQL Server中多表连接时驱动顺序对性能的影响

    本文出处:http://www.cnblogs.com/wy123/p/7106861.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错 ...

  6. 多个程序对sql server中的表进行查询和插入操作导致死锁

    最近在做一个项目,是要用多个程序对sql server中的相同的数据库进行操作(查询和插入),所以在开始的时候常会出现死锁问题,后来在网上进行了咨询,发现了一些解决方法,留作大家参考: 并发去操纵一张 ...

  7. SQl Server 数据库多表连接

    [缘由] 为了防止数据的冗余,我们会将数据库中表进行拆分,这样就产生了多张表,表与表之间通过主外键关联,但这样又造成了我们查找和修改的困难,如何进行多表之间的查找呢? 我们将一个查询同时设计两个或两个 ...

  8. [SQL SERVER系列]之嵌套子查询和相关子查询

    子查询有两种类型,一种是只返回一个单值的子查询,这时它可以用在一个单值可以使用的地方,这时子查询可以看作是一个拥有返回值的函数:另外一种是返回一列值的子查询,这时子查询可以看作是一个在内存中临时存在的 ...

  9. oracle(sql)基础篇系列(二)——多表连接查询、子查询、视图

        多表连接查询 内连接(inner join) 目的:将多张表中能通过链接谓词或者链接运算符连接起来的数据查询出来. 等值连接(join...on(...=...)) --选出雇员的名字和雇员所 ...

随机推荐

  1. 控制Storyboard播放zz

    <Grid Width="300" Height="460"> <Grid.RowDefinitions> <RowDefinit ...

  2. linux菜鸟日记(5)

    iptables详细语法及配置: SNAT:源地址转换DNAT:目标地址转换PNAT:端口地址转换 ----------------------------------iptables规则链 路由以后 ...

  3. 【HDU】4773 Problem of Apollonius

    题意 给定相离的两个圆(圆心坐标以及半径)以及圆外的一个定点\(P\),求出过点\(P\)的且与已知的两个圆外切的所有圆(输出总数+圆心.半径). 分析 如果强行解方程,反正我是不会. 本题用到新姿势 ...

  4. jQuery的加法运算.

    jQuery的加法运算. 加法运算 ?想必大家听到这都会不屑了,加法运算这是多么简单的运算.然而有的时候在jQuery也让人挺头疼的. 常规的是: var num1 = 123; var num2=1 ...

  5. 基础3.Jquery操作Dom

                  1 内部插入节点 <body> <ul id="city"> <li id="bj" name=&qu ...

  6. 非交织YUV格式转换

    本文为自己写的从非交织yuv420转换出yuv444,yuv422h,yuv422v和手动裁剪422h,422v图片的代码 #include <fcntl.h> #include < ...

  7. 更改机器名后,打开TFS提示工作区错误的处理

    1,打开vs下的"开发人员命令提示"2,按下面格式输入命令:tf workspaces 查看, 假设显示如下: C:\Program Files (x86)\Microsoft V ...

  8. Android Intent Flags

    Intent,顾名思义,即意图,通常用它来启动一个应用程序组件( Activity, Service, 或者 BroadCast Receiver ).在启动一个新的 Activity 时,可以通过给 ...

  9. Solve VS2010 Error "Exceptions has been thrown by the target of an invocation"

    Sometimes when you open a VS2010 project, an error window will pop up with the error message "E ...

  10. Android使用Application的好处

    如果一个应用程序有2个入口的,1个入口程序打开修改其中的内容,怎么实现另一个入口的数据也修改呢? 下面就用到Application来实现数据的共享,因为一个应用程序只有一个Application,Ap ...