数据库SQL习题练习Day3

1.下列不属于触发事件的是()
A. AFTER
B. UPDATE
C. DELETE
D. INSERT

insert触发器: 表示将要或已经新增的数据
update触发器: 表示将要或已经修改后的数据
delete触发器: 删除数据

2.在book表中,将工具书类型(tool)的书的书架序号都减少2,下列语句正确的是()
A. UPDATE books SET shelf = shelf - 2 WHERE type IS ‘tool’;
B. INSERT books SET shelf = shelf - 2 WHERE type IS ‘tool’;
C. UPDATE books SET shelf = shelf - 2 WHERE type = ‘tool’;
D. UPDATE books INTO shelf = shelf - 2 WHERE type = ‘tool’;

当表示使用NULL时,才使用IS

3.向表evaluate的成绩列添加成绩,从表grade中的成绩一列提取记录,下列语句正确的是()
A. INSERT INTO (evaluate.point)
SELECT grade.point FROM grade
B. INSERT INTO evaluate(evaluate.point)
SELECT grade.point FROM grade

C. INSERT INTO evaluate(evaluate.point)
SELECT * FROM grade
D. INSERT INTO (evaluate.point)
SELECT * FROM grade

insert into表名(字段1,字段2...values(数据1,数据2...)
select列名 from 数据表名 

4.通过子查询的方式从衬衫表SHIRTABLE中选取出销售单价shirt_price高于全部衬衫的平均价格的衬衫名字
A. SELECT shirt_id,shirt_name,shirt_price FROM SHIRTABLE WHERE shirt_price > AVG(shirt_price)

B. SELECT shirt_id,shirt_name,shirt_price FROM SHIRTABLE WHERE shirt_price > (SELECT AVG(shirt_price) FROM SHIRTABLE)

C. SELECT shirt_id,shirt_name,shirt_price FROM SHIRTABLE HAVING shirt_price > AVG(shirt_price)

D. SELECT shirt_id,shirt_name,shirt_price FROM SHIRTABLE WHERE shirt_price > (SELECT AVG(shirt_price) FROM SHIRTABLE WHERE shirt_price > AVG(shirt_price))

WHERE子句不能直接跟聚合函数 MAX.MINWHERE子句能跟含聚合函数的子查询

5.下列关于SQL Server中使用存储过程的优点叙述不正确的是()
A. 执行速度快
B. 封装复杂操作
C. 允许模块化程序设计
D. 增加网络流量

存储过程的优点
A.执行速度快。
B.允许组件式编程。
存储过程可以设置参数,可以根据传入参数的不同重复使用同一个存储过程,从而高效的提高代码的优化率和可读性。
C.减少网络流量。
减轻了网络流量,降低了网络负载。
D.提高系统安全性。
可以限制用户对数据表的存取权限,建立特定的存储过程供用户使用,避免非授权用户对数据的访问,保证数据的安全。

存储过程缺点:
A.移植性差。依赖于数据库厂商,难以移植(当一个小系统发展到大系统时,对数据库的要求也会发生改变)B.难以调试、维护。业务逻辑大的时候,封装性不够,难调试难以维护;
C.服务器不能负载均衡。复杂的应用用存储过程来实现,就把业务处理的负担压在数据库服务器上了。没有办法通过中间层来灵活分担负载和压力.均衡负载等。

6.比赛结果 result 表内容如下:

Data Win
2017-7-12
2017-7-12
2017-7-15
2017-7-15

如果要生成下列结果, 正确的sql语句是:( )

比赛日期
2017-7-12 1 1
2017-7-15 1 1

A. select Date As 比赛日期, (case when Win=‘胜’ then 1 else 0 end) 胜, (case when Win=‘负’ then 1 else 0 end) 负 from result group by Date
B. select Date As 比赛日期, SUM(case when Win=‘胜’ then 1 else 0 end) 胜, SUM(case when Win=‘负’ then 1 else 0 end) 负 from result
C. select Date As 比赛日期, SUM( when Win=‘胜’ then 1 else 0 end) 胜, SUM( when Win=‘负’ then 1 else 0 end) 负 from result group by Date
D. select Date As 比赛日期, SUM(case when Win=‘胜’ then 1 else 0 end) 胜, SUM(case when Win=‘负’ then 1 else 0 end) 负 from result group by Date

根据题目可得出来,需要行转列按日期分组并对列求和,因此需要 group by Data,sum(.../)
使用group by子句以后,SELECT 子句中的元素有严格的限制
使用group by时,SELECT 子句中只能存在以下三种元素:
    A. 常数
    B. 聚合函数
    C. GROUP BY子句中指定的列名(也就是聚合键

7.关于解决事务的脏读的最简单的方法,下列选项正确的是()
A. 修改时加排他锁,直到事务提交后释放,读取时加共享锁
B. 读取数据时加共享锁,写数据时加排他锁,都是事务提交才释放锁
C. 修改时加共享锁,直到事务提交后释放,读取时加排他锁
D. 读取数据时加排他锁,写数据时加共享锁,都是事务提交才释放锁

读已授权解决脏读问题,在数据读取时添加共享锁,执行完语句后释放锁,
数据写入时添加排它锁,事务提交后释放锁

可重复读解决不可重复读问题,在数据读取时添加共享锁,事务提交后释放锁,
数据写入时添加排它锁,事务提交后释放锁

8.某打车公司要将驾驶里程(drivedistanced)超过5000里的司机信息转存到一张称为seniordrivers 的表中,他们的详细情况被记录在表drivers 中,正确的sql语句为()
A. insert into seniordrivers where drivedistanced>=5000 from drivers
B. insert into seniordrivers(drivedistanced) values from drivers where drivedistanced>=5000
C. insert into seniordrivers(drivedistanced) where values>=5000 from drivers
D. select * into seniordrivers from drivers where drivedistanced >=5000

INSERT INTO 语句用于向一张表中插入新的行。要求目标表必须存在
SELECT INTO 语句从一张表中选取数据插入到另一张表中。常用于创建表的备份复件或者用于对记录进行存档。可以自动创建表

9.下列函数语句得不到相同数值结果的选项是()
A. SELECT ROUND(2.35)
B. SELECT ROUND(1.96,1)
C. SELECT TRUNCATE(1.99,1)
D. SELECT TRUNCATE(2.83,0)

ROUND() 函数用于把数值字段舍入为指定的小数位数;
SELECT ROUND(100.45245,4)
输出结果:100.4525
TRUNCATE() 函数是按照小数位数进行数值截取,没有四舍五入
SELECT TRUNCATE(100.45245,4)
输出结果:100.4524

10.假设有选课表course_relation(student_id, course_id),其中student_id表示学号,course_id表示课程编号,如果小易现在想获取每个学生所选课程的个数信息,请问如下的sql语句正确的是( )
A. select student_id, sum(course_id) from course_relation;
B. select student_id, sum(course_id) from lcourse_relation group by student_id;
C. select student_id, count(course_id) from course_relation;
D. select student_id, count(course_id) from course_relation group by student_id;

sum() ———— 求和
count() ———— 求行的个数
group by ———— 同类对应求和

11.有一个User用户表,现要删除整张表(指完全删除表数据和表结构),下面正确的MySQL语句是:
A. DELETE TABLE User;
B. DROP TABLE User;
C. TRUNCATE TABLE User;
D. DELETE FROM User ;

TRUNCATEDELETE 只删除数据, DROP则删除整个表(结构和数据)—— Drop TABLE 表名 if exists
DELETE from table 表名:对数据一条一条删除
TRUNCATE table 表名:删除表结构后再创建一个一样结构的空表,效率更高

12.某IT公司人事管理采用专门的人事管理系统来实现。后台数据库名为LF。新来的人事部张经理新官上任,第一件事是要对公司的员工做全面的了解。可是他在访问员工信息表EMPL里的工资和奖金字段的时被拒绝,只能查看该表其他字段。作为LF的开发者你将如何解决这一问题:( )
A. 废除张经理的数据库用户帐户对表EMPL里的工资列和奖金列的SELECT权限
B. 添加张经理到db_datareader角色
C. 添加张经理到db_accessadmin角色
D. 授予张经理的数据库用户帐户对表EMPL里的工资列和奖金列的SELECT权限。

db_accessadmin:可以添加、删除用户的用户
db_datareader:可以查看所有数据库中用户表内数据的用户

13.有一张学生成绩表sc(sno 学号,class 课程,score 成绩),示例如下:
数据库SQL习题练习Day3_第1张图片
请问哪个语句可以查询出每个学生的英语、数学的成绩(行转列,一个学生输出一行记录,比如输出[1, 89, 90])?
A. select sno,class,score from sc where class in(‘english’,‘math’)
B. select sno,
if(class=‘english’,score,0),
if(class=‘math’,score,0)
from sc
where class in(‘english’,‘math’)
C. select sno,
case when class=‘english’ then score else 0 end ,
case when class=‘math’ then score else 0 end
from sc
where class in(‘english’,‘math’)
D. select sno,
sum(if(class=‘english’,score,0)) as english,
sum( if(class=‘math’,score,0) ) as math
from sc
where class in(‘english’,‘math’)
group by sno

mysql执行顺序是先找from表,然后再where,然后Group by这些,最后Select后的语句。

这道题先找到这个表,再看where后,只把class为英语数学的筛选出来,
然后通过学号分组,每个学生的成绩放到一条记录里,
英语数学成绩这两个字段便是查找完每个学生的记录后得到的,需要用到sum

14.子查询中,父查询中一般使用IN运算符的是()
A. 单列单值嵌套查询
B. 单列多值嵌套查询
C. 多列多值嵌套查询
D. 集合查询

A.结果集为一个值,一般使用=<>等运算符;
C.结果类似于一张虚拟表,父查询中只能使用EXISTSNOT EXISTSD.通常是利用UNIONEXCEPTINTERSECT集合运算符实现两个表之间的数据查询。

15.已知数据库学生成绩及学生表,现授予用户USER1在学生表上的SELECT权限,下列SQL语句正确的是()
A. USE 学生成绩 GO GRANT SELECT ON 学生表 TO USER1
B. USE 学生成绩 GO GRANT SELECT ON 学生表 FROM USER1
C. USE 学生成绩 GO REVOKE SELECT ON 学生表 FROM USER1
D. USE 学生成绩 GO REVOKE SELECT ON 学生表 TO USER1

授权语法结构: USE 数据库名 GO GRANT 权限 ON 表名 TO 用户名
收回权限语法结构: USE 数据库名 GO REVOKE 权限 ON 表名 FROM 用户名

16.Mysql中表student_table(id,name,birth,sex),插入如下记录:
(‘1003’ ,‘男生姓名’ , ‘2000-05-20’ , ‘男’);
(‘1004’ , ‘张三’ , ‘2000-08-06’ , ‘男’);
(‘1005’ , ‘李四’ , ‘2001-12-01’ , ‘女’);
(‘1006’ , ‘女生姓名’ , ‘2001-12-02’ , ‘女’);
删除符合条件的记录:是男生时删除name='男生姓名’的记录,是女生时删除name='女生姓名’的记录,如下SQL正确的是()?
A. delete from table student_table where name = ( case when sex = ‘男’ then ‘男生姓名’ when sex = ‘女’ then ‘女生姓名’ end) ;
B. delete from student_table where name = ( case when sex = ‘男’ then ‘男生姓名’ when sex = ‘女’ then ‘女生姓名’ end) ;
C. delete from student_table where name = ( case when sex = ‘男’ then ‘男生姓名’ when sex = ‘女’ then ‘女生姓名’) ;
D. delete from student_table where name = ( case sex = ‘男’ then ‘男生姓名’ case sex = ‘女’ then ‘女生姓名’ end) ;

case when的正确语法是: case when ... then ... when ... then ... else ... end,case和end不能缺少

17.下列选项关于事务和并发控制的描述不正确的是()
A. 并发控制机制的好坏是衡量一个数据库管理系统性能的重要标志之一
B. 可串行性是判断并发事务是否正确的准则
C. SQL Server中每一条select、insert、update、delete语句都是显性事务的一部分
D. 事务的隔离级别越高,并发能力也就越低

隐式事务:在连接的基础上,每一条语句都以单独事务运行。
显式事务:存在开始/结束标志,例如:
	BEGIN TRANSACTION
	...具体事务
	END TRANSACTION

18.关于MySQL常见索引的描述正确是()A. 创建UNIQUE索引,索引列的值必须唯一,不允许有空值
B. 一个表中可以创建多个全文索引
C. 为提高效率可建立组合索引,遵循“最左前缀”原则
D. 使用非聚集索引需要将物理数据页中的数据按列重新排序

A.唯一索引不允许两行具有相同的索引值,包括NULL值,允许有空值;
B.每个表只允许有一个全文索引;
D.非聚集索引具有完全独立于数据行的结构,所以不需要将物理数据页中的数据按列重新排序。

19.Mysql中表student_table(id,name,birth,sex),插入如下记录:
(‘1001’ , ‘’ , ‘2000-01-01’ , ‘男’);
(‘1004’ , ‘张三’ , ‘2000-08-06’ , ‘男’);
(‘1005’ , NULL , ‘2001-12-01’ , ‘女’);
(‘1006’ , ‘张三’ , ‘2001-12-02’ , ‘女’);
执行
select t1.name from
(select * from student_table where sex = ‘女’)t1
left join
(select * from student_table where sex = ‘男’)t2
on t1.name = t2.name;
的结果行数是()?
A. 4
B. 3
C. 2
D. 1

left join (左连接,左外连接):返回包括左表中的所有记录和右表中连接字段相等的记录。
right join (右连接,右外连接):返回包括右表中的所有记录和左表中连接字段相等的记录。
inner join (等值连接或者叫内连接):只返回两个表中连接字段相等的行。
full join (全外连接):返回左右表中所有的记录和左右表中连接字段相等的记录。

你可能感兴趣的:(SQL,数据库,sql)