sql基础语法-联接查询

交叉联接

1.不带where条件的,将返回两个表的 行乘积

select c.*, e.* from Sales.Customers c
cross join hr.Employees e

 

2.带where 条件的,交叉联接不能使用ON

select e1.empid,e1.firstname,e1.lastname,
       e2.empid,e2.firstname,e2.lastname
       from HR.Employees as e1
       cross join HR.Employees as e2 where e1.empid= e2.empid

 

内联接

内联接先对两个表做笛卡尔乘积,再用on进行筛选,Inner join,默认Inner可以忽略。

SELECT E.empid,E.firstname,E.lastname,O.orderid
From HR.Employees AS E
    JOIN Sales.Orders AS O
    ON E.empid=O.empid

 

外联接

1)左外连接LEFT [OUTER] JOIN

显示符合条件的数据行,同时显示左边数据表不符合条件的数据行,右边没有对应的条目显示NULL

例如,以下查询会查询出,没有订单的客户信息,orderid 填充NULL

SELECT C.custid,C.companyname,O.orderid
    FROM Sales.Customers AS C
    LEFT OUTER JOIN Sales.Orders AS O
    ON C.custid=O.custid

 

2)右外连接RIGHT [OUTER] JOIN

显示符合条件的数据行,同时显示右边数据表不符合条件的数据行,左边没有对应的条目显示NULL

例如,以下查询会查出所有的订单信息,没有订单信息的customer信息不会被查出。

SELECT O.orderid,C.custid,C.companyname
    FROM Sales.Orders AS O 
    LEFT OUTER JOIN Sales.Customers AS C
    ON O.custid=C.custid

 

3)全外连接full [outer] join

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

例如以下代码,返回的结果集行数相通,对于没有订单的customer同样会返回数据。

   SELECT C.custid,C.companyname,O.orderid
    FROM Sales.Customers AS C
    FULL OUTER JOIN Sales.Orders AS O
    ON C.custid=O.custid

    SELECT O.orderid,C.custid,C.companyname
    FROM Sales.Orders AS O 
    FULL OUTER JOIN Sales.Customers AS C
    ON O.custid=C.custid

 

其他联接-复合联接

其他联接-不等联接

其他联接-多联接查查询

 

posted @ 2016-08-03 13:28  shuzhen.yu  阅读(243)  评论(0编辑  收藏  举报