SQL 容易忽略的连接语句

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后,重复的行将不会被移除。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值