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

相关推荐
SelectDB技术团队19 分钟前
金融场景 PB 级大规模日志平台:中信银行信用卡中心从 Elasticsearch 到 Apache Doris 的先进实践
大数据·elasticsearch·金融·doris·日志分析
MXsoft6181 小时前
华为E9000刀箱服务器监控指标解读
大数据·运维
cr72582 小时前
MCP Server 开发实战:无缝对接 LLM 和 Elasticsearch
大数据·elasticsearch·搜索引擎
codeBrute2 小时前
Elasticsearch的经典面试题及详细解答
大数据·elasticsearch·搜索引擎
Ronin-Lotus2 小时前
上位机知识篇---ROS2命令行命令&静态链接库&动态链接库
学习·程序人生·机器人·bash
Kasper01213 小时前
认识Django项目模版文件——Django学习日志(二)
学习·django
中科岩创3 小时前
广东某海水取排水管线工程边坡自动化监测
大数据·物联网
索然无味io4 小时前
XML外部实体注入--漏洞利用
xml·前端·笔记·学习·web安全·网络安全·php
AI量化投资实验室4 小时前
deap系统重构,再新增一个新的因子,年化39.1%,卡玛提升至2.76(附python代码)
大数据·人工智能·重构
一弓虽4 小时前
java基础学习——jdbc基础知识详细介绍
java·学习·jdbc·连接池