- 選擇題
- 下列數據庫系統中不屬於關係型數據庫管理系統(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;