认知幻像:如果有这样一道面试题,可以如何作答?

2024-01-13 08:59

本文主要是介绍认知幻像:如果有这样一道面试题,可以如何作答?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

书接上回,虽然我们知道,SQL有着强大的标准体系,但是在实践中,不同数据库却有不同的实现方式

除此之外,有时候用常规的思维逻辑而不是计算逻辑去推理SQL执行方式,也有可能出现不同于现实的判定。

以下这个问题,也是来自“云和恩墨大讲堂”朋友提出的。


最后这个查询,在 enmotest 表中,根本不存在 name 字段,查询的结果会是怎样呢?

大家想象一下,如果这是一道面试题,你如何判断结果,如何解释背后的逻辑?

create table enmotech (id number,name varchar2(20));
     insert into enmotech values(1,'Eygle');

create table enmotest (id number);
     insert into enmotest values(1);

select * from enmotech where name in (select name from enmotest);

思考一分钟。

插播:2023 数据技术嘉年华大会,将会在4.7 ~ 4.8 北京开幕,大会特设数据迁移专场,欢迎接受我的赠票邀请(扫码),共享数据库技术盛会,免费报名链接:

        https://modb.pro/event/804/395289

继续采用墨天轮的 SQLRUN 环境

    https://www.modb.pro/sqlrun/mysql

在Oracle数据库的执行结果如下:

09a42baf7a0592ae8d8e18c52211ae6f.png

在 云和恩墨 的 MogDB 执行结果如下:

034f6b189267bb6a6e10a12128d2a9c9.png

网友提出的问题是:明明在 enmotest 表中不存在 name 字段,为什么不抛出不存在的异常,反而反回了外表的记录?

我们针对Oracle的查询,执行一个 10053 的跟踪事件(获得SQL解析过程),执行步骤如下:

SQL> alter session set events '10053 trace name context forever,level 1';

Session altered.

SQL> select * from enmotech where name in (select name from enmotest);

在跟踪文件中,可以清晰地看到执行计划的解析过程。以下解析步骤,说明了结果产生的原因。

对于子查询来说,父查询的所有字典信息可见,所以解析转换中,子查询的 NAME 自然就被解析为 ENMOTECH.NAME ,这样比较结果恒为真,就返还了父查询中所有的记录(此时如果父查询表中也不存在这个字段则会抛出异常):

SELECT "ENMOTECH"."ID" "ID","ENMOTECH"."NAME" "NAME" FROM "MOGDB"."ENMOTECH" "ENMOTECH" WHERE "ENMOTECH"."NAME"=ANY (SELECT "ENMOTECH"."NAME" "NAME" FROM "MOGDB"."ENMOTEST" "ENMOTEST")

Objects referenced in the statement

  ENMOTECH[ENMOTECH] 76095, type = 1

  ENMOTEST[ENMOTEST] 76096, type = 1

Objects in the hash table

  Hash table Object 76095, type = 1, ownerid = 3808176908773422935:

    No Dynamic Sampling Directives for the object

  Hash table Object 76096, type = 1, ownerid = 14982774484177512411:

    No Dynamic Sampling Directives for the object

这个题目的真正警示在于,如果开发人员凑巧写错了条件,而这个SQL的执行不会出现异常,只是结果不符合预期,我们需要提前识别这个误操作。


云和恩墨大讲堂 | 一个分享交流的地方

长按,识别二维码,加入万人交流社群

请备注:云和恩墨大讲堂

  点个“在看” 

你的喜欢会被看到❤

这篇关于认知幻像:如果有这样一道面试题,可以如何作答?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/600917

相关文章

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

荣耀嵌入式面试题及参考答案

在项目中是否有使用过实时操作系统? 在我参与的项目中,有使用过实时操作系统。实时操作系统(RTOS)在对时间要求严格的应用场景中具有重要作用。我曾参与的一个工业自动化控制项目就采用了实时操作系统。在这个项目中,需要对多个传感器的数据进行实时采集和处理,并根据采集到的数据及时控制执行机构的动作。实时操作系统能够提供确定性的响应时间,确保关键任务在规定的时间内完成。 使用实时操作系统的

一些其他面试题

阿里二面:那你来说说定时任务?单机、分布式、调度框架下的定时任务实现是怎么完成的?懵了。。_哔哩哔哩_bilibili 1.定时算法 累加,第二层每一个格子是第一层的总时间400 ms= 20 * 20ms 2.MQ消息丢失 阿里二面:高并发场景下引进消息队列有什么问题?如何保证消息只被消费一次?真是捏了一把汗。。_哔哩哔哩_bilibili 发送消息失败

zookeeper相关面试题

zk的数据同步原理?zk的集群会出现脑裂的问题吗?zk的watch机制实现原理?zk是如何保证一致性的?zk的快速选举leader原理?zk的典型应用场景zk中一个客户端修改了数据之后,其他客户端能够马上获取到最新的数据吗?zk对事物的支持? 1. zk的数据同步原理? zk的数据同步过程中,通过以下三个参数来选择对应的数据同步方式 peerLastZxid:Learner服务器(Follo

认知杂谈52

今天分享 有人说的一段争议性的话 I I 1拓展人脉很重要** 咱们活在这世上啊,得明白一件事儿,知识、逻辑能力和实战经验虽然重要,但确实都不是最关键的。真正关键的是要懂得怎么和那些手里有资源的人打交道。人脉那可真是一笔无形的大财富呢。你想想看,有时候一个有影响力的人帮你一把,那效果可比你累死累活干一年都强得多。 I I 就比如说,你要是认识个行业里的大牛,他可能给你介绍个特别好的工

java常用面试题-基础知识分享

什么是Java? Java是一种高级编程语言,旨在提供跨平台的解决方案。它是一种面向对象的语言,具有简单、结构化、可移植、可靠、安全等特点。 Java的主要特点是什么? Java的主要特点包括: 简单性:Java的语法相对简单,易于学习和使用。面向对象:Java是一种完全面向对象的语言,支持封装、继承和多态。跨平台性:Java的程序可以在不同的操作系统上运行,称为"Write once,

【Kubernetes】常见面试题汇总(三)

目录 9.简述 Kubernetes 的缺点或当前的不足之处? 10.简述 Kubernetes 相关基础概念? 9.简述 Kubernetes 的缺点或当前的不足之处? Kubernetes 当前存在的缺点(不足)如下: ① 安装过程和配置相对困难复杂; ② 管理服务相对繁琐; ③ 运行和编译需要很多时间; ④ 它比其他替代品更昂贵; ⑤ 对于简单的应用程序来说,可能不

【附答案】C/C++ 最常见50道面试题

文章目录 面试题 1:深入探讨变量的声明与定义的区别面试题 2:编写比较“零值”的`if`语句面试题 3:深入理解`sizeof`与`strlen`的差异面试题 4:解析C与C++中`static`关键字的不同用途面试题 5:比较C语言的`malloc`与C++的`new`面试题 6:实现一个“标准”的`MIN`宏面试题 7:指针是否可以是`volatile`面试题 8:探讨`a`和`&a`

Laravel 面试题

PHP模块 PHP7 和 PHP5 的区别,具体多了哪些新特性? 性能提升了两倍 结合比较运算符 (<=>) 标量类型声明 返回类型声明 try…catch 增加多条件判断,更多 Error 错误可以进行异常处理 匿名类,现在支持通过new class 来实例化一个匿名类,这可以用来替代一些“用后即焚”的完整类定义 …… 了解更多查看文章底部链接 PHP7 新特性 为什么 PHP

【吊打面试官系列-Redis面试题】说说 Redis 哈希槽的概念?

大家好,我是锋哥。今天分享关于 【说说 Redis 哈希槽的概念?】面试题,希望对大家有帮助; 说说 Redis 哈希槽的概念? Redis 集群没有使用一致性 hash,而是引入了哈希槽的概念,Redis 集群有 16384 个哈希槽,每个 key 通过 CRC16 校验后对 16384 取模来决定放置哪个槽, 集群的每个节点负责一部分 hash 槽。