SQL Server 使用APPLY运算符

从SQL Server 2005开始,提供了APPLY运算符

 

内部联接的方式实现

1
2
3
SELECT D.deptname, E.empid, E.empname, E.salary
FROM dbo.Departments AS D
         INNER JOIN dbo.Employees AS E ON D.deptid = E.deptid;

 

右表表达式为子查询

1
2
3
SELECT D.deptname, E.empid, E.empname, E.salary
FROM dbo.Departments AS D
         CROSS APPLY (SELECT empid, empname, salary FROM dbo.Employees WHERE deptid = D.deptid) AS E;

  

右表表达式为表值函数

1
2
3
4
5
6
7
8
9
10
11
CREATE FUNCTION dbo.fn_get(@deptid AS int)
    RETURNS TABLE
        AS
        RETURN
        SELECT empid, empname, salary
        FROM Employees
        WHERE deptid = @deptid;
 
SELECT D.deptname, E.empid, E.empname, E.salary
FROM dbo.Departments AS D
         CROSS APPLY fn_get(D.deptid) AS E;

  

OUTER APPLY

1
2
3
SELECT D.deptname, E.empid, E.empname, E.salary
FROM dbo.Departments AS D
         OUTER APPLY fn_get(D.deptid) AS E;

  

 

附: 建表语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
IF OBJECT_ID('dbo.Employees', 'U') IS NOT NULL
    DROP TABLE dbo.Employees;
IF OBJECT_ID('dbo.Departments', 'U') IS NOT NULL
    DROP TABLE dbo.Departments;
 
CREATE TABLE dbo.Employees
(
    empid   int         NOT NULL,
    deptid  int         NULL,
    empname varchar(25) NOT NULL,
    salary  money       NOT NULL
        CONSTRAINT PK_Employees PRIMARY KEY (empid)
);
CREATE TABLE dbo.Departments
(
    deptid   int         NOT NULL PRIMARY KEY,
    deptname varchar(25) NOT NULL,
);
GO
 
INSERT INTO dbo.Employees
VALUES (1, NULL, 'Nancy', $10000.00),
       (2, 1, 'Andrew', $5000.00),
       (3, 1, 'Janet', $5000.00),
       (4, 1, 'Margaret', $5000.00),
       (5, 2, 'Steven', $2500.00),
       (6, 2, 'Michael', $2500.00),
       (7, 3, 'Robert', $2500.00),
       (8, 3, 'Laura', $2500.00),
       (9, 3, 'Ann', $2500.00),
       (10, 4, 'Ina', $2500.00),
       (11, 7, 'David', $2000.00),
       (12, 7, 'Ron', $2000.00),
       (13, 7, 'Dan', $2000.00),
       (14, 11, 'James', $1500.00);
INSERT INTO dbo.Departments
VALUES (1, 'HR'),
       (2, 'Marketing'),
       (3, 'Finance'),
       (4, 'R&D'),
       (5, 'Training'),
       (6, 'Gardening');

  

  

文章来源: 锋利的SQL(第2版)7.8使用APPLY运算符

posted @   草木物语  阅读(189)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
历史上的今天:
2021-07-13 Spring Batch 批处理
2021-07-13 mysql 删除重复数据 保留1条
2019-07-13 Spring Cloud Eureka 服务发现 4.2
2019-07-13 Spring Cloud简介 4.1
2019-07-13 Spring Cloud 如何使用Eureka注册服务 4.2.2
2019-07-13 Spring Boot应用的打包和部署
2019-07-13 Spring Boot与ActiveMQ的集成
点击右上角即可分享
微信分享提示