1、数据库工程师面试题Lyven SQL数据库开发 5月14日(点击上方蓝色字,可快速关注我们哦)选择题:(每空分共18分)1、在MS SQL Server中,用来显示数据库信息的系统存储过程是( )A sp_ dbhelpB sp_ dbC sp_ helpD sp_ helpdb 2、SQL语言中,删除一个表的命令是( )A DELETEB DROPC CLEARD REMORE 3、关系数据库中,主键是(_)A、为标识表中唯一的实体B、创建唯一的索引,允许空值C、只允许以表中第一字段建立D、允许有多个主键的 4、在Transact-SQL语法中,SELECT语句的完整语法较复杂,但至少包括的
2、部分(1_),使用关键字(2_)可以把重复行屏蔽,将多个查询结果返回一个结果集合的运算符是(3_),如果在SELECT语句中使用聚合函数时,一定在后面使用(4_)。 A、SELECT,INTO B、SELECT,FROM C、SELECT,GROUP D、仅SELECT A、DISTINCT B、UNION C、ALL C、TOP A、JOIN B、UNION C、INTO C、LIKE A、GROUP BY B、COMPUTE BY C、HAVING D、COMPUTE 5、语句DBCC SHRINKDATABASE (Sample, 25)中的25表示的意思是A、25MB、剩余占整个空间的
3、25%C、已用空间占整个空间的25%D、以上都不对 6、你是一个保险公司的数据库开发人员,公司的保单信息存储在SQL Server 2000数据库中,你使用以下脚本建立了一个名为Policy的表:CREATE TABLE Policy(PolicyNumber int NOT NULL DEFAULT (0),InsuredLastName char (30) NOT NULL,InsuredFirstName char (20) NOT NULL,InsuredBirthDate datetime NOT NULL,PolicyDate datetime NOT NULL,FaceAmoun
4、t money NOT NULL,CONSTRAINT PK_Policy PRIMARY KEY (PolicyNumber)每次公司销售出一份保单,Policy表中就增加一条记录,并赋予其一个新的保单号,你将怎么做? a.建立一个INSTEAD OF INSERT触发器来产生一个新的保单号,并将这个保单号插入数据表中。b.建立一个INSTEAD OF UPDATE触发器来产生一个新的保单号,并将这个保单号插入数据表中。c.建立一个AFTER UPDATE触发器来产生一个新的保单号,并将这个保单号插入数据表中。d.用AFTER UPDATE触发器替代DEFAULT约束条件产生一个新的保单号,
5、并将这个保单号插入数据表中。 、在SQL语言中,如果要建立一个工资表包含职工号,姓名,职称。工资等字段。若要保证工资字段的取值不低于800元,最合适的实现方法是:A。在创建工资表时为”工资“字段建立缺省B。在创建工资表时为”工资“字段建立检查约束C。在工资表建立一个触发器D。为工资表数据输入编写一个程序进行控制、Select 语句中用来连接字符串的符号是_.A. “+” B. “&” C.“|” D.“|” 、你是一个出版公司的数据库开发人员,对特定的书名的每天的销售情况建立了如下的存储过程:CREATE PROCEDURE get_sales_for_titletitle varchar(8
6、0), ytd_sales int OUTPUTASSELECT ytd_sales = ytd_salesFROM titlesWHERE title = titleIF ROWCOUNT = 0RETURN(-1)ELSERETURN(0)另外建立了一个脚本执行这个存储过程,如果执行成功,将返回对应于书名的每天的销售情况的报表,如果执行失败,将返回“No Sales Found”,怎样建立这个脚本? . DECLARE retval intDECLARE ytd intEXEC get_sales_for_title Net Etiquette, ytdIF retval 0PRINT N
7、o sales foundELSEPRINT Year to date sales: + STR (ytd)GO . DECLARE retval intDECLARE ytd intEXEC get_sales_for_title Net Etiquette, ytd OUTPUTIF retval 0PRINT No sales foundELSEPRINT Year to date sales: + STR (ytd)GO . DECLARE retval intDECLARE ytd intEXEC get_sales_for_title Net Etiquette,retval OU
8、TPUTIF retval 0PRINT No sales foundELSEPRINT Year to date sales: + STR (ytd)GO . DECLARE retval intDECLARE ytd intEXEC retval = get_sales_for_title Net Etiquette, ytd OUTPUTIF retval 1drop table zd_ks 、(1)select Class,count(1) as num from student group by Class (2)select S.Sex,avg(G.Num) as Numfrom
9、student S,Grade Gwhere S.ID=G.ID and S.Class=1group by S.Sex (3)select S.Class,count(1) as numfrom student S,Grade G,schedule SCwhere S.ID=G.ID and G.SID =Sc.ID and SC.Name=数据结构 and Sc.Num5 2. 查询借阅了水浒一书的读者,输出姓名及班级-实现代码:SELECT * FROM CARD cWHERE EXISTS( SELECT * FROM BORROW a,BOOKS b WHERE a.BNO=b.BN
10、O AND b.BNAME=N水浒 AND a.CNO=c.CNO) 3. 查询过期未还图书,输出借阅者(卡号)、书号及还书日期-实现代码:SELECT * FROM BORROWWHERE RDATEgetdate()/getdate() 4. 查询书名包括网络关键词的图书,输出书号、书名、作者-实现代码:SELECT BNO,BNAME,AUTHOR FROM BOOKSWHERE BNAME LIKE N%网络% 5. 查询现有图书中价格最高的图书,输出书名及作者-实现代码:SELECT BNO,BNAME,AUTHOR FROM BOOKSWHERE PRICE=( SELECT MA
11、X(PRICE) FROM BOOKS) 6. 查询当前借了计算方法但没有借计算方法习题集的读者,输出其借书卡号,并按卡号降序排序输出-实现代码:SELECT a.CNOFROM BORROW a,BOOKS bWHERE a.BNO=b.BNO AND b.BNAME=N计算方法 AND NOT EXISTS( SELECT * FROM BORROW aa,BOOKS bb WHERE aa.BNO=bb.BNO AND bb.BNAME=N计算方法习题集 AND aa.CNO=a.CNO)ORDER BY a.CNO DESC 7. 将C01班同学所借图书的还期都延长一周-实现代码:UP
12、DATE b SET RDATE=DATEADD(Day,7,b.RDATE)FROM CARD a,BORROW bWHERE a.CNO=b.CNO AND a.CLASS=NC01 8. 从BOOKS表中删除当前无人借阅的图书记录-实现代码:DELETE A FROM BOOKS aWHERE NOT EXISTS( SELECT * FROM BORROW WHERE BNO=a.BNO) 9. 在BORROW表上建立一个触发器,完成如下功能:如果读者借阅的书名是数据库技术及应用,就将该读者的借阅记录保存在BORROW_SAVE表中(注ORROW_SAVE表结构同BORROW表)-实现
13、代码:CREATE TRIGGER TR_SAVE ON BORROWFOR INSERT,UPDATEASIF ROWCOUNT0INSERT BORROW_SAVE SELECT i.*FROM INSERTED i,BOOKS bWHERE i.BNO=b.BNO AND b.BNAME=N数据库技术及应用 10. 建立一个视图,显示力01班学生的借书信息(只要求显示姓名和书名)-实现代码:CREATE VIEW V_VIEWASSELECT a.NAME,b.BNAMEFROM BORROW ab,CARD a,BOOKS bWHERE ab.CNO=a.CNO AND ab.BNO=b.BNO AND a.CLASS=N力01 11. 查询当前同时借有计算方法和组合数学两本书的读者,输出其借书卡号,并按卡号升序排序输出-实现代码:SELECT a.CNOFROM BORROW a,BOOKS bWHERE a.BNO=b.BNO AND b.BNAME IN(N计算方法,N组合数学)GROUP BY a.CNOHAVING COUNT(*)=2ORDER BY a.CNO DESC