sql 巩固练习——用到了前几天几个知识点
在查看sql server 2005的帮助文档中的cross apply 运算符时发现了一个个人感觉用到的知识点儿比较多,免备案空间,比较经典的例子。在此写下来,香港空间,也是为了巩固一下前几天的知识点。
先建表一员工表(employees):
create table employees( empid , mgrid intnull, empname varchar(25) not null, salary , constraint pk_employees primary key(empid),)
向employees表中插入数据:
employees , $10000.00), $5000.00), $5000.00), $5000.00) , $2500.00), $2500.00), $2500.00), $2500.00), $2500.00), $2500.00), $2000.00), $2000.00), $2000.00), $1500.00)
查询向employees表插入的全部数据sql语句:
employees
结果如图:
再建表二部门表(departments):
create table departments( deptid , deptname varchar(25) not null, deptmgrid employees)
向departments表插入数据:
,2), 7),8),9),4), null)
查询向departments表插入的全部数据sql语句:
departments
结果如图:
下面的表值函数使用雇员 id 作为参数,并返回该雇员及他/她的所有下属(用到了前面所学的cte公共表表达式 with...as... 的递归):
) ( empid , empname varchar(25) not null, mgrid int null, lvl) employees_subtree(empid, empname, mgrid, lvl) as (empid, empname, mgrid, 0from employeese.empid, e.empname, e.mgrid, es.lvlemployees as ejoin employees_subtree as eson e.mgrid = es.empid ) employees_subtree
返回每个部门经理的所有级别的全部下属,使用下面的sql语句(用到了apply的cross apply):
departments as d cross apply fn_getsubtree(d.deptmgrid) as st
结果如图:
,虚拟主机