【个人学习笔记7之--联接与集合操作】

说到联接与集合操作,其实它们就是对表的2种形式的操作。前者是表之间的水平操作,后者是表之间的垂直操作。

 

1.联接
联接分为2个时期.旧语法中,FROM子句后面表之间用逗号分开,没有JOIN ON 关键字.新语法才加入了JOIN关键字和ON子句.还引入了外部联接.
旧的语法也是支持外部联接的,不过形式有所不同。以前关于外部联接的语法是 *=和=*(左右联接),不推荐.
关于这方面的知识,可以参考JJ大大有篇写得很好的文章(http://blog.csdn.net/jinjazz/archive/2009/08/10/4430354.aspx)

 

CROSS:
交叉连接可以用于对某个的表每条记录生产一定数量的副本.
举个例子: Customers 表 表示消费信息,Employees 表示员工信息 ,我现在要为消费者和员工的每个组合生成一个指定日期内每天的订单表
DECLARE @fromdate AS DATETIME, @todate AS DATETIME;
SET @fromdate = '20060101';
SET @todate = '20060131';
----2000
SELECT IDENTITY(int, 1, 1) AS OrderID,
  CustomerID, EmployeeID,
  DATEADD(day, n-1, @fromdate) AS OrderDate
INTO dbo.MyOrders
FROM dbo.Customers, dbo.Employees, dbo.Nums
WHERE n <= DATEDIFF(day, @fromdate, @todate) + 1;
select * from dbo.MyOrders
--2005
WITH Orders
AS
(
  SELECT CustomerID, EmployeeID,
    DATEADD(day, n-1, @fromdate) AS OrderDate
  FROM dbo.Customers, dbo.Employees, dbo.Nums
  WHERE n <= DATEDIFF(day, @fromdate, @todate) + 1
)
SELECT ROW_NUMBER() OVER(ORDER BY OrderDate) AS OrderID,
  CustomerID, EmployeeID, OrderDate
FROM Orders;

利用Cross 可以提高行与聚合函数计算的效率
--计算表里的每行值 占总和的百分比以及与平均值的差值
create table #(a int)
insert # select 1
union all select 2
union all select 5
union all

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值