特殊联接查询

除了传统的三种联接查询外,还有一些特殊的联接查询。这篇文章就将对其进行总结,主要有以下几种特殊的联接查询。

1,组合联接查询

2,不等联接查询

3,多表联接查询

组合联接查询

组合联接就是联接条件涉及联接两边的多个列的查询。当需要根据主键-外键关系来联接两个表,而且主外键关系是组合的(即关系基于多个列)时,通常就要使用组合联接。

例如,假设dbo.Table2表上定义了两个外键(col1列和col2列),引用了dbo.Table1表的col1和col2列,现在要写一个根据主外键关系来联接两个表的查询语句。该查询语句可以写成下面这样:

-- 组合联接查询
FROM dbo.Table1 AS T1
JOIN dbo.Table2 AS T2 ON T1.col1= T2.col1 AND T1.col2= T2.col2

不等联接查询

联接条件只包含等号运算符的联接我们一般称之为等值联接。而不等联接刚好相反,它的联接条件包含除了等号以外的其它运算符。

作为一个不等联接查询的例子,以下查询语句对Employees表的两个实例进行联接,以生成职员之间的唯一配对。

USE TSQLFundamentals2008;
GO

-- 不等联接查询
SELECT employees1.empid,employees1.firstname,employees1.lastname,employees2.empid,employees2.firstname,employees2.lastname
FROM HR.Employees AS employees1
JOIN HR.Employees AS employees2 ON employees1.empid<employees2.empid
ORDER BY employees1.empid

查询结果:

多表联接查询

如果说上面两种特殊联接用得还比较少的话,那么多表联接查询用得就比较多。

一个联接表运算符只对两个表进行操作,而一条查询语句可以包含多个联接。通常,当FROM子句中包含多个表运算符时,表运算符在逻辑上是按从左到右的顺序处理的。也就是说,第一个表运算符的结果表将作为第二个表运算符的输入,第二个表运算符的结果将作为第三个表运算符左边的输入,以此类推。

所以如果FROM子句中包含多个联接,逻辑上只有第一个联接对两个基础表进行操作,而其他联接则将前一个联接的结果作为其左边的输入。

例如,以下查询先对Customers表和Orders表进行联接,以匹配客户和它们的订单,再把第一个联接的结果表和OrderDetails表进行联接,以匹配订单和订单详情。

SQL查询代码:

-- 多表联接查询
SELECT customers.custid,customers.companyname,orders.orderid,orderdetails.productid,orderdetails.qty
FROM Sales.Customers AS customers
LEFT JOIN Sales.Orders AS orders ON customers.custid = orders.custid
LEFT JOIN Sales.OrderDetails AS orderdetails ON orders.orderid = orderdetails.orderid
ORDER BY customers.custid;

查询结果:

特殊联接查询,布布扣,bubuko.com

时间: 2024-10-06 00:13:40

特殊联接查询的相关文章

SQL SERVER技术内幕之3 联接查询

JOIN表运算符对两个输入表进行操作.联接有三种基本类型:交叉联接.内联接和外联接.这三种联接的区别是它们采用的逻辑查询处理步骤各不相同,每种联接都有一套不同的步骤.交叉联接只有一个步骤----笛卡尔积;内联接有两个步骤----笛卡尔积.过滤;外联接有三个步骤----笛卡尔积.过滤.添加外部行. 3.1 交叉联接 SQL SERVER支持交叉联接的两种标准语法:ANSI SQL-92和ANSI SQL-89,推荐使用SQL-92的语法. 3.1.1 ANSI SQL-92语法 SELECT C.

SQL语句汇总(终篇)—— 表联接与联接查询

既然是最后一篇那就不能只列出些干枯的标准语句,更何况表联接也是SQL中较难的部分,所以此次搭配题目来详细阐述表联接. 上一篇博文说到相关子查询效率低下,那我们怎么能将不同表的信息一起查询出来呢?这就需要用到表联接. 和之前的UNION组合查询不同,UNION是将不同的表组合起来,也就是纵向联接,说白了就是竖着拼起来. 而表联接是通过笛卡尔乘积将表进行横向联接,所谓的通过笛卡尔乘积简单说就是两表的行依次相联再相加.要想更详细的理解可以百度下,毕竟本文主要是汇总SQL语句. 现在有如下两张表: 这是

【T-SQL基础】02.联接查询

概述: 本系列[T-SQL基础]主要是针对T-SQL基础的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础]02.联接查询 [T-SQL基础]03.子查询 [T-SQL基础]04.表表达式 [T-SQL基础]05.集合运算 [T-SQL基础]06.透视.逆透视.分组集 [T-SQL基础]07.数据修改 [T-SQL基础]08.事务和并发 [T-SQL基础]09.可编程对象 本篇主要是对多表查询基础的总结. 查询语句的FROM字句在逻辑上是第一条要处理的字句,在FROM

第三章 联接查询 T-SQL语言基础

联接查询 sql server 2008支持四种表运算符----JOIN,APPLY,PIVOT,UNPIVOT. JOIN表运算符是ANSI标准,而APPLY,PIVOT,UNPIVOT是T-SQL对标准的扩展 JOIN表运算符,联接有三种基本类型:交叉联接,内联接和外联接. 交叉联接只有一个步骤:笛卡尔积;内联接有两个步骤:笛卡尔积和过滤;外联接有三个步骤:笛卡尔积,过滤,添加外部行. (逻辑查询处理和物理查询处理的不同!) 3.1 交叉联接 (cross join) 最简单的联接,只实现了

多表联接查询解析

/*******************************************************************/>多表联接查询解析/*******************************************************************/ 0.为什么要多表联接查询/*******************************************************************/>原因:      //为了达到数据表的

SQLSERVER 的联接查询写法

1.内连接 语法:[JOIN.INNER JOIN] 作用:两个表相连,加上ON匹配两个表的共同条件. 实例1: SELECT tb_o_i.* FROM tb_o_i INNER JOIN tb_o_ig ON tb_o_i.c_id=tb_o_ig.c_id AND tb_o_i.c_provider='00996' 实例2: SELECT tb_o_i.* FROM tb_o_i join tb_o_ig ON tb_o_i.c_id=tb_o_ig.c_id WHERE tb_o_i.c

转载-- SQL连接查询2 外连接(左右联接查询)

http://www.cnblogs.com/zhangqs008/archive/2010/07/02/2341196.html 外连接主要包括左连接.右连接和完整外部连接. 1)左连接:Left Join 或 Left Outer Join       左连接的结果集包括LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行.如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值(Null). 我们看对应的SQL语句: Select Stude

Informatica 常用组件Source Qualifier之 联接查询

联接源数据 可以使用一个源限定符转换来联接来自多个关系表的数据.这些表必须能从相同的实例或数据库服务器访问.当映射使用相关的关系源时,您可以在一个源限定符转换中同时联接两个源.在会话期间,源数据库在传递数据至PowerCenter 之前先执行联接.如果源表编制了索引,此操作可以增强性能.提示: 为异类源使用联接转换以及用联接转换联接平面文件. 默认联接 当您在一个源限定符转换中联接相关表时,PowerCenter 将基于每个表中的相关键来联接表. 这种默认联接是内同等联接,在 WHERE 子句中

SQL语句汇总(终篇)—— 表联接与联接查询

上一篇博文说到相关子查询效率低下,那我们怎么能将不同表的信息一起查询出来呢?这就需要用到表联接. 和之前的UNION组合查询不同,UNION是将不同的表组合起来,也就是纵向联接,说白了就是竖着拼起来. 而表联接是通过笛卡尔乘积将表进行横向联接,所谓的通过笛卡尔乘积简单说就是两表的行依次相联再相加.要想更详细的理解可以百度下,毕竟本文主要是汇总SQL语句. 现在有如下两张表: 这是当初老师布置的一份作业,我偷个懒就不改数据了.不过把这些真神级人物的大名贴出来做“实验”总觉得心里有很虚,更何况大部分