- 选择题
- 下列数据库系统中不属于关系型数据库管理系统(RDBMS)的是()
A、 Oracle B、 MS SQL Server
C、 Hadoop D、DB2
2、在SQL语句中,与表达式“仓库号 NOT IN(‘wh1’,’wh2’)”功能相同的表达式是()
A、仓库号=‘wh1’ and 仓库号=‘wh2’ B、仓库号!=’wh1’ or 仓库号!=‘wh2’
C、仓库号<>’wh1’ or 仓库号!=’wh2’ D、仓库号!=’wh1’ and 仓库号!=’wh2’
3、使用SQL语句取修改表结构的命令是()
A、 MODIFY TABLE B、MODIFY STRUCTURE
C、ALTER TBALE D、ALTER STRUCTURE
4、在关系模型中,实现“关系中不允许出现相同的元祖”的约束是通过()
A、候选键 B、主键 C、外键 D、超键
5、关于count()的说法,错误的是()
A、count(null)返回0
B、count(*)等同于count(表字段) 如果表字段不允许为null,则两个返回值是一样的
C、count()中可以配合distinct使用
D、如果表字段类型为整型,count(表字段)不等价于sum(表字段)
6、如下SQL数据中,()可能返回null值
A、select count(t1.id) from t1;
B、select max(t1.id) from t1 where t1.id<>’’;
--''等同于null,'' is null恒成立的条件
select deptno from emp where '' is null;
--因为在Oracle中''等同于null,deptno<>''恒不成立
select max(deptno) from emp where deptno<>'';
C、select concat(‘max=’,max(id)) from t1
D、select case when t1.id>10000 then ‘ok’
Else ‘null’ end from t1 where t1.id is not null;
7、使用like关键字可以获取多个满足规则的数据,以下关于通配符的使用正确的是()
A、where id like ‘%1’ --获取id以%1开头的记录
B、where name like ‘S_D%’ –获取姓名的第一个字母为S并且第三个字母为D的记录
C、where to_char(salary) like ‘_99’ and salary<10000—获取工资小于10000且末位数据为99的记录
D、where rate like ’%0%’ –获取利率值倒数第二位为0的记录
8、为了获取以下图例中的阴影部分,要使用到那种join方式
- left outer join B、full outer join C、inner join D、right outer join
9、下面哪个程序负责HDFS数据存储
A、NameNode B、Jobtracker C、Datanode D、secondaryNameNode
10、下列哪项不数hive的文件格式()
A、TextFile B、SequenceFile C、RCFile D、StoreFile
- 问答题(3选2,共60分)
- 对于一个数据量过大的表如果要提高对它的查询速度,你会哪些方法?(30分)
创建索引;简化查询结果;精确查询条件;使用合适的连接方法
- 表一(AAA)
商品名称mc |
商品总量sl |
A |
100 |
B |
200 |
C |
130 |
表二(BBB)
商品名称mc |
出库数量sl |
A |
10 |
A |
20 |
B |
10 |
B |
20 |
B |
30 |
用一条SQL查询算出所有商品目前还剩多少?(30分)
create table AAA(
mc varchar2(2),
sl number);
insert into AAA values('A',100);
insert into AAA values('B',200);
insert into AAA values('C',130);
表二(BBB)
商品名称mc 出库数量sl
A 10
A 20
B 10
B 20
B 30
create table BBB(
mc varchar2(2),
sl number);
insert into BBB values('A',10);
insert into BBB values('A',20);
insert into BBB values('B',10);
insert into BBB values('B',20);
insert into BBB values('B',30);
--显示库存量
select * from AAA;
select * from BBB;
Select mc,sl-nvl((select sum(bbb.sl)
from bbb where aaa.mc=bbb.mc),0) 库存
from aaa;
- 学生表Student(Sid,Sname,age,sex),课程表Course(Cid,Cname),
学生成绩表SC(Sid,Cid,score)
- 写出返回至少学了5门课的学生的sql语句
- 查询所有同学的学号、姓名、选课数、总成绩
- 查询所有的课程成绩小于60分的同学的学号、姓名
- 各分数段的人数、课程id、课程名称 100-85,85-70,70-60,<60
A、 写出返回至少学了5门课的学生的sql语句
select sid,
(select sname from student t
where t.sid=s.sid) sname,
count(*) 课程数 from sc s
group by sid having count(*)>=5;
B、 查询所有同学的学号、姓名、选课数、总成绩
select sid,
(select sname from student t
where t.sid=s.sid) sname,
count(*) 选课数,
sum(score) 总成绩
from sc s
group by sid;
C、 查询所有的课程成绩小于60分的同学的学号、
姓名
select sid,
(select sname from student t
where t.sid=s.sid) sname
from sc s
group by sid having max(score)<60;
--exists
select sid,sname from student t where
exists(select 1 from sc s where t.sid=s.sid
and
s.sid not in(select sid from sc where
score>=60 ) );
D、 各分数段的人数、课程id、课程名称
100-85,85-70,70-60,<60
--1、聚合 2、判断
select cid,
(select cname from course c where c.cid=s.cid) cname,
sum(case when score between 85 and 100 then 1
else 0 end) "[85-100]人数",
sum(case when score between 70 and 84 then 1
else 0 end) "[70-84]人数",
sum(case when score between 60 and 69 then 1
else 0 end) "[60-69]人数",
sum(case when score <60 then 1
else 0 end) "[<60]人数"
from sc s
group by cid;