MySQL练习_1

@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;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值