SQL 容易忽略的连接语句

来源:互联网 发布:js toggle botton 编辑:程序博客网 时间:2024/06/06 03:05

1 自连接

经常被我们忽略的就是自连接。很多时候我们需要把同一张表当作两张独立的表来使用。特别是表包含了嵌套层次的数据,或者你希望根据不同的时间段来引用相同的表作比较。

可以用表别名来实现表与其自身的联结。

示例:通过连接Employee表的ManagerID和Employee表的EmployeeID来演示自联结,

SELECT e.EmployeeID,e.Title,m.Tilte as ManagerTitle FROM Employee e LEFT JOIN Employee m ON e.ManagerID=m.EmployeeID.

 

2 使用衍生表

 即将表与子查询查出的结果集相连接。

SELECT DISTINCT s.PurchaseOrderNumber

FORM SalesOrderHeader s INNER JOIN

(

 SELECT SalesOrderID From SalesOrderDetail where UnitPrice Between 1000 and 2000)

)

d ON s.SalesOrderID=d.SalesOrderID

使用衍生表的查询有时比临时表性能好很多,因为你消除了SQL SERVER在使用前创建和分配临时表所需要的步骤

 

3使用Union组合结果集

使用UNION运算符可以追加两个或多个SELECT 语句的结果到一个结果集中,每一个合并的SELECT语句必须有相同数据的列,列次序相同并且有相同的或可兼容的数据类型。

默认情况下UNION运算符会移除所有重复行,并且以第一个结果集的列名为基准显示列名。对于大结果集来说,这可能会是一个相当耗费资源的操作,所以如果你不需要去除重复数据或者数据本身就不重复的话,可以使用UNION ALL。加了ALL后,重复的行将不会被移除。