2018年 安碩 校招數據庫開發筆試題A卷

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

 

  1. 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分)
  1. 對於一個數據量過大的表如果要提高對它的查詢速度,你會哪些方法?(30分)

創建索引;簡化查詢結果;精確查詢條件;使用合適的連接方法

  1. 表一(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;

 

 

 

  1. 學生表Student(Sid,Sname,age,sex),課程表Course(Cid,Cname),

學生成績表SC(Sid,Cid,score)

  1. 寫出返回至少學了5門課的學生的sql語句
  2. 查詢所有同學的學號、姓名、選課數、總成績
  3. 查詢所有的課程成績小於60分的同學的學號、姓名
  4. 各分數段的人數、課程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;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章