Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >NOT IN逻辑运算符是如何产生这个输出的?

NOT IN逻辑运算符是如何产生这个输出的?
EN

Stack Overflow用户
提问于 2012-05-01 08:53:18
回答 3查看 107关注 0票数 0

我有以下表和数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
course:
course#     ctitle               units
---------   -------------------  -----
ACCT 201    Financial Account      3
CHEM 356    Organic Chemistry      4
HIST 101    US History             5
MINS 235    Database Design        4
MINS 301    Intro to Business IS   3
MINS 350    Systems Analysis       4
PHED 434    Advanced Gym           2

class:
class#  course#      sec#   semyr
------  ----------   -----  -----
203     ACCT 201       03    F11
204     ACCT 201       04    F11
307     MINS 301       07    F11
418     MINS 235       04    F11
438     MINS 350       01    F11
624     PHED 434       02    F11

student:
sid  sname       major
---  ----------  ----------
 1    Bob        MINS
 2    Mary       POMG
 3    Joe        MGMT
 4    Sue        MKTG
 5    Jim        ACCT

class_student:
class  sid   grade
-----  ----  -----
 203     2     B
 203     5     D
 204     1     C
 204     4     C
 307     1     B
 307     2     B
 307     4     A
 418     1     A
 418     2     B
 418     5     C
 438     1     B
 438     4     C
 634     5     F

grade:
grade  grade_pts
-----  ---------
  A        4
  B        3
  C        2
  D        1
  F        0

当我运行以下查询时:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT      *  
FROM        STUDENT 
WHERE       SID NOT IN 
            (   SELECT  SID 
                FROM    CLASS_STUDENT 
                WHERE   GRADE IN ('A' , 'B')
            ) 
ORDER BY    SID;

我认为Oracle会生成这个输出。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sid sname major
--- ----- -----
 1  bob   mins
 4  sue   mktg
 5  jim   acct
 5  jim   acct
 5  jim   acct

我想了解逻辑运算符是如何工作的。NOT IN操作符如何在上面的查询中生成输出?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-01 09:06:00

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT SID FROM CLASS_STUDENT WHERE GRADE IN ( 'A' , 'B' )

将选择A,B级学生的sid。将产生一个sid列表。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SID
2
1
2
4
1
2
1

然后

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT  *  FROM STUDENT 
WHERE   SID NOT IN  ...

将导致:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SID     sname       Major
3       joe         mgmt
5       jim         acct
票数 1
EN

Stack Overflow用户

发布于 2012-05-01 08:55:33

它返回成绩比B差的学生。

NOT IN过滤掉了你在那之后定义的内容。

用词:

选择所有学生,但不选择成绩为AB

的学生

票数 3
EN

Stack Overflow用户

发布于 2012-05-01 09:03:59

子查询(SELECT SID FROM CLASS_STUDENT WHERE GRADE IN ( 'A' , 'B' ))在至少一个班级中选择所有成绩为A或B的学生的SID。当与IN运算符一起使用时,列表将隐式地重复。从您的数据中可以看出,学生1、2和4在至少一个类中都有A或B,因此将包括在该子查询的结果集中。

然后,完整的查询只是从STUDENT中选择不包含在子查询返回的列表中的所有行。所以我认为你得到了两排,小岛屿发展中国家3和5。

你的“预期结果”没什么意义。当您的查询选择所有学生,然后筛选出一些行时,没有理由期望同一个学生有多个行。

您的查询所做的是显示在至少一个班级中没有A或B级的学生。我怀疑你想要的是向每个学生展示分数比B差的班级组合(这似乎与你的预期结果相一致)。要做到这一点,我建议将查询从CLASS_STUDENT表中删除,并加入STUDENT获取学生信息(如果需要,还可以向CLASSCOURSE获取课程名称)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10401189

复制
相关文章
bug是如何产生的?
领导:你看那隔壁那木房子就没有打地基,不要在小事上浪费时间,一个月水平面上面什么都看不到,你kpi不要了?
混说Linux
2022/07/14
3610
Bug是如何产生的?
我们不能完全杜绝与它接触,唯一能做的,就是提高我们自身的”免疫力“(俗称可用性或健壮性),让它尽可能的远离我们,影响不了我们。
陶朱公Boy
2023/10/23
2980
Bug是如何产生的?
漫画 | Bug是如何产生的?
今天这篇漫画的灵感来源于知乎的万赞回答,也有一部分原因是因为最近工作状态的真实写照吧, 它讲述的是程序员工作中的bug是如何产生的,以及作为一名优秀的程序员,如何把握好你跑路的时间呢?
苏南
2021/01/25
8690
Service中是如何产生ANR的?
Service有两种,前台服务超时为SERVICE_TIMEOUT=20S 后台服务超时为SERVICE_BACKGROUD_TIMEOUT=200S 根据变量ProcessRecord.execServicesFg来决定是前台服务还是后台服务 Service TimeOut是位于“ActivityManager”线程中的AMS.MainHandler收到SERVICE_TIMEOUT_MSG消息时触发。
北洋
2021/12/08
8130
Service中是如何产生ANR的?
Service中是如何产生ANR的?
Service有两种,前台服务超时为SERVICE_TIMEOUT=20S 后台服务超时为SERVICE_BACKGROUD_TIMEOUT=200S 根据变量ProcessRecord.execServicesFg来决定是前台服务还是后台服务 Service TimeOut是位于“ActivityManager”线程中的AMS.MainHandler收到SERVICE_TIMEOUT_MSG消息时触发。
小柔
2022/10/09
6020
Service中是如何产生ANR的?
实战分享 | 你知道这个死锁是怎么产生的吗?
| 作者 王文安,腾讯CSIG数据库专项的数据库工程师,主要负责腾讯云数据库 MySQL 的相关的工作,热爱技术,欢迎留言进行交流。 ---- Part1 背景 锁作为 MySQL 知识体系的主要部分之一,是每个 DBA 都需要学习和掌握的知识。锁保证了数据库在并发的场景下数据的一致性,同时锁冲突也是影响数据库性能的因素之一。而锁冲突中,有一类很经典的场景经常会拿出来讨论:死锁。最近刚好也遇到了一个典型的死锁案例,本文会基于这个案例,做一次详细的分析与拆解。 Part2 问题 由于innodb engi
腾讯云数据库 TencentDB
2020/11/12
6220
Kubernetes 中 Evicted pod 是如何产生的
最近在线上发现很多实例处于 Evicted 状态,通过 pod yaml 可以看到实例是因为节点资源不足被驱逐,但是这些实例并没有被自动清理,平台的大部分用户在操作时看到服务下面出现 Evicted 实例时会以为服务有问题或者平台有问题的错觉,影响了用户的体验。而这部分 Evicted 状态的 Pod 在底层关联的容器其实已经被销毁了,对用户的服务也不会产生什么影响,也就是说只有一个 Pod 空壳在 k8s 中保存着,但需要人为手动清理。本文会分析为什么为产生 Evicted 实例、为什么 Evicted 实例没有被自动清理以及如何进行自动清理。
米开朗基杨
2021/10/18
1K0
Kubernetes 中 Evicted pod 是如何产生的
kubernetes 中 Evicted pod 是如何产生的
最近在线上发现很多实例处于 Evicted 状态,通过 pod yaml 可以看到实例是因为节点资源不足被驱逐,但是这些实例并没有被自动清理,平台的大部分用户在操作时看到服务下面出现 Evicted 实例时会以为服务有问题或者平台有问题的错觉,影响了用户的体验。而这部分 Evicted 状态的 Pod 在底层关联的容器其实已经被销毁了,对用户的服务也不会产生什么影响,也就是说只有一个 Pod 空壳在 k8s 中保存着,但需要人为手动清理。本文会分析为什么为产生 Evicted 实例、为什么 Evicted 实例没有被自动清理以及如何进行自动清理。
田飞雨
2021/10/08
5.4K0
Kubernetes 中 Evicted pod 是如何产生的
最近在线上发现很多实例处于 Evicted 状态,通过 pod yaml 可以看到实例是因为节点资源不足被驱逐,但是这些实例并没有被自动清理,平台的大部分用户在操作时看到服务下面出现 Evicted 实例时会以为服务有问题或者平台有问题的错觉,影响了用户的体验。而这部分 Evicted 状态的 Pod 在底层关联的容器其实已经被销毁了,对用户的服务也不会产生什么影响,也就是说只有一个 Pod 空壳在 k8s 中保存着,但需要人为手动清理。本文会分析为什么为产生 Evicted 实例、为什么 Evicted 实例没有被自动清理以及如何进行自动清理。
公众号: 云原生生态圈
2021/11/23
7610
逻辑运算符是什么 逻辑运算符的种类
逻辑思维在现实生活中的作用是非常大的。培养逻辑思维,能够游刃有余的解决很多问题。在科技发展的今天,计算机也是有逻辑思维的,而且它的路逻辑思维和能力甚至比人类还要强大。逻辑运算符相信大家并不陌生,尤其对于程序员来说,在工作中时常会用到逻辑运算符。今天就来一起了解一下逻辑运算符是什么?
用户8739990
2021/07/09
2.2K0
逻辑运算符是什么 逻辑运算符的种类
工作后的成长速度是如何产生差异的?
不要因为钱跳槽,为个人能力和背书增值而跳槽 当你面临选择时 平台,待遇,个人成长与空间,团队,行业 你更看重什么? 一定没有十全十美的选择 赋权排序吧 几年前原团队内有个小伙伴收到了迅雷和UC的Offer 最终选择了迅雷,因为多开了2K 然后UC变成了阿里UC,迅雷现在靠区块链实现股票上涨 不要辜负时间 在原岗位做出了成绩证明自己的价值后再走 那个时候精气神是不一样 讨价还价也有余地 哪里都会有坑和不如意 跳槽并不能一劳永逸,也许能解决上家公司的问题,但不能解决所有职场问题 重点是你当时
范蠡
2018/04/04
6560
“香山”处理器产生背后的逻辑
作者 | 老石谈芯的老石 来源 | 老石谈芯 在最近召开的RISC-V中国峰会上,中科院计算所的包云岗研究员团队正式发布了名为“香山”的开源高性能RISC-V处理器。前不久我有幸和包老师就这个事情做了一次深度的交流,我们聊了关于RISC-V、还有“香山”处理器的前世今生。包老师也分享了很多他关于开源硬件、新型开发语言、硬件敏捷设计、还有处理器基础架构等等这些问题的想法和学术思考,我深受启发。 包云岗简介 包云岗老师是中科院计算技术研究所研究员、副所长,先进计算机系统研究中心主任,中国科学院大学特聘教授,
AI科技大本营
2023/05/08
5330
“香山”处理器产生背后的逻辑
RxSwift核心逻辑——序列的产生以及订阅
RxSwift是Swift的一套响应式编程框架,如同OC的RAC。响应式编程的核心如下图:(来源于中文文档)。
CC老师
2022/01/12
5770
RxSwift核心逻辑——序列的产生以及订阅
Java的逻辑运算符
与运算符(&&)在两个操作数都为true时返回true。如果其中任何一个操作数为false,则返回false。以下是一个示例:
玖叁叁
2023/05/06
2910
我是如何看这个世界
首先这里要感谢大家支持。公众号第一篇文章发出后不到一星期就有500人关注,另外文章还被阿里天池的官方公众号转载,非常高兴能得到大家的认可。这段时间有很多朋友提供了宝贵的帮助和建议,包括一些大V主动转载并推荐我的公众号,小伟不胜感激。我这个人有一说一,别人对我的好我都会一直记着,你帮了我,日后若有需要尽管开口,我一定加倍帮你。
用户9656380
2022/04/14
5900
我是如何看这个世界
SQL的逻辑运算符和比较运算符
SQL是一种结构化查询语言,用于管理和操作关系型数据库。SQL中的逻辑运算符和比较运算符是进行数据筛选和比较的基础工具,本文将介绍SQL中常用的逻辑运算符和比较运算符,并给出示例进行说明。
玖叁叁
2023/04/11
1.1K0
Shell 基本运算符--逻辑运算符
逻辑运算符 以下介绍 Shell 的逻辑运算符,假定变量 a 为 10,变量 b 为 20: 运算符 说明 举例 && 逻辑的 AND [[ $a -lt 100 && $b -gt 100 ]] 返回 false || 逻辑的 OR [[ $a -lt 100 || $b -gt 100 ]] 返回 true 逻辑运算符实例如下: #!/bin/bash a=10 b=20 if [[ $a -lt 100 && $b -gt 100 ]] then echo "返回 true" else
陈不成i
2021/06/23
8310
有趣的赋值逻辑运算符
我们在写js逻辑的时候,不可否认的用到了很多逻辑的运算符,像||、&&这些,那么我们基本都是在三元运算符或者if判断里进行使用,那么我们其实可以在赋值的时候一样的使用,今天我们就看看怎么使用它来写一些看起来比较牛逼的代码!
何处锦绣不灰堆
2020/05/28
9040
计算机木马是如何产生的?原理是什么?
作为一个从业十几年的程序员来分析下计算机木马原理,计算机木马原来称呼为特洛伊木马,主要流传于古希腊,攻城不对久攻不下,于是让人专门制作了一个体积非常大的马,把士兵装进去然后攻城的时候故意仍在城墙边上,结果城里的人当成战利品把木马弄成城里,结果半夜藏在里面的士兵出来,偷偷把城门打开了,随即把城池拿下,就是典型的特洛伊木马案例,电脑的木马原理和这个最接近。近些年发生在国内的大规模的木马中毒事件,熊猫烧香病毒,就是典型的木马入侵案例,木马对计算机系统和网络都有相当大的危害。
程序员互动联盟
2018/12/13
2.5K0
计算机木马是如何产生的?原理是什么?
点击加载更多

相似问题

这个HashSet是如何产生排序输出的?

44

这个意外的比较输出是如何产生的?

20

这个逻辑与运算符是做什么的?

36

逻辑模式-产生预期的输出

16

解释输出是如何产生的

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文