第五章 课后习题
一、选择题:
1. 在SQL server 2008中提供了一些字符串函数,以下说法错误的是( B )。
A、select right(‘hello‘,3)返回值为:llo;
B、select trim(‘hello‘)返回值为:hello(前后都无空格); C、select replace(‘hello‘,’e‘,’o‘)返回值为:hollo; D、select ltrim(rtrim(‘hello‘))hello(前后都无空格);
2.在SQL server 2008中,有语句“update members set Salary=Salary+300”,下列表述正确的是( A )。
A、将members表中工资都增加300 B、删除工资为300的记录
C、查询工资为300的记录 D、修改members工资都扣除300
3.在SQL server 2008中,有students(学生表),包含字段:SID(学号),SName(姓名),Grade(成绩)。先要将所有的学生成绩加10分,以下SQL语句正确的是(D )。
A、update students set Grade=Grade+10 where SID=1; B、update * set Grade=Grade+10;
C、update * from students set Grade=Grade+10; D、update students set Grade=Grade+10;
4. 假设关系数据库中一个表S的结构为S(SN,CN,grade),其中SN为学生姓名,CN为课程名,二者均为字符型;grade为成绩,数值型,取值范围0--100。若要把“张二的化学成绩80分”插入到S中,则可用( D )。
A、add into S values('张二','化学','80'); B、insert into S values('张二','化学','80'); C、add into S values('张二','化学',80); D、insert into S values('张二','化学',80);
5. 需要显示2001年1月1日—2001年12月31日雇佣的所有职员的姓名和雇佣日期。职员信息表tblEmployees包含列Name和列HireDate,下面哪些语句能完成该功能? D A. SELECT Name, HireDate FROM tblEmployees
B. SELECT Name, HireDate FROM tblEmployees
WHERE HireDate=’2001-01-01’ OR ‘2001-12-31’ C. SELECT Name, HireDate FROM tblEmployees
WHERE HireDate BETWEEN ‘2000-12-31’ AND ‘2002-01-01’ D. SELECT Name, HireDate FROM tblEmployees WHERE DATEPART(yy,HireDate)=’2001’
第六章 习题解答
一、选择题
1、在SQL server2008中,假定grade(成绩)表中包含字段:sid(学号),lang(语文成绩)。那么列出语文成绩在80分到90分的学生的SQL语句是( C )。
A、select*from grade where lang in(80,90); B、select*from grade having lang in(80,90); C、select*from grade where lang between 80 and 90; D、select*from grade having lang between80and90;
2、在SQL server 2008中,要查找eatables表中item_desc字段的值以“CHOCO”开头(如CHOCOLATE、CHOCOPIE)的所有记录。下列SQL语句正确的是( C )。
A、select*from eatables where item_desc like“CHOCO”; B、select*from eatables where item_desc =“CHOCO”; C、select*from eatables where item_desc like“CHOCO%”; D、select*from eatables where item_desc like“%CHOCO?”;
3、在SQL server 2008中,有一个product(产品)表,包含字段:pname(产品名称),要从此表中筛选出产品名称为“苹果”或“香蕉”的记录,下列语句正确的是( C )。
A、select *from product on pname=“苹果”or pname=“香蕉”; B、select *from product on pname=“苹果”and pname=“香蕉”; C、select *from product where pname=“苹果”or pname=“香蕉”; D、select *from product where pname=“苹果”and pname=“香蕉”;
4、在SQL server 2008中,当要处理学生表中name(学生姓名)列所有姓“王”的记录时,在SQL语句中where子句的写法应该是( C )。
A、where name=‘王%‘ B、where name like ’王*‘
C、where name like ‘王%‘ D、where name like ’*王%‘
第七章 习题解答
1、在SQL server2008中,假定grade(成绩)表中包含字段:cID(班级编号) lang(语文课成绩)math(数学课成绩)eng(英语成绩),那么计算不同班级每门课程的平均成绩的SQL语句是( D )。
A、select cid,avg(lang,math,eng),from grade group by lang,math,eng ; B、select cid,avg(lang)avg(math)avg(eng),from grade group by lang,math,
eng ; C、select cid,avg(lang math eng),from grade group by cid ;
D、select cid,avg(lang)avg(math)avg(eng),from grade group by cid
2、在SQL server2008中,有一个proinfo(商品信息)表,包含字段:proid(商品编码号),procatg(商品类别),proprice(商品价格),下列选项( B )可以查询每一类的平均价格。
A、select procatg,avg(proprice)from proinfo;
B、select procatg,avg(proprice)from proinfo group by procatg; C、select avg(proprice)from proinfo order by procatg; D、select avg(proprice)from proinfo ;
3、在SQL server2008中,当执行:Select au_id, title_id, sum(royaltyper)from titleauthor group by title_id, au_id order by title_id, au_idSQL语句时,会发生( A )。
A、在结果集中,对每一个不同的au_id的值和title_id的值的组合都会有一行; B、在结果集中,每一行中au_id的值都不会相同;
C、该语句会运行失败,因为查询输出的次序和分组的次序不一样; 该语句会运行失败,因为royaltyper列也应进行分组
4、 在SQL server2008中,执行如下的SQL语句:select*from item as a left join
ordredetails as b on a.icode=b.itemcod,将返回( C )。
A、item和orderdetails表中的相关记录以及orderdetails表中其余的不相关记录; B、item和orderdetails表中的相关记录;
C、item和orderdetails表中的相关记录以及item表中其余的不相关记录; D、提示语法错误;
5、在SQL server 2008中,学生表student中包含字段:学生编号sid(主键),学生姓名SaName。成绩表score包含字段:课程编号cid,学生编号sid(外键),学生成绩score;其中学生表包含10行数据,成绩表包含6行记录(且sid列没有重复值),那么执行sql语句:select*from student left outer join score on student.sid=score.sid,将返回( C )条记录。
A、0 B、6 C、10 D、16
6、在SQL server2008中,假定grade(成绩)表中包含字段:sID(学号)cID(班级编号) lang(语文课成绩)math(数学课成绩),那么计算所有学生人数和各科最高成绩的SQL语句是( A )。
A、select count(*),max(lang),max(math)from grade;
B、select count(*),max(lang),max(math)from grade group by sID; C、select sum(*),max(lang),max(math)from grade group by sID;
第八章 习题解答
1, 在SQL Server2008数据库中创建了如下两个表: CREATE TABLE 雇员表 (
雇员代号 int IDENTITY(10001,1) PRIMARY KEY, 雇员姓名 varchar(20) NOT NULL, 通信地址 varchar(200) NULL )
CREATE TABLE 订单表 (
订单号 int IDENTITY(1,1) PRIMARY KEY, 雇员代号 int NOT NULL, 客户代号 int NOT NULL,
订购日期 datetime NOT NULL, 订购金额 money NOT NULL )
需要获得2003年9月1日每个雇员的最高的一笔销售金额,要求列出“雇员代号”、“雇员姓名”、“订购日期”、最高的“订购金额”。下面哪些语句能完成该功能? ( B ) A. SELECT a.雇员代号, a.雇员姓名,b.订购日期,b.订购金额
FROM 雇员表 a LEFT JOIN 订单表 b ON a.雇员代号=b.雇员代号
WHERE b.订单日期=‘09/01/2003’
AND 订单金额 IN (SELECT MAX(订单金额) FROM 订单表)
B. SELECT a.雇员代号, a.雇员姓名,b.订购日期,MAX(订购金额)
FROM 雇员表 a LEFT JOIN 订单表 b
ON a.雇员代号=b.雇员代号 AND b.订单日期=‘09/01/2003 GROUP BY a.雇员代号,a.雇员姓名, b.订购日期
C. SELECT a.雇员代号, a.雇员姓名,b.订购日期,MAX(订购金额)
FROM 雇员表 a INNER JOIN 订单表 b ON a.雇员代号=b.雇员代号 WHERE b.订单日期=‘09/01/2003
GROUP BY a.雇员代号,a.雇员姓名, b.订购日期, b.订单号
D. SELECT a.雇员代号, a.雇员姓名,b.订购日期,MAX(订购金额)
FROM 雇员表 a INNER JOIN 订单表 b ON a.雇员代号=b.雇员代号 WHERE b.订单日期=‘09/01/2003
AND 订单金额 IN (SELECT MAX(订单金额) FROM 订单表)