数据库SQL习题练习Day6

1.在STUDENT表中按class_type统计数据行数分组情况后,筛选出数据行数为大于10行的组
A. SELECT class_type,COUNT() FROM STUDENT GROUP BY class_type HAVING COUNT()>10
B. SELECT class_type,COUNT() FROM STUDENT GROUP BY class_type WHERE COUNT()=10
C. SELECT class_type,COUNT() FROM STUDENT HAVING COUNT()>10 GROUP BY class_type
D. SELECT class_type,COUNT() FROM STUDENT WHERE COUNT() >10 GROUP BY class_type

WHERE不能接聚合函数(MAXMINCOUNTSUMAVG等);HAVING后可以接聚合函数;
WHERE用在GROUP BY前,先过滤后分组;
HAVING用在GROUP BY之后,先分组后过滤,且使用HAVING一定要用到GRUOP BY,但用到GROUP BY 不一定有HAVING

2.查询语句select stuff(‘lo ina’,3, 1, ‘ve ch’)结果为?
A. love
B. love china
C. china love
D. china

STUFF(原字符, 开始位置, 删除长度, 插入字符) 
从指定的起点处开始删除指定长度的字符,并在此处插入另一组字符

3.有一张person表,主键是id,数据如下:
在这里插入图片描述
同时还有一张任务表task,主键也是id:
在这里插入图片描述
请找出每个人的任务情况(注意:没有任务也要输出),结果按id降序排列,输出如下:
在这里插入图片描述
下面正确的SQL查询语句是:
A. SELECT p.id, p.name, t.content FROM person AS p LEFT JOIN task AS t ON p.id = t.person_id ORDER BY p.id DESC;

B. SELECT p.id, p.name, t.content FROM person AS p JOIN task AS t ON p.id = t.person_id ORDER BY p.id DESC;

C. SELECT p.id, p.name, t.content FROM person AS p RIGHT JOIN task AS t ON p.id = t.person_id ORDER BY p.id DESC;

D. SELECT p.id, p.name, t.content FROM person AS p INNER JOIN task AS t ON p.id = t.person_id ORDER BY p.id DESC;

B.只获取两表相匹配的数据,没有对应值的就会pass,所以会漏掉没有任务的情况;
C.会获取task表的所有记录,刚好和题意相反了;
D.会获取两个表中字段匹配关系的记录,漏掉没有任务的情况。

4.批处理是指包含一条或多条T-SQL语句的语句组,下列选项中,关于批处理的规则描述正确的是()
A. 定义一个check约束后,可以在同一个批处理中使用
B. 修改一个表中的字段名后,不可以在同一个批处理中引用这个新字段
C. Create default,Create rule等语句同一个批处理中可以同时提交多个
D. 把规则和默认值绑定到表字段或自定义字段上之后,可以在同一个批处理中使用

不能定义一个check约束后,立即在同一个批处理中使用;
Create default,Create rule,Create trigger,Create procedure,Create view等语句同一个批处理中只能提交一个;
不能把规则和默认值绑定到表字段或自定义字段上之后,立即在同一个批处理中使用。

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

INSERT INTO 语句用于向一张表中插入新的行。
SELECT INTO 语句从一张表中选取数据插入到另一张表中。常用于创建表的备份复件或者用于对记录进行存档。

6.学生、书店和图书三个实体集之间的联系属于()
A. 二元联系
B. 多元联系
C. 自反联系
D. 一对一联系

多元联系:参与联系的实体集个数大于2个时
二元联系:指只有两个实体集参与的联系
自反联系:描述了同一实体集内两部分实体之间的联系,是一种特殊的二元联系
一对一联系:是二元联系下的一种细分。

7.为职员表添加列,列名为年末奖金,允许为空值,数据类型为货币数据类型。下列SQL语句正确的是()
A. ALTER TABLE 职员 ADD 年末奖金 NULL
B. ALTER TABLE 职员 ADD 年末奖金 Money NULL
C. ALTER TABLE 职员 ADD 年末奖金 Money NOT NULL
D. ALTER TABLE 职员 ADD 年末奖金 INT NULL

A.列的定义中必须包括数据类型;
C.题中要求为允许为空值,NOT NULL为不允许有空值,与题意不符;
D.int不属于货币数据类型,不符题意。

8.现在有一个学生表student,需要回收所有机器的nkw用户对学生表student所在数据库user的update和insert权限,则下列语句中能够实现这一功能的语句是()
A. revoke update,insert on user.* to ‘nkw’@‘%’;
B. revoke update,insert on *.* to ‘nkw’@‘%’;
C. revoke update,insert on user. from ‘nkw’@‘%’;*
D. revoke update,insert on *.* from ‘nkw’@‘%’;

回收表的操作功能语句 revoke ... on ... from
赋予权限的语句 grant ... on ... to...

9.下列哪个语句是授予用户SQLTest对数据库Sales的CUSTOMERS表的列cid、cname的查询权限()
A. grant select on cid,cname to SQLTest
B. grant select on cid,cname with SQLTest
C. grant select on CUSTOMERS(cid,cname) to SQLTest
D. grant select on CUSTOMERS(cid,cname) with SQLTest

GRANT<权限> on 表名(或列名) to 用户

10.在gameList表中(player_id, event_date)是主键,如何查找出每个player_id的第一次登录的时间(event_date)?

player_iddevice_idevent_dategames_played
111212020-03-015
111212020-01-026
212332020-09-031
322112020-01-210
322442020-03-025

A. SELECT player_id, min(event_date) as first_login FROM gameList GROUP BY player_id
B. SELECT player_id, min(device_id) as first_login FROM gameList GROUP BY player_id
C. SELECT player_id, event_date as first_login FROM gameList GROUP BY player_id WHERE min(event_date)
D. SELECT player_id, min(event_date) as first_login FROM gameList WHERE min(event_date) GROUP BY player_id

登录时间对应的字段是event_date,
第一次意为最早,用min()聚合函数,这是除求数字最小,也能求日期最早。
如果求最近一次,用max()函数。

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

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

12.已知数据表STU,现需创建视图view_s,显示所有男同学的信息。下列SQL语句正确的是()
A. CREATE VIEW AS SELECT * FROM STU
B. CREATE VIEW view_s AS SELECT * FROM STU WHERE 性别=‘男’
C. CREATE view_s SELECT * FROM STU WHERE 性别=‘男’
D. CREATE view_s AS SELECT * FROM STU

创建视图语句:create view 视图名 as select * from 表名 where 条件

13.Mysql中表student_table(id,name,birth,sex),查询重复姓名、重复次数,并按重复次数降序排列,正确的是()?
A. select name,count(*) as c1 from student_table
group by name
having c1 > 1
order by c1 desc ;

B. select name,count(*) as c1 from student_table
group by name
having c1 > 1
order by c1;

C. select name,count() as c1 from student_table
where count(
) > 1
group by name
order by c1 desc ;

D. select name,count(*) as c1 from student_table
group by name
where c1 > 1
order by c1 desc;

正确的顺序是:where......group by ......having......order by ;
如果是对group by聚合后的结果做筛选,需要用having,where是在聚合前做筛选;
order by 时如果不写desc、asc则默认是按照asc升序排列

14.下列选项关于函数的描述正确的是()
A. 用户定义函数可以用于执行修改数据库状态的操作
B. 用户定义函数属于数据库,可以在多个数据库下调用
C. 与系统函数一样,用户定义函数可以从查询中调用
D. 标量函数不可使用EXECUTE语句执行

A.用户定义函数不用于执行修改数据库状态的操作;
B.用户定义函数属于数据库,只能在该数据库下调用;
D.标量函数和存储过程一样,可以使用EXECUTE语句执行。

15.”确保事务可以多次从一个字段中读取相同的值,在此事务持续期间,禁止其他事务对此字段的更新”是对下列选项哪一个事务隔离级别的描述()
A. Read uncommitted
B. Read committed
C. Repeatable Read
D. Serializable

在标准SQL规范中,定义了4个事务隔离级别,不同的隔离级别对事务的处理不同。
● 未授权读取(Read Uncommitted):允许脏读取,但不允许更新丢失。如果一个事务已经开始写数据,则另外一个数据则不允许同时进行写操作,但允许其他事务读此行数据。该隔离级别可以通过“排他写锁”实现。
● 授权读取(Read Committed):允许不可重复读取,但不允许脏读取。这可以通过“瞬间共享读锁”和“排他写锁”实现。读取数据的事务允许其他事务继续访问该行数据,但是未提交的写事务将会禁止其他事务访问该行。
● 可重复读取(Repeatable Read):禁止不可重复读取和脏读取,但是有时可能出现幻影数据。这可以通过“共享读锁”和“排他写锁”实现。读取数据的事务将会禁止写事务(但允许读事务),写事务则禁止任何其他事务。
● 序列化(Serializable):提供严格的事务隔离。它要求事务序列化执行,事务只能一个接着一个地执行,但不能并发执行。如果仅仅通过“行级锁”是无法实现事务序列化的,必须通过其他机制保证新插入的数据不会被刚执行查询操作的事务访问到。
● 隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。

16.有一张persons表包含如下信息:
在这里插入图片描述
现要选取居住地址Address以’C’或’h’开头 或以 ‘et’ 结尾的所有数据,结果显示为:
在这里插入图片描述
下列MySQL查询语句正确的是:
A. SELECT * FROM persons WHERE Address REGEXP ‘[^Ch]|et$’;
B. SELECT * FROM persons WHERE Address REGEXP ‘^[Ch]et$’;
C. SELECT * FROM persons WHERE Address REGEXP ‘^[Ch]|et$’;
D. SELECT * FROM persons WHERE Address REGEXP ‘^[Ch]|[et]$’;

REGEXP正则表达式
^: 匹配输入字符串的开始位置
$: 匹配输入字符串的结束位置
[]: 匹配中括号里任意1|: 并集,就是或(or)

17.声明游标语法中的INSENSITIVE参数,表示声明一个静态游标。当发生下列选项中的哪一项时,游标将会自动设定INSENSITIVE选项()
A. 在SELECT语句中使用WHERE语句
B. 使用INNER JOIN
C. 所选取的任意表存在索引
D. 将实数值当作选取的列

A.SELECT语句中使用DISTINCTGROUP BYHAVING UNION语句时游标将会自动设定INSENSITIVE选项;
B.应为使用OUTER JOINC.应为所选取的任意表没有索引。

18.在SQL中语法规范中,having子句的使用下面描述正确的是:( )
A. having子句即可包含聚合函数作用的字段也可包括普通的标量字段
B. 使用having的同时不能使用where子句
C. having子句必须于group by 子句同时使用,不能单独使用
D. 使用having子句的作用是限定分组条件
E. Having子句和where子句是等同的
F. 如果select语句中没有聚合函数的使用,就不能使用having子句

having是在分组后过滤,where在分组前过滤,不冲突,可以同时使用
having是用来过滤的,group by是限定分组
select语句中没有聚合函数的使用时也可以用having
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值