『壹』 数据库的题目

、等级查询

题目:员工信息表中有员工ID、姓名、上级员工ID字段,现要求用一条语句,查询出全部员工的、姓名及级别——最高为1级,其下依次为2、3、4等,如下图所示:

对于排序,我原来只知道利用ROWNUM伪列:

SELECT E.*,
ROWNUM
FROM (SELECT *
FROM EMPLOYEES
ORDER BY SALARY DESC) E

然后再用这个结果集和其他表关联,针对本题,这种方法可以查出每个员工在整个公司以及本部门工资的排名,但在我看来有如下两个问题:

1、一张事实表关联两次,效率低下;

2、无法查询出每个员工在整个公司以及本部门工资的排名,除非用循环,但又不是一条语句了。

数据库表中对数值字段进行排名,应使用RANK函数,该函数的作用就是计算一个值在一组值中的排名,返回值为数值型,形式为RANK() OVER (PARTITION BY … ORDER BY …),其中:

1、PARTITION BY关键字为用于排序的分组,也就是说如果查询全部数据中的排名,则该关键字可省略;

2、ORDER BY关键字即为按哪个字段进行排序,空或ASC为升序,DESC为降序,与标准SQL没区别;

3、如果两行数据用于排序的字段值完全相同,则二者的RANK返回值(序号)也相同,序号不连续(英文是Identical salary values receive the same rank and cause nonconsecutive ranks),还有类似的DENSE_RANK()函数,相同值的序号相同,序号连续;ROW_NUMBER()函数,每个值的序号唯一,相同值有可能按照ROWNUM的次序编号(这个不确定,官方文档没说,我推测的-_-),这三个函数的使用方法相同。

『贰』 SOL数据库题目

三、1.select*from职工where工资<avg(工资)
2.select*from职工orderby工资asc
3.select*from职工orderby工资computeavg(工资)by仓库号
4.insertinto仓库values('WH6','长沙',1000)
5.update职工set工资=工资+200where职工号='E006'
6.selecta.名字,a.仓库号,b.城市from职工ajoin仓库bona.仓库号=b.仓库号
7.select名字from职工where仓库号in(select仓库号from仓库,where城市='北京')
8.delete*from供应商where地址like'%长春%'
9.droptable职工
10.altertable职工addconstgzcheck(工资between1500and5000)

四、1.create database library

on primary --默认就属于Primary 主文件组,可省略
(
/*--数据文件的具体描述--*/
Name='library_data', --主数据库的物理名称
Filename='d:datalibrary_data.mdf' ,--主数据库的物理名称
size=5MB , --主数据库的初始大小
Maxsize=20Mb, --主数据库文件增长最大文件增长
Filegrowth =10%
)

Log on
(
/*--日志文件具体描述同上--*/
name='library_log',
Filename='e:datalibrary_log.ldf',
Size=2MB,
MaxSize=10MB,
FIleGrowth=1MB

)

五、1.create table 职工表(

职工编号 char(10)primary key,

姓名 char(30),

性别 char(2) check (性别='男' or 性别='女'),

出生日期 smalldatetime check (出生日期 > '1960-01-01'),

部门编号 char(10)FOREIGNKEYREFERENCES 部门表(部门编号)


2. (1)alter table 部门表 add部门经理char(10)

(2)select * from 图书表 where出版社编号 = (select 出版社编号 from出版社 where 出版社名称 = '清华大学出版社出版')

(3)select图书编号,书名 from 图书表 where书名 like '%数据库%'

(4) select * from 职工表 where 性别='女' and部门编号 in (select 部门编号 from 部门表 where 部门名称 = ‘文科图书室’) order by出生日期 desc

(5) select图书的编号,名称 from图书表 where 出版社编号 in (select 出版社编号 from出版社表 where出版社名称 = '机械工业出版社') and部门编号 in (select 部门编号 from部门表where 部门名称 = '理科图书室')

(6)select*from职工表 orderby 部门编号,性别 computecount(*)by部门编号,性别

(7) select 部门编号,count(*) as管理图书数目 from图书表 group by 部门编号 havingcount(*) >1000

(9) select 图书编号,书名 from图书表 where部门编号 in (select 部门编号 from职工表where姓名 like '%张%')

(10) select a.书名,a.作者,a.出版社编号,b.出版社名称,b.地址 into 新表 from图书表 a join出版社表 b on a.出版社编号= b.出版社编号