数据库(MySQL)相关例题27道及答案解析

数据库(MySQL)相关例题27道及答案解析_第1张图片
一、单选题 (共计 18题)
1、(单选题)SQL语句分为DDL、DML、DQL、TCL、DCL,以下属于DML的是_______,是否_______事务。
A.drop 不支持
B.insert 支持
C.alter 支持
D.select 不支持
【正确答案】B
【答案解析】

此题目考查的是 对SQL语句的分类的了解
DDL 数据定义语言: create drop alter truncate 不支持事务
DML 数据操作语言: insert update delete 支持事务
DQL 数据查询语言: select 不支持事务
TCL 事务控制语言: commit rollback 等
DCL 数据控制语言: 分配用户权限

选项B正确。

2、(单选题)事务是数据库执行逻辑的基本工作单位。如果一个事务执行成功,则全部更新提交;
如果一个事务执行失败,则已做过的更新被恢复原状,好像整个事务从未有过这些更新,这样保持了数据库处于_______状态。
A.完整性
B.持久性
C.一致性
D.安全性
【正确答案】C
【答案解析】

此题目考查的是 事务的四大特性:

1、原子性 事务是数据库执行逻辑的工作单元,事务包括的所有操作,要么都做,要么都不做。
2、一致性 事务执行的结果是使数据库从一个一致性状态变成另一个一致性状态。 一致性与原子性是密切相关的。
3、隔离性 一个事务的执行不能被其他事务干扰。
4、持久性 一个事务一旦提交,它对数据库中数据的改变应该是永久性的。

3、(单选题)select语句中的条件,年龄between 22 and 26,表示年龄在22至26之间,且()
A.包括22岁和26岁
B.不包括22岁和26岁
C.包括22岁但不包括26岁
D.包括26岁但不包括22岁
【正确答案】A
【答案解析】

此题目考查的是 between...and... 在某两个数值之间, 包含and两边的数值 选项A正确。

4、(单选题)对于分页查询, 以下说法不正确的是( )
A.可以减轻服务器压力
B.对于程序开销极大
C.以提高用户体验
D.对于不同数据库有不同的SQL指令
【正确答案】B
【答案解析】无

5、(单选题)查询person表中,年龄(age)是25,28,30,22岁的所有信息()
A.select * from person having age=(25,28,30,22);
B.select * from person where age=(25,28,30,22);
C.select * from person where age in(25,28,30,22);
D.select * from person haveing age in(25,28,30,22);
【正确答案】C
【答案解析】

此题目考查的是 where子句(in)查询 查询字段的值为多个的时候可以使用in关键字 选项C正确。

6、(单选题)数据库DB,数据库系统DBS,和数据库管理系统DBMS三者之间的关系是()
A.DBS包含DB和DBMS
B.DBMS包含DB和DBS
C.DB包含DBS和DBMS
D.DBS就是DB,也就是DBMS
【正确答案】A
【答案解析】

此题目考查的是 DBS包含DB和DBMS

  • DBS(DataBase System):数据库系统,是采用了数据库技术的计算机系统,是一个实际可运行的、按照数据库方法存储、维护和向应用系统提供数据支持的系统,它是数据库、硬件和软件,以及数据库管理员的集合体。
  • DB(DataBase): 数据库,数据库实际上就是一个文件集合,本质就是一个文件系统,数据按照特定的格式存储到文件中,使用sql语言对数据进行增删改查操作。
  • DBMS(DataBase Management System):数据库管理系统,是指数据库系统中对数据进行管理的软件系统,用于建立,使用和维护数据库,对数据进行统一的管理和控制,用户通过DBMS访问数据库中的数据。

选项A正确。

7、(单选题)以下能够删除一列的是()
A.alter table tableName remove columnName;
B.alter table tableName drop columnName;
C.alter table tableName from columnName;
D.alter table tableName delete columnName;
【正确答案】B
【答案解析】

此题目考查的是 DDL 数据定义语言, 表的修改 删除表的字段 格式为: alter table 表名 drop 字段名; 选项B正确。

8、(单选题)已知一张表中的’姓名’列被定义为name varchar(10),则以下说法正确的是()
A.也可以定义为char(10),二者没有区别
B.如果存放中文字符最多可以存放5个
C.如果存放中文字符最多可以存放10个
D.如果输入字符长度短于10字节时用空白字符填满
【正确答案】B
【答案解析】

此题目考查的是 数据库数据类型字符串
char(m): m代表显示长度,长度不可变
varchar(m): 长度是可变的一个中文占两个字节 不是必须插入5个中文或10个英文

选项B正确。

9、(单选题)已知表

student(
  sname varchar(20), --'学生姓名'
  cname varchar(20), --'课程名'
  grade int --'成绩'
)

则下列()选项是正确的。
A.insert into student values(‘张三’,98,‘数学’);
B.insert into student values(‘张三’,‘数学’,98);
C.insert into student values(‘张三’,98,数学);
D.insert into student values(‘张三’,数学,98);
【正确答案】B
【答案解析】

此题目考查的是 DML 数据操作语言 插入数据 全表插入: 要求插入的数据的数量、顺序要和表字段的数量、顺序一致
格式: insert into 表名 values(值1,值2,值3,...);
选项B正确。

10、(单选题)已知一家公司可以雇佣多名员工为其进行工作,且每名员工只能与一家公司达成劳务关系,那么从公司的角度出发该公司与旗下员工之间的关系属于以下哪一种()
A.一对多
B.多对多
C.一对一
D.多对一
【正确答案】A
【答案解析】

此题目考查的是 表设计之关联关系 一对一: 有两张表A和B,A表中有一条数据对应B表中的一条数据称为一对一关系 一对多:
AB两张表中A表中一条数据对应B表中多条数据,并且B表中一条数据对应A表中一条数据,两张表的关系称为一对多或多对一关系 多对多:AB两张表,A表中的一条数据对应B表的多条数据,同时B表的一条数据对应A表的多条数据,这种关系称为多对多关系 选项A正确。

11、(单选题)已知员工表(emp),请查询出每个员工的姓名(name)和工资(sal),同时要求工资后面显示元,例如,8888元,正确的是()
A.select name,sal(元) from emp;
B.select name,concat(sal,‘元’) from emp;
C.select name,sal 元 from emp;
D.select name,concat(‘sal’,‘元’) from emp;
【正确答案】B
【答案解析】

此题目考查的是 字符串拼接函数 concat(a,b) 将a与b进行拼接,如果a为字段,则将a的值与后面的b拼接,如果a为常量值,则直接将常量值与后面的b拼接。 选项B正确。

12、(单选题)已知商品表

t_item(
  title varchar(20), --'商品名称'
  price double --'单价'
)

查询商品名中第二个字是"赠"字的商品及价格,则下列选项正确的是()
A.select title,price from t_item where title like '_赠%';
B.select title,price from t_item where title like '_赠%';
C.select title,price from t_item where title like '赠_%';
D.select title,price from t_item where title like '%赠_';
【正确答案】A
【答案解析】

此题目考查的是 like
_:代表单个未知字符
%:代表多个未知字符
举例: 以a开头 a%
以a结尾 %a
第二个字符是a _a%
包含a %a%
倒数第三个字符是a %a__
第二个和最后一个是a _a%a
选项A正确。

13、【单选题】现有学生表,课程表和成绩表,三表中的字段如下:
student表:id,student_name
course表:id,course_name
score表:student_id,course_id,score
前提:每个学生都会参加多门课程的考试,每门课程的成绩在score表中都是一条数据,现若要查询出平均分在60分以上的学生id和学生姓名以及平均分,以下哪个sql语句是正确的?
A.select student_id,student_name,avg(score) av from student s join score sc on s.id=sc.student_id;
B.select student_id,student_name,avg(score) av from student s join score sc on s.id=sc.student_id where av>60;
C.select student_id,student_name,avg(score) av from student s join score sc on s.id=sc.student_id where av>60 group by student_id;
D.select student_id,student_name,avg(score) av from student s join score sc on s.id=sc.student_id group by student_id having av>60;
【正确答案】D
【答案解析】

本题中:依据题意,要求查询出平均分在60分以上的学生信息,所以要先求出每个学生的平均分,即要按学生分组统计平均分,对应的sql语句为
select student_id,student_name,avg(score) av from student s join score sc on s.id=sc.student_id group by student_id;再对每个学生的平均分进行筛选,筛选出60分以上的,那么在最后添加having即可,选择D

14、【单选题】现有书目表book,包含字段:价格price(float),类别type(varchar);现在查询各个类别的平均价格,类别名称,以下语句正确的是?
A.select avg(price),type from book group by type
B.select count(price),type from book group by price
C.select avg(price),type from book group by price
D.select count(price),type from book group by type
【正确答案】A
【答案解析】

求平均值的函数为avg(),求平均价格,那么函数为avg(price),分析题目,得知,需要根据类别分类,所以用group by type

15、【单选题】分析下面的SQL语句,哪一部分引起错误?
select empno,sum(sal) ‘salary’ from emp where sal>1500 group by empno order by 2;
A.order by 2
B.from emp
C.where sal>1500
D.group by empno
【正确答案】A
【答案解析】

==order by子句后面应该指定的是列的名字,按照指定的列排序

16、【单选题】下列哪个语句能查询出MGR为NULL的员工:
A.SELECT ENAME FROM EMP WHERE MGR=NULL;
B.SELECT ENAME FROM EMP WHERE MGR IS NULL;
C.SELECT ENAME FROM EMP WHERE MGR=0;
D.SELECT ENAME FROM EMP WHERE MGR='';
【正确答案】B
【答案解析】

判断是否为空用is null,​​​​​​​不为空,用is not null

17、【单选题】有以下两个表,问下列sql语句的结果是什么()

Emp表

| emp_id | name | gender |
|   1    | 张丽 ||
|   2    | 王珂 ||
|   3    | 赵琦 ||

emp_dept表

| emp_id | name | dept_name |
|   1    | 张丽 |  财务部   |
|   3    | 赵琦 |  技术部   |

select e.*,ed.dept_name from emp e left join emp_dept ed on e.emp_id=ed.emp_id and e.name=ed.name;

A.

| emp_id | name | gender | dept_name 
| 1       | 张丽 || 财务部    |
| 2      | 王珂 || null      |
| 3      | 赵琦 || 技术部    | 

B.

| emp_id | name | gender | dept_name |
| 1       | 张丽 || 财务部    |
| 2      | 王珂 || 技术部    | 

C.

| emp_id | name | gender |
| 1       | 张丽 ||
| 2      | 王珂 ||
| 3      | 赵琦 || 

D.

| emp_id | name | gender | dept_name |
| 1       | 张丽 || 财务部    |
| 3      | 赵琦 || 技术部    | 

【正确答案】A
【答案解析】

本题考察左连接查询,左表中的所有数据都显示,若右表没有匹配的数据,用null进行匹配

18、【单选题】分析下面SQL语句,在什么情况下引起这个语句失败?

SELECT * FROM student WHERE id=
(SELECT id FROM student WHERE first_name='kate' AND last_name='henry');

A.在数据表中没有学生的名字是kate henry
B.数据表中学生的名字叫kate的多于一个
C.数据表中的学生的名字叫kate henry的多于一个
D.first_name和last_name的值在数据库中是小写的
【正确答案】C
【答案解析】

外查询的条件where id=(子查询),子查询的查询结果id的值只能有一个,如果多于一个,此时不能用 = ,而应该用in

数据库(MySQL)相关例题27道及答案解析_第2张图片


二、多选题 (共计 9 题)
19、(多选题)约束就是给表字段添加的限制条件,那么关于约束下列说法正确的是()
A.每个表中可以有多个unique约束,但是每个表只能有一个primary key约束
B.unique和primary key约束值都不能为null,值都不能重复
C.not null给字段添加非空约束,值不能为null
D.defautl 给字段设置默认值,当字段不赋值的时候,默认值生效
【正确答案】A,C,D
【答案解析】

此题目考查的是约束非空 not null

  • 添加非空约束的字段,值不能为null 唯一 unique
  • 添加唯一约束的字段,值不能重复,可以为null 主键约束 primary key
  • 添加了主键约束的字段,值不能为null也不能重复 默认约束 default
  • 给字段设置默认值,当字段不赋值的时候,默认值生效

选项ACD正确。

20、(多选题)数据库中有两张表,员工表emp(id int,ename varchar(10),sal int,deptid int)和部门表dept(id int,dname varchar(10)),现在想要查询所有员工的姓名和其所对应的部门名称,下列正确的是()
A.select e.ename,d.dname from emp e left join dept d on e.deptid=d.id;
B.select e.ename,d.dname from emp e right join dept d on e.deptid=d.id;
C.select ename,dname from emp e right join dept d on e.deptid=d.id;
D.select ename,dname from emp e left join dept d on e.deptid = d.id;
【正确答案】A,D
【答案解析】

此题目考查的是 外连接 基本语法:
左表 left/right join 右表 on 左表.字段=右表.字段;
分为两种 左外连接, 右外连接:
left join 左外连接----以join左边表为主表查询所有数据,右边表只查询有关系的数据
right join 右外连接----以join右边表为主表查询所有数据,左边表只查询有关系的数据 选项AD正确。

21、(多选题)数据库中有两张表,员工表emp(id int,ename varchar(10),sal int,deptid int)和部门表dept(id int,dname varchar(10)),员工表和部门表的id是主键自增的,现在想要查询每个员工姓名及所对应的部门名称,下列正确的是()
A.select emp.ename,dept.dname from emp,dept where emp.id=dept.deptid;
B.select e.ename,d.dname from emp e join dept d on e.id=d.deptid;
C.select emp.ename,dept.dname from emp,dept where emp.deptid=dept.id;
D.select e.ename,d.dname from emp e join dept d on e.deptid=d.id;
【正确答案】C,D
【答案解析】

此题目考查的是 等值连接格式:

sql select * from A,B where A.x=B.x and A.y=abc

内连接格式:

sql select * from A join B on A.x=B.x where A.y=abc

例如:查询教研部的员工姓名

select emp.ename,dept.dname from emp,dept where emp.deptid=dept.id and dept.dname='教研部';
select e.ename,d.dname from emp e join dept d on e.deptid=d.id where d.dname='教研部';

选项CD正确。

22、(多选题)下列关于视图说法正确的是()
A.表和视图都是数据库中的对象
B.创建视图时名称可以和表名相同
C.视图是一张虚拟的表
D.原表的数据改变时,视图中的数据也会随之改变
【正确答案】A,C,D
【答案解析】

此题目考查的是 对视图的理解
视图: 数据库中存在多种对象,表和视图都是数据库中的对象,创建视图时名称不能和表名重名,视图实际上是一段sql查询语句的映射,可以理解成视图是一张虚拟的表,表中的数据会随着原表的改变而改变
选项ACD正确。

23、(多选题)已知员工表(emp),请查询出部门员工工资(sal)的平均值大于2000的部门编号(deptno)以及部门平均工资,以下正确的是()
A.select deptno,avg(sal) a from emp group by deptno having a>2000;
B.select deptno,avg(sal) a from emp having a>2000 group by deptno;
C.select deptno,avg(sal) a from emp group by deptno where a>2000;
D.select deptno,avg(sal) from emp group by deptno having avg(sal)>2000;
【正确答案】A,D
【答案解析】

此题目考查的是 分组查询 group by 分组查询通常和聚合函数结合使用 查询条件中每个xxx 就以xxx作为分组的条件 having 有条件的分组统计 where后面只能对普通字段进行筛选
having写在 group by 后面,通常是和group by结合使用,对分组后的查询结果进行过滤 普通字段的条件写在where后面,聚合函数条件写在having后面,having写在group by后面 选项AD正确。

24、(多选题)查询出学生表(student)中,数学(math)成绩最高的学生姓名(name),以下正确的是()
A.select name from student where math is (select max(math) from student);
B.select name from student where math (select max(math) from student);
C.select name from student where math=(select max(math) from student);
D.select name from student where math in (select max(math) from student);
【正确答案】C,D
【答案解析】此题目考查的是子查询

分析如下: 假如数学最高成绩99
1. 首先查询出数学最高成绩
select max(math) from student; 99
2. 然后查寻数学成绩等于99的学生姓名
select name from student where math=99;
select name from student where math in(99);

选项CD正确

25、(多选题)已知商品表

t_item(
  title varchar(20), --'商品名称'
  price double --'单价'
)

查询表中所有商品,要求按单价升序进行排序,每页显示3条数据,且显示第三页的数据,则下列选项正确的是()
A.select title,price from t_item order by price desc limit 3,6;
B.select title,price from t_item order by price limit 3,6;
C.select title,price from t_item order by price limit 6,3;
D.select title,price from t_item order by price asc limit 6,3;
【正确答案】C,D
【答案解析】

此题目考查的是 —limit 分页查询
limit 跳过条数,查询条数
排序 order by 格式: order by 字段名 默认升序,
指定升序是:asc 降序:desc
选项CD正确。

26、(多选题)已知员工表(emp),现要求把员工表中,没有奖金(bonus)的员工的奖金项修改为零,符合要求的是()
A.update emp set bonus=ifnull(bonus,0);
B.update emp set bonus=ifnull(null,bonus);
C.update emp set bonus=0 where bonus is null;
D.update emp set bonus=0 where bonus=null;
【正确答案】A,C
【答案解析】

此题目考查的是 函数 ifnull() 格式: bonus=ifnull(x,y)
判断x是否为null 如果是 bonus=y, 如果不是 bonus=x;
选项AC正确。

27、(多选题)下列关于索引说法正确的是()
A.索引创建的越多越好
B.索引创建需谨慎
C.索引是用来提高查询速度的技术,类似一个目录
D.无论表中有多少数据,创建索引,就可以提高查询效率
【正确答案】B,C
【答案解析】

此题目考查的是 什么是索引

  • 索引是用来提高查询速度的技术,类似一个目录
  • 索引会占用磁盘空间,所以创建时需谨慎,根据查询需求和表结构来决定创建什么索引
  • 索引需要建立在大量数据的表中,如果数据量不够大,有可能会降低查询效率

选项BC正确。


未完,待续 >>>

你可能感兴趣的:(笔记)