学习大数据DAY11 SQL最终阶段测试

SQL基础试题

目录

一、单选选择题(每题3分,共30分))

二、简答题(共70分)

错点复习:

一、单选选择题(每题3分,共30分)

1.第一步执行了DELETE命令,删除了某表中的一条记录.第二步执行了COMMIT命令.最后又执行了ROLLBACK命令.请问以下叙述正确的是(B )

(A) 被删除的记录又被恢复回来,仍然存放在数据库的表中 (B) 被删除的记录彻底从数据库中被删除掉了

(C) 被删除的记录只是当前用户看不到了,而其它用户还能看到 (D) 被删除的记录当前用户可以看到,而其它用户却看不到了

(E) 以上所述都不正确

2.若想要修改一个表的结构,应该用以下哪个命令( A)

(A) ALTER TABLE (B) DEFINE TABLE (C) MODIFY TABLE (D) REBUILD TABLE (E) REVISE TABLE

3.查找出SCOTT所在部门的所有职工信息( D)

(A) select count(*) from emp where deptno= (select deptno from emp where ename='SCOTT');

(B) select sum(*) from emp where deptno=(select deptno from emp where ename='SCOTT');

(C) select * from emp where empno=(select empno from emp where ename='SCOTT');

(D) select * from emp where deptno=(select deptno from emp where ename='SCOTT');

4.user表中有字段uname、uage、uaddress,现在想删除uaddress这个列,语句正确的是( C)

(A) drop colunm uaddrss (B) alter column uaddress

(C) alter table user drop column uaddress (D) alter table user drop uaddress

5.下列关于表和视图的说法正确的是(D )

(A) 每个视图对应一个表 (B) 视图是表的一个备份

(C) 对所有视图都可以执行UPDATE操作 (D) 创建视图需要权限

6.有一个学生表student, 包含主键sno,有一个成绩表sc包含学号sno,成绩score。已知student里面有100个学生,有80个参加了考试(分数存在sc中),其中有10个人不及格。执行以下SQL语句:select * from student where exists(select sno from sc where score<60),可返回(B)条结果。X 正确答案C

  1. 50
  2. 10
  3. 100
  4. 80

7.以下对于SQL比较运算符ANY和ALL的说法正确的是( E)

(A) <ANY 表示小于最小值 (B) >ANY 表示大于最大值 (C) <ALL 表示小于最大值

(D) >ALL 表示大于最小值 (E) 以上说法都不正确

8.在Oracle中,执行下面的语句:

SELECT ceil(-97.342),floor(-97.342),round(-97.342),trunc(-97.342) FROM dual;

哪个函数的返回值不等于-97( A)X 正确答案:B

(A) ceil()

(B) floor()

(C) round()

(D)trunc()

9.在Oracle中,用以下SQL命令创建了一个序列:

CREATE SEQUENCE my_seq START WITH 394 INCREMENT BY 12 NOMINVALUE NOMAXVALUE NOCYCLE NOCACHE;

用户执行包含my_seq.NEXTVAL的SQL语句三次,然后执行包含my_seq.CURRVAL的SQL语句四次,请问序列my_seq的当前值是( B).

A.416 B.418 C.434 D.442

10.Oracle数据库中,下面描述不正确的是( B)。X 正确答案:D

A.not exists比 not in 的效率高

B.表A有30条数据,表B有20条数据,select * from A,B 的结果有600条

C.union all 比union 查询效率高

D.尽量多的创建索引来提高查询效率

二、简答题(共70分)

1.将emp表中所有人员姓名前两个字母小写后面的字母大写显示(5分)

sql 复制代码
select concat(substr(lower(ename),1,2),substr(upper(ename),3)) from emp;

2.使用开窗函数求出emp表中每一个部门工资第二高的人员姓名ename和人员工资sal,以及他所在部门的平均工资。(5分)

sql 复制代码
select * from(

select dense_rank()over(partition by deptno order by sal desc) r,
ename,sal,avg(sal)over(partition by deptno)

 from emp

) where r=2 ;

3.请通过SQL语句,筛选出表格中连续登录3天的用户。(5分)

X 参考答案:

sql 复制代码
with a as (  

    select  

        uname,  utime,  

        lead(utime, 1) over (partition by uname order by utime) as next_day,  

        lead(utime, 2) over (partition by uname order by utime) as     second_next_day  from  usetable ),  

b as ( select  uname,  utime  from  a  where  

        (utime + interval '1' day = next_day)  

        and (next_day + interval '1' day = second_next_day) )  

select  distinct uname  from  b

4.有一张article_history表存放文章的修改记录,有以下字段title(文章标题),last_time(修改时间),username(修改人姓名),source(文章来源),pin_name(作者笔名),要求写一个sql语句查询出每一个文章的最后修改人和修改时间。(5分)

Select title,last_time,username from article_history

Where last_time in

(

Select max(last_time) from article_history

Group by title

);

X 参考答案:

sql 复制代码
Select * from article_history where (title,last_time)  
in (Select title, max(last_time ) 
from article_history group by title)

5.如下图所示,使用merge into语句将TABLE2表中SETUP_DATE、MATURE_DATE更新到TABLE1表中 。(10分)

TABLE1:

|----|-------|------|------------|-------------|
| ID | CODE | NAME | SETUP_DATE | MATURE_DATE |
| 1 | A0001 | 账户1 | | |
| 2 | A0002 | 账户2 | | |
| 3 | A0003 | 账户3 | | |
| 4 | A0004 | 账户4 | | |

TABLE2:

|----|------------|-------------|
| ID | SETUP_DATE | MATURE_DATE |
| 1 | 2021/1/7 | 2025/3/3 |
| 2 | 2020/1/8 | 2028/3/3 |
| 3 | 2019/1/9 | 2035/3/3 |
| 5 | 2018/1/10 | 2031/3/3 |

sql 复制代码
merge into Table1 using Table2

on(table1.id=table2.id)

when matched then update set table1.setup_date=table2.setup_date,

  table1.mature_date=table2.mature_date

  when not matched then insert 

    values(table2.id,null,null,table2.setup_date,table2.mature_date);

6、怎么把这样一个表a(10分)

|---------|-------|--------|
| 1. year | month | amount |
| 1991 | 1 | 1.1 |
| 1991 | 2 | 1.2 |
| 1991 | 3 | 1.3 |
| 1991 | 4 | 1.4 |
| 1992 | 1 | 2.1 |
| 1992 | 2 | 2.2 |
| 1992 | 3 | 2.3 |
| 1992 | 4 | 2.4 |

查成这样一个结果

|------|-----|-----|-----|-----|
| year | m1 | m2 | m3 | m4 |
| 1991 | 1.1 | 1.2 | 1.3 | 1.4 |
| 1992 | 2.1 | 2.2 | 2.3 | 2.4 |

sql 复制代码
select year,

sum(case when month=1 then amount end) m1,

 sum(case when month=2 then amount end) m2,

   sum(case when month=3 then amount end) m3,

   sum(case when month=4 then amount end) m4

      from A group by year;
  1. 从商品销售情况表T1中查询出所有月份的销售额都比sku为8001相应月份的销售额高的商品。

注:商品销售情况表T1中有多种商品,每个商品1-12月都有对应的销售额。(10分)

T1表:

|----------------|--------------|-----------------|
| skuid(商品SKU编码) | occmonth(月份) | debitoccur(销售额) |
| 8001 | 1 | 34 |
| 8001 | 2 | 56 |
| ... | ... | ... |
| 8002 | 1 | 56 |
| 8003 | 2 | 67 |

sql 复制代码
select skuid,count(1) from
(select t1.skuid from  t1 join  t2 on t1.occmonth=t2.occmonth 
and t2.skuid='8001'
where t1.debitoccur>t2.debitoccur)
 group by skuid having count(1)=12

8.简答(20)

1)创建表

|------|-----------|------------|-----------|----------|----------|----------|-----------|
| 表名 | member |||||||
| 列名 | MEMBER_ID | FIRST_NAME | LAST_NAME | ADDRESS | CITY | PHONE | JOIN_DATE |
| 主键 | yes | | | | | | |
| 非空 | yes | yes | | | | | yes |
| 唯一 | yes | | | | | | |
| 默认值 | | | | | | | sysdate |
| 数据类型 | number | Varchar2 | Varchar2 | Varchar2 | Varchar2 | Varchar2 | date |
| 长度 | 10 | 25 | 25 | 100 | 30 | 15 | |

sql 复制代码
Create table member(

Member_id number(10) primary key,

First_name varchar2(25) not null,

Last_name varchar2(25),

Address varchar2(100),

City varchar2(30),

Phone varchar2(15),

Join_date date default(sysdate) not null

);

2)创建序列MEMBER_ID_SEQ,由101开始,每次增长1,无最大值限制。

sql 复制代码
create sequence MEMBER_ID_SEQ

start with 101

increment by 1

3)利用创建的序列向表member中添加数据

|------------|-----------|-----------------|---------|--------------|------------|
| First_Name | Last_Name | Address | City | Phone | Join_Date |
| Carmen | Velasquez | 283 King Street | Seattle | 206-899-6666 | 08-12-1990 |

sql 复制代码
Insert into member 

values(MEMBER_ID_SEQ.nextval,'Carmen','Velasquez','283 King Street',
'Seattle','206-899-6666',to_date('08-12-1990','dd-mm-yyyy'));
  1. 4)给表member创建只读视图。

Create view member_view

As

Select * from member read only;(漏加 read only)

5.新增一列age 数字类型,并限制该列取值在20到60岁之间。

sql 复制代码
alter table member add age number(3) check(age between 20 and 60);

错点复习:

Exist: 当Exist中的值不为空时,查询语句继续执行,否则置空。注意,Exist不会影响整个查询语句的查询数据,只会决定它是否执行。

Ceil()向上取整,floor()向下取整。

例:ceil(89.8)=90,floor(-89.8)=-90

查询表为select...from A,B 查询结果A,B中的所有数据量相乘,符合笛卡尔积。

只读视图的创建要加read only。

相关推荐
智慧化智能化数字化方案16 分钟前
华为IPD流程管理体系L1至L5最佳实践-解读
大数据·华为
CV学术叫叫兽38 分钟前
一站式学习:害虫识别与分类图像分割
学习·分类·数据挖掘
我们的五年1 小时前
【Linux课程学习】:进程程序替换,execl,execv,execlp,execvp,execve,execle,execvpe函数
linux·c++·学习
一棵开花的树,枝芽无限靠近你1 小时前
【PPTist】添加PPT模版
前端·学习·编辑器·html
PersistJiao1 小时前
在 Spark RDD 中,sortBy 和 top 算子的各自适用场景
大数据·spark·top·sortby
VertexGeek2 小时前
Rust学习(八):异常处理和宏编程:
学习·算法·rust
2301_811274312 小时前
大数据基于Spring Boot的化妆品推荐系统的设计与实现
大数据·spring boot·后端
Yz98762 小时前
hive的存储格式
大数据·数据库·数据仓库·hive·hadoop·数据库开发
青云交2 小时前
大数据新视界 -- 大数据大厂之 Hive 数据导入:多源数据集成的策略与实战(上)(3/ 30)
大数据·数据清洗·电商数据·数据整合·hive 数据导入·多源数据·影视娱乐数据
武子康2 小时前
大数据-230 离线数仓 - ODS层的构建 Hive处理 UDF 与 SerDe 处理 与 当前总结
java·大数据·数据仓库·hive·hadoop·sql·hdfs