日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL Server 2005参考:Apply运算符

發布時間:2023/12/13 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL Server 2005参考:Apply运算符 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SQL Server 2005參考:Apply運算符

使用 APPLY 運算符可以為實現查詢操作的外部表表達式返回的每個行調用表值函數。表值函數作為右輸入,外部表表達式作為左輸入。通過對右輸入求值來獲得左輸入每一行的計算結果,生成的行被組合起來作為最終輸出。

APPLY 運算符生成的列的列表是左輸入中的列集,后跟右輸入返回的列的列表。

APPLY 有兩種形式: CROSS APPLY OUTER APPLYCROSS APPLY 僅返回外部表中通過表值函數生成結果集的行。OUTER APPLY 既返回生成結果集的行,也返回不生成結果集的行,其中表值函數生成的列中的值為 NULL

--Create table Employees table and insert Values

CREATE TABLE Employees

(

??? emp_id INT NOT NULL,

??? mgr_id INT NULL,

??? emp_name VARCHAR(20) NOT NULL,

??? emp_salary MONEY NOT NULL,

??? CONSTRAINT pk_id PRIMARY KEY(emp_id)

)

INSERT INTO Employees VALUES(1 , NULL, 'Nancy'?? , $10000.00)

INSERT INTO Employees VALUES(2 , 1?? , 'Andrew'?, $5000.00)

INSERT INTO Employees VALUES(3 , 1?? , 'Janet'?? , $5000.00)

INSERT INTO Employees VALUES(4 , 1?? , 'Margaret', $5000.00)

INSERT INTO Employees VALUES(5 , 2?? , 'Steven'?, $2500.00)

INSERT INTO Employees VALUES(6 , 2?? , 'Michael' , $2500.00)

INSERT INTO Employees VALUES(7 , 3?? , 'Robert'?, $2500.00)

INSERT INTO Employees VALUES(8 , 3?? , 'Laura'?? , $2500.00)

INSERT INTO Employees VALUES(9 , 3?? , 'Ann'???? , $2500.00)

INSERT INTO Employees VALUES(10, 4?? , 'Ina'???? , $2500.00)

INSERT INTO Employees VALUES(11, 7?? , 'David'?? , $2000.00)

INSERT INTO Employees VALUES(12, 7?? , 'Ron'???? , $2000.00)

INSERT INTO Employees VALUES(13, 7?? , 'Dan'???? , $2000.00)

INSERT INTO Employees VALUES(14, 11?, 'James'?? , $1500.00)

CREATE TABLE Departments

(

??? dep_id INT NOT NULL,

??? dep_name VARCHAR(30) NOT NULL,

??? dep_m_id INT NULL REFERENCES Employees(emp_id)

)

INSERT INTO Departments VALUES(1, 'HR',?????????? 2)

INSERT INTO Departments VALUES(2, 'Marketing',??? 7)

INSERT INTO Departments VALUES(3, 'Finance',????? 8)

INSERT INTO Departments VALUES(4, 'R&D',????????? 9)

INSERT INTO Departments VALUES(5, 'Training',???? 4)

INSERT INTO Departments VALUES(6, 'Gardening', NULL)

-- Departments 表中的大多數部門都有一個經理,該經理ID(即dep_m_id)也是來自與Employees 表中的雇員(即與某一dep_id對應)。

-- 下面的表值函數使用雇員ID 作為參數,并返回該雇員及其所有下屬

CREATE FUNCTION fn_getSubTree

(

??? @emp_id INT

)

RETURNS @tree TABLE

(

??? emp_id INT NOT NULL,

??? emp_name VARCHAR(20) NOT NULL,

??? mgr_id INT NULL,

??? lvl INT NOT NULL

)

AS

BEGIN

??? WITH emp_subtree(emp_id,emp_name,mgr_id,lvl)

??? AS

??? (

?????? SELECT emp_id,emp_name,mgr_id,0 FROM Employees WHERE emp_id=@emp_id

?????? UNION ALL

?????? SELECT e.emp_id,e.emp_name,e.mgr_id,es.lvl+1

?????? FROM Employees e JOIN emp_subtree es ON e.mgr_id=es.emp_id

??? )

??? INSERT INTO @tree

??? SELECT * FROM emp_subtree

??? RETURN

END

?

-- 返回每個部門經理的所有級別的全部下屬

SELECT * FROM Departments AS D CROSS APPLY fn_getsubtree(D.dep_m_id) AS ST

-- 園藝部門不會顯示在結果中。因為此部門沒有經理,fn_getsubtree 為其返回了一個空集.

-- 使用OUTER APPLY,園藝部門也會顯示在結果集中,其中deptmgrid 字段中的值以及fn_getsubtree 返回的字段中的值均為NULL.

SELECT * FROM Departments AS D OUTER APPLY fn_getsubtree(D.dep_m_id) AS ST

轉載于:https://www.cnblogs.com/Dlonghow/archive/2009/07/18/1526298.html

總結

以上是生活随笔為你收集整理的SQL Server 2005参考:Apply运算符的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。