学习大数据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。

相关推荐
时差95330 分钟前
MapReduce 的 Shuffle 过程
大数据·mapreduce
秃头佛爷33 分钟前
Python学习大纲总结及注意事项
开发语言·python·学习
kakwooi2 小时前
Hadoop---MapReduce(3)
大数据·hadoop·mapreduce
数新网络2 小时前
《深入浅出Apache Spark》系列②:Spark SQL原理精髓全解析
大数据·sql·spark
dayouziei3 小时前
java的类加载机制的学习
java·学习
师太,答应老衲吧4 小时前
SQL实战训练之,力扣:2020. 无流量的帐户数(递归)
数据库·sql·leetcode
NiNg_1_2346 小时前
高级 SQL 技巧详解
sql
dsywws6 小时前
Linux学习笔记之vim入门
linux·笔记·学习
晨曦_子画7 小时前
3种最难学习和最容易学习的 3 种编程语言
学习
城南vision7 小时前
Docker学习—Docker核心概念总结
java·学习·docker