数据库SQL习题练习Day7

1.检索所有比“王华”年龄大的学生姓名、年龄和性别。正确的SELECT语句是()
A. SELECT SN,AGE,SEX FROM S
WHERE AGE>(SELECT AGE FROM S
WHERE SN=“王华”)

B. SELECT SN,AGE,SEX
FROM S
WHERE SN="王华"
C. SELECT SN,AGE,SEX FROM S
WHERE AGE>(SELECT AGE
WHERE SN=“王华”)
D. SELECT SN,AGE,SEX FROM S
WHERE AGE>王华.AGE

先找到王华的年龄:
SELECT AGE FROM S WHERE SN="王华"
然后在遍历表,选出年龄比他大者:
SELECT SNAGESEX FROM S
WHERE AGE > (SELECT AGE FROM S WHERE SN="王华")

2.已知在某期刊在线投稿审稿平台投稿,需要先注册作者信息,作家信息表author(作者编号aid,作者姓名aname,作者笔名ausername,作者地址aaddress,作者邮箱aemail)则下列语句正确的是()
A. INSERT INTO author (aid,aname,ausername,aaddress,aemail)
VALUES (‘D770’,‘张三’,‘西泽梦路’,‘123456@126.com’)
B. INSERT INTO author
VALUES (‘D770’,‘张三’,‘西泽梦路’,‘123456@126.com’)
C. INSERT INTO author (aid,aname,ausername,aemail)
VALUES (‘D770’,‘张三’,‘西泽梦路’,‘123456@126.com’)

D. INSERT INTO author (aname,ausername,aid,aemail)
VALUES (‘D770’,‘张三’,‘西泽梦路’,‘123456@126.com’)

1.插入的值的类型要与列的类型一致或兼容
INSERT INTO beauty(id,NAME,sex,borndate,phone,photo,boyfriend_id)
VALUES(1,'张三','男','2020-4-23','1898888888',NULL,2);

2.不可以为null的列必须插入值。可以为null的列可插入NULL值、也可直接忽略不管不写
写法一:写列名与NULLINSERT INTO beauty(id,NAME,sex,borndate,phone,photo,boyfriend_id)
VALUES(1,'张三','男','2020-4-23','1898888888',NULL,2);
写法二:列名与值皆忽略,自动加null
INSERT INTO beauty(id,NAME,sex,phone)
VALUES(2,'李四','女','1388888888');

3.列的顺序可以在语句内调换,但要上下对应
INSERT INTO beauty(NAME,sex,id,phone)
VALUES('王五','女',20,'1874561236');

4.列数和值的个数必须一致,写了列名必须写值
INSERT INTO beauty(NAME,sex,id,phone)
VALUES('赵武','男',22,'1385624521');

5.可以省略列名,默认所有列,而且列的顺序和表中列的顺序一致
INSERT INTO beauty
VALUES(18,'张飞','男',NULL,'119',NULL,NULL);

3.SQL中,下面对于数据定义语言DDL描述正确的是()
A. DDL关心的是数据库中的数据
B. 联盟链
C. 控制对数据库的访问
D. 定义数据库的结构

DDL(Data Definition Language)数据库定义语言
    用于定义SQL模式、基本表、视图和索引的创建和撤消操作
    DDL不需要commit. eg. CREATE ALTER DROP TRUNCATE COMMENT RENAME
DML(Data Manipulation Language)数据操纵语言
	数据操纵分成数据查询和数据更新两类。数据更新又分成插入、删除、和修改三种操作。
    DML需要commit. eg. SELECT INSERT UPDATE DELETE MERGE CALL EXPLAIN PLAN LOCK TABLE
DCL(Data Control Language)数据库控制语言  授权,角色控制等
	包括对基本表和视图的授权,完整性规则的描述,事务控制等内容。
    GRANT 授权, REVOKE 取消授权
TCL(Transaction Control Language)事务控制语言
	定义数据库的访问控制权限和安全级别;
    SAVEPOINT 设置保存点, ROLLBACK  回滚, SET TRANSACTION

4.下列选项中关于数据库事务的特性描述正确的是()
A. 事务允许继续分割
B. 多个事务在执行事务前后对同一个数据读取的结果是不同的
C. 一个事务对数据库中数据的改变是暂时的
D. 并发访问数据库时,各并发事务之间数据库是独立的

事务是最小的执行单位,不允许分割;
执行事务前后,数据保持一致,对同一数据读取的结果相同;
一个事务被提交后对数据库中数据的改变是持久的。

5.要将employee 的表名更改为 employee_info,下面MySQL语句正确的是:
A. ALTER TABLE employee RENAME employee_info;
B. ALTER TABLE employee MODIFY employee_info;
C. ALTER TABLE employee ALTER employee_info;
D. ALTER TABLE employee CHANGE employee_info;

RENAME用于表的重命名:RENAME  <NAME>RENAME  TO  <NAME>
MODIFY用于字段类型的修改:MODIFY  COLUMN   <列名>  <类型>
ALTER用于对字段类型、默认值的修改:ALTER  COLUMN  <列名>  <类型>    SET  DEFAULT  <默认值>
CHANGE用于对列名及类型的修改:CHANGE  COLUMN  <旧列名>  <新列名>  <类型>

表重新命名:ALTER TABLE 旧表名 to 新表名;
列重新命名:ALTER TABLE 表名 CHANGE 旧字段 新字段 列数据类型;

6.修改表test_tbl字段i的缺省值为1000,可以使用SQL语句( )
A. ALTER TABLE test_tbl ALTER i SET DEFAULT 1000;
B. ALTER TABLE test_tbl i SET DEFAULT 1000;
C. ALTER TABLE test_tbl MODIFY i SET DEFAULT 1000;
D. ALTER TABLE test_tbl CHANGE i SET DEFAULT 1000;

修改表:ALTER TABLE 表名 修改选项 。选项集合:
{ ADD COLUMN <列名> <类型> -- 增加列
| CHANGE [COLUMN] <旧列名> <新列名> <新列类型> -- 修改列名或类型
| ALTER [COLUMN] <列名> { SET DEFAULT <默认值> | DROP DEFAULT } -- 修改/删除 列的默认值
| MODIFY [COLUMN] <列名> <类型> -- 修改列类型
| DROP [COLUMN] <列名> -- 删除列
| RENAME TO <新表名> -- 修改表名
| CHARACTER SET <字符集名> -- 修改字符集
| COLLATE <校对规则名> } -- 修改校对规则(比较和排序时用到)

7.已知数据表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 条件

8.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升序排列。

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

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

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

在标准SQL规范中,定义了4个事务隔离级别,不同的隔离级别对事务的处理不同。
● 未授权读取(Read Uncommitted):读未提交是事务隔离级别的最低级别;该隔离级别可以通过“排他写锁”实现。
● 授权读取(Read Committed):读已提交,可避免脏读情况发生;这可以通过“瞬间共享读锁”和“排他写锁”实现。
● 可重复读取(Repeatable Read):禁止不可重复读取和脏读取,但是有时可能出现幻影数据。这可以通过“共享读锁”和“排他写锁”实现。
● 序列化(Serializable):最严格的事务隔离级别,要求所有事物被串行执行,不能并发执行,可避免脏读、不可重复读,幻读情况的发生。
● 隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。优先考虑把Read Committed,它能够避免脏读取,具有较好的并发性能。

11.有一张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]$’;

MySQL 中使用 REGEXP 来操作正则表达式的匹配,其中
^ 该符号表示匹配输入字符串的开始位置;
$ 表示匹配输入字符串的末尾位置;
[...] 表示匹配所包含的任意一个字符;
[^...]表示不能匹配括号内的任意单个字符;
x|y 这条竖线表示匹配 x 或匹配 y。

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

当遇到以下情况发生时,游标将自动设定INSENSITIVE 选项。
● 在SELECT 语句中使用DISTINCTGROUP BYHAVING UNION 语句;
● 使用OUTER JOIN;
● 所选取的任意表没有索引;
● 将实数值当作选取的列。

13.在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;

14.下面哪一个是MySQL查询语句的正确执行顺序:
A. SELECT —> FROM(including JOINs) —> WHERE —> GROUP BY —> HAVING —> DISTINCT —> ORDER BY —> LIMIT/OFFSET
B. SELECT —> DISTINCT —> FROM(including JOINs) —> WHERE —> GROUP BY —> HAVING —> ORDER BY —> LIMIT/OFFSET
C. FROM(including JOINs) —> WHERE —> GROUP BY —> HAVING —> SELECT —> DISTINCT —> ORDER BY —> LIMIT/OFFSET
D. FROM(including JOINs) —> WHERE —> GROUP BY —> HAVING —> DISTINCT —> SELECT —> ORDER BY —> LIMIT/OFFSET

form -join-on-where-group by-avg/sum-having-select-distinct-group by-limit

15.假设牛客网上有一份绝密文件存于某台机器的secretData数据库中的某个表里面,现在出于数据安全的考虑,对于新创建的用户都只能拥有该机器的登录权限,而不能拥有数据库的其他权限,那么新创建nkw用户满足这一要求的语句是()
A. grant usage on *.* with ‘nkw’@‘%’;
B. grant usage on secretData.* to ‘nkw’@‘%’;
C. grant usage on secretData.* with ‘nkw’@‘%’;
D. grant usage on *.* to ‘nkw’@‘%’;

给数据库赋予登录权限的语句: grant usage on ... to

16.有订单表orders,包含字段用户信息userid,字段产品信息productid,以下语句能够返回至少被订购过两次的productid?()
A. select productid from orders where count(productid)>1
B. select productid from orders where max(productid)>1
C. select productid from orders where having count(productid)>1 group by productid
D. select productid from orders group by productid having count(productid)>1

命令顺序为:select, from, where, group by, having, order by, limit

17.表结构如下:

CREATE TABLE `score` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
   `sno` int(11) NOT NULL,
   `cno` tinyint(4) NOT NULL,
   `score` tinyint(4) DEFAULT NULL,
   PRIMARY KEY (`id`)
 ) ;

以下查询语句结果一定相等的是()
A. SELECT sum(score) / count(*) FROM score WHERE cno = 2;
B. SELECT sum(score) / count(id) FROM score WHERE cno = 2;
C. SELECT sum(score) / count(sno) FROM score WHERE cno = 2;
D. SELECT sum(score) / count(score) FROM score WHERE cno = 2;
E. SELECT sum(score) / count(1) FROM score WHERE cno = 2;
F. SELECT avg(score) FROM score WHERE cno = 2;
正确答案:ABCE;DF

count(*)包括了所有列,相当于行数,在统计结果的时候,不会忽略某些列值为NULL的行。 
count(1)用1代表代码行,忽略所有列的值,在统计结果的时候,统计所有行,效果同count(*)count(列名)只包括列名对应一列,在统计结果的时候,会忽略列值为空的行。 
本题中只有score列可能为空,其他列均设置了NOT NULL,因此只有count(score)和avg(score)会忽略score为空的列
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值