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运算符
分类:
数据库 / SQL Server
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!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的集成