zoukankan      html  css  js  c++  java
  • 特殊联接查询

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

    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

    查询结果:

    image

    多表联接查询

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

    一个联接表运算符只对两个表进行操作,而一条查询语句可以包含多个联接。通常,当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;

    查询结果:

    image

  • 相关阅读:
    Virtualbox中不能为虚拟机打开一个新任务的原因及解决方法
    CSS 制作三角形原理剖析
    java 执行jar指定log4j.properties文件位置
    Git submodules
    IO模型
    Error during WebSocket handshake 403
    Proto(协议缓冲区)
    gRPC
    Node.js 模块机制
    Node.js 模块机制及常见面试问题解答
  • 原文地址:https://www.cnblogs.com/mcgrady/p/3883687.html
Copyright © 2011-2022 走看看