SQL笔试题笔记(1)

下列选项中关于数据库事务的特性描述正确的是()
A.事务允许继续分割

B.多个事务在执行事务前后对同一个数据读取的结果是不同的

C.一个事务对数据库中数据的改变是暂时的

D.并发访问数据库时,各并发事务之间数据库是独立的

答案解析:一个事务是一个完整的业务逻辑单元,不可再分。 一旦提交事件,不可回滚,多个事务相互隔离的。

事务的特点(ACID):

  • A 原子性:一个事务是不可再分割的整体,要么都执行要么都不执行
  • C 一致性:一个事务可以使数据从一个一致状态切换到另外一个一致的状态
  • I 隔离性:一个事务不受其他事务的干扰,多个事务互相隔离的
  • D 持久性:一个事务一旦提交了,则永久的持久化到本地

通过子查询的方式从衬衫表SHIRTABLE中选取出销售单价shirt_price高于全部衬衫的平均价格的衬衫名字

A.SELECT shirt_id,shirt_name,shirt_price FROM SHIRTABLE WHERE shirt_price > AVG(shirt_price)

B.SELECT shirt_id,shirt_name,shirt_price FROM SHIRTABLE WHERE shirt_price > (SELECT AVG(shirt_price) FROM SHIRTABLE)

C.SELECT shirt_id,shirt_name,shirt_price FROM SHIRTABLE HAVING shirt_price > AVG(shirt_price)

D.SELECT shirt_id,shirt_name,shirt_price FROM SHIRTABLE WHERE shirt_price > (SELECT AVG(shirt_price) FROM SHIRTABLE WHERE shirt_price > AVG(shirt_price))

答案解析:使用子查询来计算整个表的平均价格,然后在外层查询中使用这个平均价格作为条件来筛选记录。

1.WHERE子句不能直接跟聚合函数 MAX.MIN等

2.WHERE子句能跟含聚合函数的子查询


写一段SQL,已知衬衫表SHIRTABLE,请你实现通过窗口函数实现,根据不同的衬衫种类shirt_type,按照销售单价shirt_price从低到高的顺序创建排序表()

A.SELECT shirt_name, shirt_type, shirt_price,

RANK() OVER (PARTITION BY shirt _type ORDER BY shirt_price) AS ranking

FROM SHIRTABLE

B.SELECT shirt _name, shirt_type, shirt _price,

PARTITION BY shirt _type ORDER BY shirt _price AS ranking

FROM SHIRTABLE

C.SELECT shirt _name, shirt_type, shirt _price,

RANK (PARTITION BY shirt _type ORDER BY shirt _price) AS ranking

FROM SHIRTABLE

D.SELECT shirt _name, shirt_type, shirt _price,

RANK() OVER (PARTITION BY shirt_type) AS ranking

FROM SHIRTABLE

答案解析:

  1. over()窗口函数的语法结构

    OVER() 子句是 SQL 中窗口函数的一部分,它定义了窗口函数操作的窗口。窗口函数允许您在 SQL 查询中执行聚合计算,但不是对整个结果集,而是对结果集中的特定子集(窗口)进行计算。

    OVER() 子句通常包含以下几个部分:

    • PARTITION BY 子句:类似于 GROUP BY,它将数据分成不同的分区,窗口函数将在每个分区内独立操作。
    • ORDER BY 子句:它确定了窗口内的排序方式,对于某些窗口函数(如排名函数)是必需的。
    • ROWS 或 RANGE 子句:它定义了窗口的大小和范围。ROWS 基于行号定义窗口,而 RANGE 基于值的范围定义窗口。

    语法示例:

    sql

    FUNCTION_NAME() OVER (
      [PARTITION BY column] 
      ORDER BY column 
      [ROWS BETWEEN start AND end]
    )

    如果您不指定 PARTITION BYORDER BY 或窗口范围,窗口大小默认为整个查询结果集。

  2. 常与over()一起使用的分析函数

    您列出的分析函数分类是正确的,这里再详细说明一下:

    • 聚合类:这些函数在窗口内对数据进行聚合计算。

      • AVG():计算平均值。
      • SUM():计算总和。
      • MAX():找出最大值。
      • MIN():找出最小值。
      • COUNT():计算行数。
    • 排名类:这些函数在窗口内对行进行排名。

      • RANK():为每个值分配一个排名,相同值的行会有相同的排名,但会导致排名跳跃(空位)。
      • DENSE_RANK():与 RANK() 类似,但不会跳跃,相同值的行会有相同的排名,排名之间没有间隔。
      • ROW_NUMBER():为每个行分配一个唯一的序号,不考虑值是否相同。


已知某校数据库中包含如下的表数据:
学生表student(sno,sname,birthday,gender)

课程表course(cid,cname)

成绩表grade(sno,cid,mark)

查询至少有一门课程与sno=1909的学生选择的课程相同的学生的学号和姓名,下列SQL语句中正确的是()

A.SELECT DISTINCT a.sno,a.sname

FROM student a,grade b

WHERE a.sno=1909 and a.sno=b.sno

and b.cid IN (SELECT cid FROM grade WHERE sno=1909)

B.SELECT DISTINCT a.sno,a.sname

FROM student a,grade b

WHERE a.sno<>1909 and a.sno=b.sno

and b.cid IN (SELECT cid FROM grade WHERE sno=1909)

C.SELECT DISTINCT a.sno,a.sname

FROM student a,grade b

WHERE a.sno<>1909 and a.sno=b.sno

and b.cid NOT IN (SELECT cid FROM grade WHERE sno=1909)

D.SELECT DISTINCT a.sno,a.sname

FROM student a,grade b

WHERE a.sno=1909 and a.sno=b.sno

and b.cid IN (SELECT cid FROM grade WHERE sno<>1909)

 答案解析:<> 符号与 != 没有区别。

逻辑顺序:
1. 从 `student` 和 `grade` 表中选择字段 `sno`(学生编号)和 `sname`(学生姓名)。
2. 筛选条件 `a.sno<>1909` 排除 `sno` 为 1909 的学生。
3. 通过 `a.sno=b.sno` 关联 `student` 和 `grade` 表。
4. 子查询 `(SELECT cid FROM grade WHERE sno=1909)` 找出 `sno` 为 1909 的学生修过的课程(`cid`)。
5. 主查询中用 `b.cid IN` 条件,只包括修过与 `sno` 为 1909 的学生相同课程的其他学生。
结果没有重复(`DISTINCT`)。


A.SELECT player_id, min(event_date) as first_login FROM gameList GROUP BY player_id

B.SELECT player_id, min(device_id) as first_login FROM gameList GROUP BY player_id

C.SELECT player_id, event_date as first_login FROM gameList GROUP BY player_id WHERE min(event_date)

D.SELECT player_id, min(event_date) as first_login FROM gameList WHERE min(event_date) GROUP BY player_id

答案解析:

登陆时间对应的字段是event_date,第一次意为最早,用min()聚合函数,这是除求数字最小,也能求日期最早。

如果求最近一次,用max()函数。

逻辑顺序:

1.我们需要查询每个 player_id 的第一次登录时间,因此我们需要使用 min() 函数来查询每个 player_id 的最早时间。

2.我们需要根据 player_id 分组,因此需要使用 GROUP BY 语句。

3.我们需要将结果按照 player_id 和 first_login 格式输出。


SQL中属于分组查询的语句是?()
A.Where
B.联盟链
C.Group By
D.Having

答案解析:

区块链大致可以分为公有链(Public Blockchain)、私有链(Private Blockchain)以及联盟链(Consortium Blockchain)三大类。

因此,联盟链属于区块链的一种。

where筛选、group by分组、having与group by连用,用于筛选。


下列选项中都属于关系代数运算符中集合运算符的是()

A.∩、∪、−、×

B.∩、∪、σ、π

C.∧、∨、−、×

D.σ、π、¬、∩

答案解析:

关系代数有五个基础运算符,这五个基础运算符能派生出其他组合运算符。它们分别是:

选择(σ, selection)、投影(π, projection)、叉乘(x, cross-product)、

差(-, set-difference)和并(υ, union)

它们和SQL语句的对应关系为:

选择(σ, selection)相当于SQL语句中的where,表示选出满足一定条件的行。

如:σ rating>8 (S2)相当于 select * from S2 where rating>8;

投影(π, projection)相当于SQL语句中的select。。。distinct, 表示选择哪些列。注意:投影是会去重的!

如:π sname,rating (σ rating>8 (S2))相当于 select sname, rating from S2 where rating>8;

叉乘(x, cross-product)相当于SQL语句中的from,表示穷举所有集合两边元素的组合量

如: AxB 相当于 select * from A, B;  注意:叉乘时两个集合不能有重名列

差(-, set-difference)R-S返回所有在R中而不在S中的元组

并(υ, union)RυS返回包含在R中或在S中的所有元组


Mysql中表student_table(id,name,birth,sex),查询张姓、李姓的学生总人数,错误的是()?
A.select sum(case when name like '张%' then 1 else 0 end) as zhang_first_name ,
sum(case when name like '李%' then 1 else 0 end) as li_first_name
from
student_table;
B.select count(case when name like '张%' then 2 else null end) as zhang_first_name ,
count(case when name like '李%' then 2 else null end) as li_first_name
from
student_table;
C.select count(case when name like '张%' then 1 else 0 end) as zhang_first_name ,
count(case when name like '李%' then 2 else 0 end) as li_first_name
from
student_table;
D.select sum(case when name like '张%' then 1 else null end) as zhang_first_name ,
sum(case when name like '李%' then 1 else null end) as li_first_name
from
student_table;

答案解析:

count分为两种情况

1、使用count(*)时是对表中行的数目进行计数

2、使用count(column)时是对特定列具有的值进行计数,忽略null值

sum加0时和加null时和不变。


 有一张学生成绩表sc(sno 学号,class 课程,score 成绩),示例如下

请问哪个语句可以查询出每个学生的英语、数学的成绩(行转列,一个学生输出一行记录,比如输出[1, 89, 90])?
A.select sno,class,score from sc where class in('english','math')
B.select sno,
if(class='english',score,0),
if(class='math',score,0)
from sc
where class in('english','math')
C.select sno,
case when class='english' then score else 0 end ,
case when class='math' then score else 0 end
from sc
where class in('english','math')
D.select sno,
sum(if(class='english',score,0)) as english,
sum( if(class='math',score,0) ) as math
from sc
where class in('english','math')
group by sno

答案解析:

sum函数作用:不加的话就会导致 

sno english math

1 90 0

1 0 85

而我们想要的结果是

sno english math

1 90 85  将上面2条记录合并就正常啦!  

group by作用:不加会导致所有学生英语成绩都加在一起,数学成绩也会加在一起

sno english math

1 185 165


使用SQL语句建个存储过程proc_stu,然后以student表中的学号Stu_ID为输入参数@s_no,返回学生个人的指定信息。下面创建存储过程语句正确的是:(      )
A.CREATE PROCEDURE [stu].[proc_student]
@s_no AS int
AS
BEGIN
select * from stu.student where Stu_ID=@s_no
END
B.CREATE PROCEDURE [stu].[proc_student]
@s_no int
AS
BEGIN
select * from stu.student where Stu_ID=@s_no
END
C.CREATE PROCEDURE [stu].[proc_student]
@s_no int
AS
BEGIN
select * from stu.student where s_no=@s_no
END
D.CREATE PROCEDURE [stu].[proc_student]
@s_no AS int
AS
BEGIN
select * from stu.student where Stu_ID=@Stu_ID
END

答案解析:

不带参数的存储过程:

create procedure proc_sql1  
as  
begin  
    declare @i int  
    set @i=0  
    while @i<26  
      begin  
         print char(ascii('a') + @i) + '的ASCII码是: ' + cast(ascii('a') + @i as varchar)   
         set @i = @i + 1  
      end  
end

带参数的存储过程:

create proc proc_sql6  
@num1 int,  
@num2 int,  
@num3 int  
as  
begin  
   declare @max int  
   if @num1>@num2    
      set @max = @num1  
   else set @max = @num2  
     
   if @num3 > @max  
      set @max = @num3  
        
   print '3个数中最大的数字是:' + cast(@max as varchar)  
end

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/918343.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue3 如何调用第三方npm包内部的 pinia 状态管理库方法

抛砖引玉: 如果在开发vue3项目是, 引用了npm第三方包 ,而且这个包内使用了Pinia 状态管理库,那我们如何去调用 npm内部的 Pinia 状态管理库呢? 实际遇到的问题: 今天在制作npm包时遇到的问题,之前Vue2版本的时候状态管理库用的Vuex ,当时调用npm包内的状态管理库很简单,直接引…

麒麟KylinServer的网站,并部署一套主从DNS服务器提供域名解析服务

一、KylinServer网站搭建 ifconfig Copy 注意:根据实际网卡设备名称情况调整代码!不同环境下网卡名称略有不同! 获取本机IP地址,记住IP地址用于之后的配置填写。 ifconfig enp0s2 Copy 下载nginx源码包,并解压缩 wget http://10.44.16.102:60000/allfiles/Kylin/ng…

Python数据分析NumPy和pandas(三十五、时间序列数据基础)

时间序列数据是许多不同领域的结构化数据的重要形式&#xff0c;例如金融、经济、生态学、神经科学和物理学。在许多时间点重复记录的任何内容都会形成一个时间序列。许多时间序列是固定频率的&#xff0c;也就是说&#xff0c;数据点根据某些规则定期出现&#xff0c;例如每 1…

大数据常见面试题及答案(Linux、Zookeeper、Hadoop、Hive)

技术问答题目 一、Linux 1.如何给⽂件(⽂件夹)分配读r、w、x的操作权限&#xff1f; 2. vi 编辑器的常⽤命令有哪些&#xff1f; 3.Linux 中⽂件的操作权限分为⼏种&#xff1f; 4.Linux 中实时查看日志的方法 5. Linux查看内存、磁盘存储、io 读写、端口占用、进程等命…

【软件工程】一篇入门UML建模图(类图)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;软件开发必练内功_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前…

开源音乐分离器Audio Decomposition:可实现盲源音频分离,无需外部乐器分离库,从头开始制作。将音乐转换为五线谱的程序

今天给大家分析一个音频分解器&#xff0c;通过傅里叶变换和信封匹配分离音乐中的各个音符和乐器&#xff0c;实现音乐到乐谱的转换。将音乐开源分离为组成乐器。该方式是盲源分离&#xff0c;从头开始制作&#xff0c;无需外部乐器分离库。 相关链接 代码&#xff1a;https:…

微服务day10-Redis面试篇

Redis主从 搭建主从集群 建立集群时主节点会生成同一的replicationID,交给各个从节点。 集群中的缓冲区是一个环型数组&#xff0c;即若从节点宕机时间过长&#xff0c;可能导致命令被覆盖。 主从集群优化 哨兵原理 哨兵是一个集群来确保哨兵不出现问题。 服务状态监控 选举…

交换排序——快速排序

交换排序——快速排序 7.7 交换排序——快速排序快速排序概念c语言的库函数qsort快速排序框架quickSort 7.7 交换排序——快速排序 快速排序概念 快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法&#xff08;下文简称快排&#xff09;&#xff0c;其基本思想为&a…

预处理(1)(手绘)

大家好&#xff0c;今天给大家分享一下编译器预处理阶段&#xff0c;那么我们来看看。 上面是一些预处理阶段的知识&#xff0c;那么明天给大家讲讲宏吧。 今天分享就到这里&#xff0c;谢谢大家&#xff01;&#xff01;

自动驾驶系列—深入解析自动驾驶车联网技术及其应用场景

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

华为路由策略配置

一、AS_Path过滤 要求&#xff1a; AR1与AR2、AR2与AR3之间建立EBGP连接 AS10的设备和AS30的设备无法相互通信 1.启动设备 2.配置IP地址 3.配置路由器的EBGP对等体连接&#xff0c;引入直连路由 [AR1]bgp 10 [AR1-bgp]router-id 1.1.1.1 [AR1-bgp]peer 200.1.2.2 as-nu…

深度学习中的Pixel Shuffle和Pixel Unshuffle:图像超分辨率的秘密武器

在深度学习的计算机视觉任务中&#xff0c;提升图像分辨率和压缩特征图是重要需求。Pixel Shuffle和Pixel Unshuffle是在超分辨率、图像生成等任务中常用的操作&#xff0c;能够通过转换空间维度和通道维度来优化图像特征表示。本篇文章将深入介绍这两种操作的原理&#xff0c;…

React--》如何高效管理前端环境变量:开发与生产环境配置详解

在前端开发中&#xff0c;如何让项目在不同环境下表现得更为灵活与高效&#xff0c;是每个开发者必须面对的挑战&#xff0c;从开发阶段的调试到生产环境的优化&#xff0c;环境变量配置无疑是其中的关键。 env配置文件&#xff1a;通常用于管理项目的环境变量&#xff0c;环境…

HuggingFace:基于YOLOv8的人脸检测模型

个人操作经验总结 1、YOLO的环境配置 github 不论base环境版本如何&#xff0c;建议在conda的虚拟环境中安装 1.1、创建虚拟环境 conda create -n yolov8-face python3.9conda create &#xff1a;创建conda虚拟环境&#xff0c; -n &#xff1a;给虚拟环境命名的…

基于Python的仓库管理系统设计与实现

背景&#xff1a; 基于Python的仓库管理系统功能介绍 本仓库管理系统采用Python语言开发&#xff0c;利用Django框架和MySQL数据库&#xff0c;实现了高效、便捷的仓库管理功能。 用户管理&#xff1a; 支持员工和管理员角色的管理。 用户注册、登录和权限分配功能&#x…

当 docker-compose.yaml 文件部署时,Dify 线上版本升级过程

如果线上 Dify 是通过 docker-compose.yaml 文件部署的&#xff0c;那么当 Dify 版本升级时该如何操作呢&#xff1f;官方已经给出了 Docker compose 和 Source Code 两种方式。相对而言&#xff0c;前者更简单些&#xff0c;至少不需要安装依赖包和迁移数据库文件。为了更加具…

【H3C华三 】VRRP与BFD、Track联动配置案例

原创 厦门微思网络 组网需求 如图1所示&#xff0c;区域A和区域B用户所在网络的出口处部署了两台汇聚层设备&#xff08;Device A和Device B&#xff09;。 现要求使用VRRP与BFD、Track联动功能&#xff0c;实现以下需求&#xff1a; • 在Device A和Device B上分别配置两个…

记录配置ubuntu18.04下运行ORBSLAM3的ros接口的过程及执行单目imu模式遇到的问题(详细说明防止忘记)

今天的工作需要自己录制的数据集来验证昨天的标定结果 用ORBSLAM3单目imu模式运行&#xff0c;mentor给的是一个rosbag格式的数据包&#xff0c;配置过程出了几个问题记录一下&#xff0c;沿配置流程写。 一.orbslam3编译安装 1.首先是安装各种依赖 这里不再赘述&#xff0…

【汇编】c++游戏开发

由一起学编程创作的‘C/C项目实战&#xff1a;2D射击游戏开发&#xff08;简易版&#xff09;&#xff0c; 440 行源码分享来啦~’&#xff1a; C/C项目实战&#xff1a;2D射击游戏开发&#xff08;简易版&#xff09;&#xff0c; 440 行源码分享来啦~_射击c-CSDN博客文章浏览…

Vue Canvas实现区域拉框选择

canvas.vue组件 <template><div class"all" ref"divideBox"><!-- 显示图片&#xff0c;如果 imgUrl 存在则显示 --><img id"img" v-if"imgUrl" :src"imgUrl" oncontextmenu"return false" …