《牛客笔试选择题》sql错题集

本文介绍了SQL中的STUFF函数用法,展示了如何通过窗口函数进行数据排序,以及如何利用GROUP BY和HAVING子句处理特定查询。此外,讨论了数据库事务的ACID特性,特别是隔离性和持久性,并举例说明了在SQL中对视图的更新限制。
摘要由CSDN通过智能技术生成

1.

查询语句select stuff('lo ina',3, 1, 've ch')结果为?

答案:love china

解析:

STUFF(原字符, 开始位置, 删除长度, 插入字符)

从指定的起点处开始删除指定长度的字符,并在此处插入另一组字符

2.

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

答案:

SELECT shirt_name, shirt_type, shirt_price,

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

FROM SHIRTABLE

解析:

RANK()函数是一个Window函数,它为结果集的分区中的每一行分配一个排名。

分区中具有相同值的行将获得相同的排名。 分区中第一行的等级是1RANK()函数将绑定行的数量添加到绑定等级以计算下一行的等级,因此,等级可能不是连续的。

RANK()函数的语法如下所示:

RANK() OVER (
    [PARTITION BY partition_expression, ... ]
    ORDER BY sort_expression [ASC | DESC], ...
)

在这个语法中:

  • 首先,PARTITION BY子句划分应用该函数的结果集分区的行。
  • 其次,ORDER BY子句指定应用该函数每个分区中行的逻辑排序顺序。

RANK()函数对于求解前N个和后N个报表很有用。

3.

快件信息表waybillinfo(id, waybillno, zonecode, optype, update_time)中存储了快件的所有操作信息,请找出在'中山公园'网点,异常派送(optype='异常派件')次数超过3次的快件(waybillno),正确的sql为()

答案:

select waybillno from waybillinfo where zonecode='中山公园' and optype='异常派件'
group by waybillno having count(*) > 3

解析:

1.having只用来在group by之后,对group by的结果进行筛选,不能单独用
2.分组结果统计需要用group by,每个快件整体作为一组

4.

Mysql中表student_table(id,name,birth,sex),插入如下记录:
('1003' , NULL , '2002-05-20' , '男');
('1004' , '张三' , '2000-09-06' , '男');
('1005' , '李四' , '2001-12-01' , '女');

('1006' , NULL , '2001-12-02' , '女');

修改name字段为NULL的记录,是男生时设置name='男生姓名',是女生时设置name='女生姓名',如下SQL正确的是()?

答案

update student_table set name  = ( case when sex = '男' then '男生姓名' when sex = '女' then '女生姓名' end) where name is null ;

解析:

【修改name字段为NULL的记录】需要把where条件写在最后;

case when的正确语法是: case when ... then ... when ... then ... else ... end,case和end不能缺少

5.

Mysql中表student_table(id,name,birth,sex),插入如下记录:

('1004' , '张三' ,'2000-08-06' , '男');
('1009' , '李四', '2000-01-01', '男');
('1010' , '李四', '2001-01-01', '男');
('1006' , '王五', '2000-08-06' , '女');
('1008' , '张三', '2002-12-01', '女');
('1012' , '张三', '2001-12-01', '女');
('1011' , '李四', '2002-08-06' , '女');

执行

select t1.*,t2.*
from (
select * from student_table where sex = '男' ) t1 
join 
(select * from student_table where sex = '女')t2 
on  t1.name = t2.name ; 
的结果行数是()?

答案:4条

解析:

题目中的join与inner join同义,相同的key匹配上时会产生笛卡尔积!查询结果如下:

f01cd8c7b89c48d686a542e73b203b17.png

6.下列关于视图说法错误的是?

答案:删除视图用DELETE VIEW

解析:

由题意得,视图是虚表,它在存储时只存储视图的定义,而没有存储对应的数据符合题意,BC也符合视图的语法,而删除视图应该使用DROP VIEW进行,故选D

7.

如果事务T对数据D已加S锁,则其他事务对数据D( )

答案:可以加S锁,不能加X锁

解析:

共享锁【S锁】
又称读锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。

排他锁【X锁】
又称写锁。若事务T对数据对象A加上X锁,事务T可以读A也可以修改A,其他事务不能再对A加任何锁,直到T释放A上的锁。这保证了其他事务在T释放A上的锁之前不能再读取和修改A。

8.在关系数据库设计中,设计关系模式(二维表)是数据库设计中的哪个阶段?( )

答案:逻辑设计阶段

解析:

4556f3e8a106486bab27d41d0ec725ff.png

9.

查询显示雇员的姓名和姓名中是否含有字母A的信息,满足如下条件
如果字符A在姓名的首位,则显示'字符A在首位'
如果字符A在姓名的末位,则显示'字符A在末位'
如果字符A在姓名中不存在,则显示'没有字符A'
其他情况显示'字符A在中间'
下列操作语句正确的是:(      )

答案:

select ename, case  charindex(‘A‘,ename)
when 1 then ‘字符A在首位‘
when len(ename) then
‘字符A在末位‘
when 0 then ‘没有字符A‘
else ‘字符A在中间‘
end 名称类别   from emp;

解析:

通过CHARINDEX如果能够找到对应的字符串,则返回该字符串位置i(有效位置范围为1<= i <= length(input)),否则返回0。

注意位置是从1开始

基本语法如下:

CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )

expressionToFind :目标字符串,就是想要找到的字符串,最大长度为8000 。

expressionToSearch :用于被查找的字符串。

start_location:开始查找的位置,为空时默认从第一位开始查找。

10

数据库设计里,视图(View)可以使得我们为一个或多个数据表定义一个特殊的表现形式,视图在行为上与数据表没啥特别区别,可以使用基本的select,insert,update等命令修改数据,但对于update操作,也有一些限制,下面那些是受限的原因()

答案:

初始View定义的Select语句里如果包含了GROUP BY,DISTINCT,LIMIT或HAVING等命令时

如果视图里数据来自多张字表时

解析:

视图包含下列结构是不可以更新的
1:集合运算符 union,union all, intersect,minus
2:distinct关键字
3:group by,order by,connect by,或者start with
4:子查询
5:分组函数
6:需要更新的列不是视图定义的
7:具有连接查询(可以更新键值保存表的数据)
8:违反基表的约束条件;连接视图是指基于多表连接查询创建的视图(一般不容易修改,但通用instead of触发器可以实现修改的功能)

11

关于ACID下面说法正确的是?

可用性。整个操作中的所有动作是保证高可用性,系统必须提供要求的稳定性,以保证事务的提交。
一致性。在事务开始之前和结束后,数据库的约束保持不变。
隔离性。两个同时运行的事务的执行是互不影响,中间结果不可交叉访问。
持久性。在事务提交以后,该事务所作的更改持久保存在存储介质之中,不会被回滚。

答案:BD

解析:

1.Atomic(原子性):事务中包含的操作被看做一个逻辑单元,这个逻辑单元中的操作要么全部成 功,要么全部失败。

2.Consistency(一致性):事务完成时,数据必须处于一致状态,数据的完整性约束没有被破坏,事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没    有执行过一样。

3. Isolation(隔离性):事务允许多个用户对同一个数据进行并发访问,而不破坏数据的正确性 和完整性。同时,并行事务的修改必须与其他并行事务的修改相互独立。

 4.Durability(持久性):事务结束后,事务处理的结果必须能够得到固化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓宜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值