一、 单选题
1.查看employees表的表结构
哪个选项能够统计出有李姓(LAST_NAME )员工的部门数量?
A:
SELECT COUNT(*) FROM employees WHERE last_name='李';
B:
SELECT COUNT(dept_id) FROM employees WHERE last_name='李';
C:
SELECT DISTINCT(COUNT(dept_id)) FROM employees WHERE last_name='李';
D:
SELECT COUNT(DISTINCT dept_id) FROM employees WHERE last_name='李';
E:
SELECT UNIQUE(dept_id) FROM employees WHERE last_name='李';
答案:D
解析:要查询几个部门里有姓李的员工,首先要先查询出姓李的员工所在的部门ID(dept_id),然后把用DISTINCT 去除重复的dept_id,再把结果计数(count)即可。
2.关于右外连接查询的说法不正确的是:
A:两表进行右外连接查询和左外连接查询查询出的结果都是一样的
B:右外连接查询是以右侧的表为主表
C:右外连接查询可以和左外连接查询相互转换
D: 右外连接查询查询时右表中的记录会全部显示
答案:A
解析:
左连接是已左边表中的数据为基准,若左表有数据右表没有数据,则显示左表中的数据右表中的数据显示为空。
左联接的结果集包括 LEFT 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。
右联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。
3.子查询会被在哪种情况下使用?()
A:创建数据组
B:按特定顺序排序数据
C:将数据转换为不同的格式
D:基于未知条件检索数据
参考答案:D
解析:
当where条件未知,但是知道与筛选条件相关的条件时,会用子查询
4.在数据库中,user为用户表,id为用户编号,name为用户名,age为年龄字段。下面关于update user set name=‘tom’,age=21 where id=1语句说法正确的是:
A: 把用户名为tom的年龄改为21
B: 把用户编号为1的记录用户名修改为tom年龄修改为21
C: 把所有用户记录的用户名修改为tom年龄修改为21
D: 语法错误
参考答案:B
解析:
update user set name=‘tom’,age=21 where id=1语句语法没有问题,意思为: 把用户编号为1的记录用户名修改为tom年龄修改为21
5.emp的表结构如下:
用下面的SQL语句查询数据库,结果会以什么顺序排列?
SELECT empname,hire_date HIREDATE, salary
FROM EMP
ORDER BY hire_date;
A:随机排列
B:以hire_date升序排列
C:以hire_date降序排列
D:以字母升序排列
E:以字母降序排列
参考答案:B
解析:
题目中的SQL语句是以hire_date排序的,默认不写排序方式时结果以升序排列
6.关系模型的数据结构是()
A:数组结构
B:图结构
C:二维结构
D:树结构
E:链表结构
参考答案:C
解析:
关系模型的数据结构是二维结构
7.哪个SQL语句生成计算列SALARY * 12的别名—年薪?
A:
SELECT ename, salary*12 'Annual Salary' FROM employees;
B:
SELECT ename, salary*12 "Annual Salary" FROM employees;
C:
SELECT ename, salary*12 AS Annual Salary FROM employees;
D:
SELECT ename, salary*12 AS INITCAP("ANNUAL SALARY") FROM employees;
参考答案:B
解析:
作为列别名的一些注意事项:
1、列别名最大长度为30个字节(一个汉字2个字节)
2、列别名可以包含数字、小括号、特殊字符,有空格的多个单词组成的别名必须用双引号引起来
8.观察下列表结构
经理要求你查询出所有部门的信息,这些信息包括:员工的姓名,部门ID,部门名称和部门所在城市,有可能部门没有雇员,或者部门是尚未被分配到地点。下列选项能满足要求的是:
A:
SELECT e.last_name, d.department_id,
d.department_name, l.city
FROM departments d
RIGHT OUTER JOIN employees e
ON d.department_id = e.department_id
RIGHT OUTER JOIN locations l
ON d.location_id = l.location_id;
B:
SELECT e.last_name, d.department_id,
d.department_name, l.city
FROM departments d
FULL OUTER JOIN employees e
ON d.department_id = e.department_id
FULL OUTER JOIN locations l
ON d.location_id = l.location_id;
C:
SELECT e.last_name, d.department_id,
d.department_name, l.city
FROM departments d
LEFT OUTER JOIN employees e
ON d.department_id = e.department_id
LEFT OUTER JOIN locations l
ON d.location_id = l.location_id;
D:
SELECT last_name, department_id,
department_name, city
FROM departments d
NATURAL JOIN employees e
NATURAL JOIN locations l;
参考答案:C
解析:
很明显需要多表连接查询,按要求需要将departments作为基表
9.下面哪个是Oracle的普通管理员?
A:sys
B:system
C:scott
D:sh
参考答案:B
解析:
sys:超级管理员
system:普通管理员
scott:普通用户
sh:海量数据用户(大数据用户)
10.观察EMPLOYEES表的表结构
哪个SQL语句能够查询出最低工资低于5000,最高工资超过15000的部门的部门ID、部门员工的最低工资、最高工资?
A:
SELECT dept_id, MIN(salary), MAX(salary)
FROM employees
WHERE MIN(salary) < 5000 AND MAX(salary) > 15000;
B:
SELECT dept_id, MIN(salary), MAX(salary)
FROM employees
WHERE MIN(salary) < 5000 AND MAX(salary) > 15000
GROUP BY dept_id;
C:
SELECT dept_id, MIN(salary), MAX(salary)
FROM employees
HAVING MIN(salary) < 5000 AND MAX(salary) > 15000;
D:
SELECT dept_id, MIN(salary), MAX(salary)
FROM employees
GROUP BY dept_id
HAVING MIN(salary) < 5000 AND MAX(salary) > 15000;
E:
SELECT dept_id, MIN(salary), MAX(salary)
FROM employees
GROUP BY dept_id, salary
HAVING MIN(salary) < 5000 AND MAX(salary) > 15000;
参考答案:D
解析:
根据题意,首先要对部门分组,然后过滤出最低工资低于5000、最高工资高于15000的部门
11.having , where , group by 的正确执行顺序是( )
A:having,where,group by
B:group by,having,where
C:where,having,group by
D:where ,group by,having
参考答案:D
解析:
查询中用到的关键词主要包含六个,并且他们的顺序依次为 select–from–where–group by–having–order by
12.有A表(5条记录)和B表(7条记录),执行"select * from A,B"以后,产生的记录为( )条
A:5
B:7
C:12
D:35
参考答案:D
13.您应该使用哪个子句排除组结果?
A:WHERE
B:HAVING
C:RESTRICT
D:GROUP BY
E:ORDER BY
参考答案:B
解析:
分组后再筛选用having
14.在下列哪种情况下你会选择使用全连接查询()
A:两个表都具有NULL值。
B:您想要一个表中的所有不匹配的数据。
C:您想要两个表中的所有匹配数据。
D:您需要两个表中的所有不匹配的数据。
E:其中一个表具有比另一个更多的数据。
F:您想要一个表中匹配或不匹配的数据。
参考答案:D
解析:
全连接可以查询出连接的表中匹配和不匹配的数据
15.以下SQL语句,能正确执行的是( )
A:
select e.department_id,sum(e.salary),round(avg(e.salary),2) "AvgSalary"
from employees e
order by e.department_id
group by e.department_id
B:
select e.department_id, e.salary
from employees e
group by e.department_id
order by e.department_id
C:
select sum(e.salary),round(avg(e.salary),2) "AvgSalary"
from employees e
group by e.department_id
order by e.department_id
D:
select e.department_id,sum(e.salary),round(avg(e.salary),2) "AvgSalary"
from employees e
group by e.department_id
order by e.department_id
参考答案:D
16.下面属于DDL的是:
A:commit
B:create
C:select
D:update
参考答案:B
解析:
SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL。
1、数据查询语言DQL
数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE
子句组成的查询块:
SELECT <字段名表>
FROM <表或视图名>
WHERE <查询条件>
2、数据操纵语言DML
数据操纵语言DML主要有三种形式:
1)插入:INSERT
2)更新:UPDATE
3)删除:DELETE
3、数据定义语言(DDL Data Definition):create创建、alter更改、truncate截断、drop删除
4、DCL(Data Control Language,数据控制语言):用来授予或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果。如:
grant:授权;
revoke:取消权限;
TCL(Transaction Control Language,事物控制语言):
用来对事务进行管理。 如:
COMMIT : 保存已完成事务动作结果
SAVEPOINT : 保存事务相关数据和状态用以可能的回滚操作
ROLLBACK : 恢复事务相关数据至上一次COMMIT操作之后
17.基于下列两张表
查询出所有员工的所有信息,无论该员工是否被分配了部门
A:
SELECT last_name, department_nameFROM employees NATURAL JOIN departments;
B:
SELECT last_name, department_name FROM employees JOIN departments ;
C:
SELECT last_name, department_name
FROM employees e JOIN departments d
ON (e.department_id = d.department_id);
D:
SELECT last_name, department_name
FROM employees e
RIGHT OUTER JOIN departments d ON (e.department_id = d.department_id);
E:
SELECT last_name, department_name
FROM employees FULL JOIN departments
ON (e.department_id = d.department_id);
F:
SELECT last_name, department_name
FROM employees e LEFT OUTER
JOIN departments d ON (e.department_id = d.department_id);
参考答案:F
解析:
观察employees表可以发现,有些员工并没有被分配部门,所以想要查询出所有员工的所有信息,只能用外连接,将employees作为一个基表,departments没有与之匹配的可以用null代替。
18.关于等值连接说法正确的是()
A:通过等值连接最多只能关联两张表
B:通过等值连接最多只能关联两列
C:在查询语句中把等值连接的条件写在select或from子句里
D:通过等值连接可以关联2张表,作为关联条件的列必须是主键和外键
E:通过等值连接可以关联n张表(这些表都具有单列主键),但是最少要有n-1个关联条件
参考答案:E
解析:
等值连接对关联表的数量没有限制,只要满足关联条件大于等于表的数量-1即可
19.SQL中,允许使用通配符进行字符串的匹配操作,其中%可以表示()
A:零个字符
B:一个字符
C:多个字符
D:以上答案都对
参考答案:D
20.对SQL语句的描述中,下列说法不正确的有
A: 使用关键字distinct消除冗余
B: where用于指定筛选条件
C: sql关键字区分大小写
D: 字符串比较按照字典排序
参考答案:C
解析:
sql不区分大小写
二、 多选题
1.关于子查询说法正确的有?(请选出两项)
A:子查询只应检索一行。
B:子查询可以检索零个或多个行。
C:子查询只能在SQL-select语句中使用。
D:子查询不能被多于两个级别嵌套。
E:子查询不能在使用组函数的SQL查询语句中使用。
F:当子查询与外部SQL语句中的不等式比较运算符一起使用时,子查询的SELECT子句中的列只能包含一列。
参考答案:BF
解析:
A.子查询与普通的查询一样,可以查询多行数据;
C.子查询可以用在select、update、insert中;
D.子查询的嵌套不受层数的限制;
E.子查询的使用条件不受组函数的影响。
2.关于where和having子句说法正确的有?(请选出两项)
A:WHERE子句可用于限制行和组。
B:WHERE子句只能用于限制行。
C:HAVING子句可用于限制行和组。
D:HAVING子句只能用于限制组。
E:如果查询使用HAVING子句,则不能在查询中使用WHERE子句。
F:HAVING子句不能在子查询中使用。
参考答案:BD
解析:
where只能用于行数据的筛选;having只能用于组数据的筛选。
3.在哪种情况下,会用到外连接查询?(请选出两项)
A:要连接的表具有NOT NULL列。
B:要连接的表只有匹配的数据
C:要连接的列具有NULL值。
D:要连接的表只有不匹配的数据。
E:要连接的表具有匹配和不匹配的数据。
F:仅当表具有主键 - 外键关系时
参考答案:CE
解析:
外连接是在一个表的基础上,匹配另一个表,当另一张表没有与之匹配的数据时以空值代替。
4.关于子查询下列叙述正确的有?(请选出三项)
A:单行子查询只能检索一个列和一行
B:单行子查询只能检索一行,但能检索许多列
C:多行子查询可以检索多行、多列
D:多行子查询结果可以被用来作为>”运算符的比较项
E:单行子查询可以使用IN运算符
F:多行子查询结果可以使用“=”来和别的值比较
参考答案:BCE
解析:
E选项看似不正确,但是细想一下,IN的子句即使是一个值也没问题,在这里IN的效果无非和“=”是一样的。
5.下列sql语句正确的有?(选出正确的两项)
A:update user name=‘张三’,age=22 where id=1
B: update user set age=22,name=‘张三’ where id=1
C: update user set name=‘张三’,age=18 where id=1
D: update from user set name=‘张三’,age=20 where id=1
参考答案:BC
解析:
Update语句用于修改表中的数据。 语法: UPDATE 表名称 SET 列名称 = 新值,列名称2 = 新值2… WHERE 列名称 = 某值
6.根据下表
子查询有效的是?(请选出三项)
A:
SELECT *
FROM employees
where salary > (SELECT MIN(salary)
FROM employees
GROUP BY department_id);
B:
SELECT *
FROM employees
WHERE salary = (SELECT AVG(salary)
FROM employees
GROUP BY department_id);
C:
SELECT distinct department_id
FROM employees
WHERE salary > ANY (SELECT AVG(salary)
FROM employees
GROUP BY department_id);
D:
SELECT department_id
FROM employees
WHERE salary > ALL (SELECT AVG(salary)
FROM employees
GROUP BY department_id);
E:
SELECT last_name
FROM employees
WHERE salary > ANY (SELECT MAX(salary)
FROM employees
GROUP BY department_id);
F:
SELECT department_id
FROM employees
WHERE salary > ALL (SELECT AVG(salary)
FROM employees
GROUP BY AVG(SALARY));
参考答案:CDE
解析:
A.选项子查询的结果有三个,用>运算符会报错;
B.选项子查询的结果有三个,用=运算符会报错;
C.>ANY(子查询),>子查询的某一个结果
D.同上
E.>All(子查询),>子查询的所有结果,即大于子查询结果的最大值
F.错在分组函数GROUP BY的值不能是组函数