@BCKou
选择题
1、下列哪个选项能够用来过滤掉组函数返回的行记录( )
A ORDER BY
B WHERE
C 不能过滤掉组函数返回的行记录
D HAVING
D
2、下列SQL是什么含义:( )
SELECT empno FROM emp WHERE comm=0.5 or sal>2300
A 返回那些工资的50%大于2300的员工信息
B 运行时错误
C 语法错误
D 返回那些奖金为50%或者工资大于2300的员工信息
D
3、SELECT语句的执行顺序是( )
(1)select (2)from (3)where (4)group by (5)having (6)order by
A 234561
B 234516
C 124563
D 123456
B
4、查询语句SELECT ROUND(13.57),ROUND(13.57,1),ROUND(13.57,-1),TRUNC(13.57,-2) FROM DUAL 返回结果,正确的是( )
A 13.57,13.6,10,13
B 13.6,13.5,11,13
C 14,13.6,10,0
D 13,13.5,14,0
C
5、查询语句SELECT SUBSTR(‘Hello World’,4,5) FROM DUAL;返回结果,正确的是( )
A lo Wo
B World
C lloWo
D loWor
A
6 、语句WHERE SAL BETWEEN 1000 AND 4000与下列哪个子句等价( )
A WHERE SAL>=1000 AND SAL<=4000
B WHERE SAL>=1000 AND SAL<4000
C WHERE SAL>1000 AND SAL<4000
D WHERE SAL>=1000 OR SAL<=4000
A
7 、关于模糊查询中通配符"_"描述正确的是( )
A "_"代表一个字符
B "_"代表多个字符
C "_“不能与”%"一同使用
D "_"代表零个或多个字符
A
8 、下面哪个SQL语句可以查询出名字当中有"A%B"这样的员工( )
A select * from emp where ename like ‘%A\%B%’ escape ‘’;
B select * from emp where ename like ‘%A@%B%’ escape ‘@’;
C select * from emp where ename like ‘%A%B%’ escape ‘%’;
D select * from emp where ename like ‘%A@%B%’ escape ‘@’;
D
9、ORACLE中,用来判断列值是否为空的操作符是( )
A ==NULL
B IS NULL
C AS NULL
D NULLIS
B
10、分析以下SQL 命令:
SELECT price FROM inventory
WHERE price BETWEEN 1 AND 50 AND (price IN(55, 30, 95));
命令执行后的price输出的非空结果是( )
A 55
B 30
C 95
D 50
B
11、使用HAVING子句也可以进行条件查询,以下选项说法是正确的是( )
A HAVING子句和WHERE子句相同
B HAVING子句用于行的条件查询
C HAVING子句用于已分组结果的条件查询
D 以上皆非
C
12、SQL语言中用来创建、删除及修改数据库对象的部分被称为( )
A 数据库控制语言(DCL)
B数据库定义语言(DDL)
C数据库操纵语言(DML)
D数据库事务处理语言(TPL)
B
DML 是针对数据的创建、删除及修改
13、语句SELECT ename,sal FROM emp WHERE sal<(SELECT min(sal) FROM emp)+1000;的作用是:( )
A 显示工资低于1000元的雇员信息
B 将雇员工资小于1000元的工资增加1000后显示
C 显示超过最低工资1000元的雇员信息
D 显示不超过最低工资1000元的雇员信息
D
14、HAVING子句中应后跟( )
A、行条件表达式 B、组条件表达式 C、视图序列 D、列名序列
B
15、下面哪条SQL语句将为计算列SAL*12生成别名Annual Salary( )。
A SELECT ename,sal*12 ‘Annual Salary’ FROM emp;
B SELECT ename,sal*12 “Annual Salary” FROM emp;
C SELECT ename,sal*12 AS Annual Salary FROM emp;
D SELECT ename,sal*12 AS INITCAP(“Annual Salary”) FROM emp;
####???
B
二、语句编写题
1、查询公司员工编号最小的员工姓名、工资和入职时间、
select ename, sal, hiredate
from emp
where empno = (select min(empno)
from emp);
2、查询和20号部门的员工入职年份和工作相同的员工姓名,工资和工作
select e1.ename, e1.sal, e1.job
from emp e1
where (e1.hiredate, e1.job) = (select e2.hiredate, e2.job
from emp e2
where e2.deptno = 20
and e2.hiredate = e1.hiredate
and e2.job = e1.job);
select ename,sal,job
from emp
where year(hiredate) in (select year(hiredate),job
from emp
where deptno=20);
3、查询每个部门工资排名前两名的员工姓名和工资
select e1.ename, e1.sal,e1.deptno
from emp e1, dept d
where e1.deptno = d.deptno
and 2 > (select count(distinct e2.sal)
from emp e2
where e2.sal > e1.sal
and e2.deptno = e1.deptno)
order by e1.ename, e1.sal,e1.deptno;
select deptno,ename,sal
from emp e
where(select count(empno) deptno
from emp
where deptno=e.deptno
and sal>e.sal)<2
4、查询至少有一个员工的部门名称和部门人数
select d.dname, count(*) as 部门人数
from emp e1, dept d
where e1.deptno = d.deptno
group by d.dname
having count(e1.deptno) >= 1;
5、查询部门人数在2人以上的部门名称、部门人数、最高工资、最低工资
select d.dname, count(*) as 部门人数, max(sal) as 最高工资, min(sal) as 最低工资
from emp e1, dept d
where e1.deptno = d.deptno
group by d.dname
having count(e1.deptno) > 2;
6、查询出入职日期早于其直接上级的员工姓名、直接上级名称、员工入职日期、直接上级入职日期
select e1.ename as 员工姓名, e2.ename as 直接上级, e1.hiredate as 员工入职日期, e2.hiredate as 直接上级入职日期
from emp e1, emp e2
where e1.mgr = e2.empno
and e1.hiredate < e2.hiredate;
7、统计平均工资大于2000的部门的详细信息
select d.*
from dept d, emp e
where d.deptno = e.deptno
group by d.deptno
having avg(e.sal) > 2000;
8、查询出每个部门的名称、部门人数、平均工资
select d.dname, count(*), avg(sal)
from emp e, dept d
where e.deptno = d.deptno
group by d.dname;
三、程序设计题(每题5分,共15分)
某公司程序员张某设计了一套学生选课系统,其中涉及到的主要表结构如下:
a.班级信息表:表名classinfo,主要用来保存班级的基本信息,字段信息描述如下:
classid:流水号 数值型
classcode:班级编号 数值型
classname:班级名称 字符型
b.学生信息表:表名stuinfo,主要用来保存学生的基本信息,字段信息描述如下:
sid:流水号 数值型
scode:学号 数值型
sname:学生姓名 字符型
gender:性别 字符型
indate:入班日期 日期型
classid:所在班级 数值型
c.课程信息表:表名subject,主要用来保存课程的基本信息,字段信息描述如下: subid:流水号 数值型
subcode:课程编号 字符型
subname:课程名称 字符型
d.学生选课信息表:表名selectsub,主要用来保存学生所选课程的基本信息,字段信息表述如下:
selsubid:流水号 数值
stuid: 学生编号 字符型
subid:课程编号, 字符型
grade:成绩 数值型
请您根据以上张某的设计,完成以下SQL语句:
1.查询全部学生的学号、学生姓名、班级名称、所选课程名称、成绩。
select st.scode, st.sname, c.classname, su.subname, se.grade
from classinfo c, stuinfo st, subject su, selectsub se
where c.classid = st.classid and su.subcode = se.subid and st.sid = se.stuid;
2.查询每门课程都有多少学生选择,要求显示课程名称,所选人数。
select su.subname, count(*) as 所选人数
from subject su, selectsub se
where su.subcode = se.subid
group by su.subname;
3.查询选课多于2门的学生SQL语句,要求显示学生姓名,选课数量
select st.sname,count(subid) as 选课数量
from stuinfo st, selectsub se
where st.sid = se.stuid
group by st.sname
having count(subid) > 2;