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;

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