Sql学习第六天——SQL巩固练习
Sql学习第五天——SQL关于apply的两种形式cross apply和outer apply
http://www.2cto.com/database/201304/206330.html
在查看SQL Server 2005的帮助文档中的cross apply 运算符时发现了一个个人感觉用到的知识点儿比较多,比较经典的例子。在此写下来,也是为了巩固一下前几天的知识点。
先建表一员工表(Employees):
CREATE TABLE Employees
(
empid int NOT NULL,
mgrid int NULL,
empname varchar(25) NOT NULL,
salary money NOT NULL,
CONSTRAINT PK_Employees PRIMARY KEY(empid),
)
向Employees表中插入数据:
--插入数据
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)
查询向Employees表插入的全部数据SQL语句:
select * from Employees
结果如图:
再建表二部门表(Departments):
CREATE TABLE Departments
(
deptid INT NOT NULL PRIMARY KEY,
deptname VARCHAR(25) NOT NULL,
deptmgrid INT NULL REFERENCES Employees
)
向Departments表插入数据:
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表插入的全部数据SQL语句:
select * from Departments
结果如图:
下面的表值函数使用雇员 ID 作为参数,并返回该雇员及他/她的所有下属:
CREATE FUNCTION dbo.fn_getsubtree(@empid AS INT) RETURNS @TREE TABLE
(
empid INT NOT NULL,
empname VARCHAR(25) NOT NULL,
mgrid INT NULL,
lvl INT NOT NULL
)
AS
BEGIN
WITH Employees_Subtree(empid, empname, mgrid, lvl)
AS
(
-- Anchor Member (AM)
SELECT empid, empname, mgrid, 0
FROM employees
WHERE empid = @empid
UNION all
-- Recursive Member (RM)
SELECT e.empid, e.empname, e.mgrid, es.lvl+1
FROM employees AS e
JOIN employees_subtree AS es
ON e.mgrid = es.empid
)
INSERT INTO @TREE
SELECT * FROM Employees_Subtree
RETURN
END
GO
返回每个部门经理的所有级别的全部下属,使用下面的SQL语句(用到了apply的cross apply):
SELECT *
FROM Departments AS D
CROSS APPLY fn_getsubtree(D.deptmgrid) AS ST
结果如图:
相关推荐
通过查看sql 2005的帮助文档找到了CUBE 和 ROLLUP 之间的具体区别: CUBE 生成的结果集显示了所选列中值的所有组合的聚合。ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。 再看看对grouping的解释: 当...
Sql Server——Sql性能优化Sql Server——Sql性能优化Sql Server——Sql性能优化Sql Server——Sql性能优化Sql Server——Sql性能优化Sql Server——Sql性能优化Sql Server——Sql性能优化Sql Server——Sql性能优化
SQL优化的好工具——SQL Expert介绍.pdf
资源名称:SQL Server 2012王者归来——基础、安全、开发及性能优化内容简介:本书由浅入深,全面细致地讲述了SQL Server 2012的功能特性和开发应用。从SQL Server数据库基础到数据库安全,再到SQL Server开发及...
MyBatis从入门到入土——动态SQL(csdn)————程序
实验5 sql语句练习——图书馆数据库.docx
sql学习练习题sql学习练习题sql学习练习题sql学习练习题sql学习练习题sql学习练习题sql学习练习题sql学习练习题sql学习练习题sql学习练习题sql学习练习题sql学习练习题sql学习练习题sql学习练习题sql学习练习题sql...
来自Madrid且订单数少于3的消费者,针对这个要求作出以下:建表做题分析以及sql语句的写法,感兴趣的朋友可以参考下哈,希望可以帮助到你
sql server 2000完全实战——数据转换报务(dts)
SQL Server 2008存储结构——GAM和SGAM、PFS结构、IAM结构、DCM&BCM;
SQL Server 2008 R2概览——主数据服务和商务智能
实验5sql语句练习——图书馆数据库答案.pdf
SQLServer课程设计报告——图书馆管理系统.doc
SQL Server 2005深入内幕——开发人员,最大的赢家:SQL Server 2005全新的开发特性.pdf
学习SQL——server! ppt 文档~
SQL是高级的非过程化编程语言,是沟通数据库服务器和客户端的重要工具,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以,具有完全不同底层结构的不同...
精妙sql.doc————电子版_doc版
试验5 sql语句练习——图书馆数据库答案.docx
试验5sql语句练习——图书馆数据库答案.docx