SQL备忘--子查询与ALL/ANY运算符

概念

在SQL查询语句中包含了其他的查询语句,出现了SQL语句的嵌套,即为使用了嵌套子查询

子查询用法

子查询可以用在:

  • SELECT查询字段中
  • FROM表名语句中
  • WHERE条件中

由此可见子查询用法广泛,可用在SQL基本语句的每个位置。但具体每个位置的查询会有要求,下面具体说明

1. SELECT查询字段中

可直接用在select处的查询字段输出中,如下:

SELECT name as "老师姓名", 
(	SELECT AVG(s.score) 			-- 均分	FROM student sWHERE s.class = t.class		-- 此老师的班级
) as "学生平均分"
FROM teacher t

此时需注意:

  1. 子查询可以使用外部查询的字段,也就是和外部查询产生关联(关联子查询Correlated Subquery)
  2. 查询结果必须只有单个值(标量子查询Scalar Subquery),即不能出现多条数据,也不能出现多个列,否则会报错。本例通过AVG()函数确保只返回一个值
2. 在FROM表名语句中
SELECT t.name as "老师姓名", 
s.avg_score	as "平均分"
FROM teacher t,
(	SELECT class, AVG(score) as avg_scoreFROM studentGROUP BY class
) s
WHERE t.class = s.class

此时注意点:

  1. 子查询可以使用外部查询的字段,也就是和外部查询产生关联,此时需要用 LATERAL关键字。本例中可以写为:
SELECT t.name as "老师姓名", 
ss.avg_score as "平均分"
FROM teacher t,
LATERAL (	SELECT AVG(s.score) as avg_score				FROM student sWHERE t.class = s.class
)  ss

仅Oracle、Mysql、PostgreSQL支持 LATERAL关键字

  1. 查询结果可以是单值,也可以是多条数据(集合)。若为多条数据时需要注意匹配,防止出现笛卡尔积的情况
3. 在WHERE条件中
SELECT *
FROM teacher t
WHERE class IN (	SELECT s.class 			-- 查找均分大于80分的班级		FROM student sWHERE s.class = t.class		-- 筛选有老师的学生班级GROUP BY s.class HAVING AVG(s.score) > 80
)

此时需注意:

  1. WHERE子查询可以使用外部查询的字段,也就是和外部查询产生关联(关联子查询Correlated Subquery)
  2. 查询结果即可以为单个值(标量子查询Scalar Subquery),也可为一行数据(一行数据多列,行子查询Row Subquery)、多条数据(Table Subquery)。

单值时,外部可用=号判断子查询的结果。此时需确保查询结果不能出现多行或多列的情况,否则sql报错
单行数据时,外部也可以用=号判断子查询的结果,只是等号左边要写成多个数据在()内的格式
多行数据时,使用IN、或者ALL、ANY运算符来进行匹配,例如下例子

WHERE (class, grade) IN (	SELECT s.class , s.grade			FROM student sWHERE s.class = t.class	GROUP BY s.class, s.grade HAVING AVG(s.score) > 80
)

子查询中的ALL、ANY运算符

SQL的子查询中,可能查询到多个结果,因此一般都用IN来匹配

SELECT *
FROM student
WHERE class IN (SELECT class FROM teacherWHERE grade = 1
)

此时,可以通过比较运算符(=、!=、<、<=、>、>=)与ALL、ANY的组合,来表示等于、不等于、大于…集合中的全部数据

SELECT *
FROM student
WHERE class =ANY (		-- 查找属于1年级的学生SELECT class FROM teacherWHERE grade = 1
)

ALL运算符相当于:对其中每个选项进行比较运算符计算,并用AND运算符串联
IN运算符相当于:对其中每个选项进行=运算符计算,并用OR运算符串联
ANY与IN类似,也是由OR运算符串联比较运算符写于ANY之前;如果是=ANY,则与IN相同

要注意

  • "=ALL"必然会返回NULL(除非后面的集合中只有一个元素值)。因为它等同于 c1 = “x1” AND c1 = “x2” AND c1 = “x3” … ,当等式有两项及以上时,表中的每条数据带入此公式中,必然有被判断为FALSE的子项,导致整个判断为FALSE,数据被过滤掉
  • !=ANY必然返回所有结果(除非后面的集合中只有一个元素值)。因为它等同于 c1 != "x1 OR c1 != “x2” OR c1 != “x3” …,当等式有两项及以上时,表中的每条数据带入此公式中,必然有被判断为TRUE的子项,导致整个判断为TRUE,使得数据被选择
SELECT *
FROM student
WHERE class !=ANY (		-- 查找不属于1年级所有班级的学生,设施SELECT class FROM teacherWHERE grade = 1
)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习Go语言Web框架Gee总结--前缀树路由Router(三)

学习Go语言Web框架Gee总结--前缀树路由Router router/gee/trie.gorouter/gee/router.gorouter/gee/context.gorouter/main.go 学习网站来源&#xff1a;Gee 项目目录结构&#xff1a; router/gee/trie.go 实现动态路由最常用的数据结构&#xff0c;被称为前缀树(Trie树) 关…

python代码大全(持续更新)

读写文件 # 读取文件 with open(file.txt, r) as file:content file.read()# 写入文件 with open(file.txt, w) as file:file.write(Hello, World!)HTTP请求 import requestsresponse requests.get(https://api.example.com/data) data response.json()JSON处理 import j…

机器学习中聚类算法-简单介绍

聚类算法 聚类算法&#xff1a; 将数据分成不同的组&#xff0c;如K均值&#xff08;K-Means&#xff09;和层次聚类&#xff08;Hierarchical Clustering&#xff09;。 聚类是机器学习中一类重要的无监督学习问题&#xff0c;其目标是将数据集中的样本划分为不同的组&#x…

【AI】目标检测算法DETR源码解析及推理测试

说到目标检测&#xff0c;自然而然我们会想到YOLO这个框架&#xff0c;YOLO框架已经发展到V8版本了&#xff0c;各种应用也比较成熟&#xff0c;不过我最近在研究Transformer&#xff0c;今天的主角是Transformer在目标检测的开山之作&#xff1a;DETR&#xff1a;End-to-End O…

FairGuard游戏加固产品常见问题解答

针对日常对接中&#xff0c;各位用户对FairGuard游戏加固方案在安全性、稳定性、易用性、接入流程等方面的关注&#xff0c;我们梳理了相关问题与解答&#xff0c;希望可以让您对产品有一个初步的认知与认可。 Q1:FairGuard游戏加固产品都有哪些功能? A&#xff1a;FairGuar…

结构体详解

结构体&#xff1a; 一系列具有相同类型或不同类型的数据构成的数据集合&#xff0c;也叫结构 结构体可以用来封装一些属性来组成新的类型。 结构体的大小&#xff1a; 结构体的大小不是结构体元素单纯相加。内存对齐&#xff08;若计算机使用32位字长的cpu&#xff0c;对32位的…

【算法】dp题单

题单链接&#xff1a; https://vjudge.net/contest/574209#overview 目录 1. 洛谷 P1020 导弹拦截 &#xff08;dp二分Dilworth 定理&#xff09; 2. P1439 最长公共子序列&#xff08;二分求最长公共子序列&#xff09; 3. 洛谷 P1854 花店橱窗布置 &#xff08;线性dp 用…

OpenFeign

OpenFeign 一、基本使用 1、引入依赖 <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId><groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-start…

k8s的网络

k8s的网络 k8s中的通信模式&#xff1a; 1、pod内部之间容器与容器之间的通信 在同一个pod中的容器共享资源和网络&#xff0c;使用同一个网络命名空间&#xff0c;可以直接通信的 2、同一个node节点之内&#xff0c;不同pod之间的通信 每个pod都有一个全局的真实的ip地址…

“MapStruct妙用指南:解锁Java对象映射的强大力量!“ ️

目录 1-10 MapStruct进阶问题解析11-20 MapStruct进阶问题解析感谢阅读 前言&#xff1a; 欢迎来到今天的博客&#xff0c;我们将一同探索Java领域中一款备受瞩目的对象映射框架 — MapStruct。它的强大之处不仅在于简化代码&#xff0c;更在于提高开发效率。在本文中&#xf…

BMS均衡技术

一、电池的不一致性&#xff1f; 每个电池都有自己的“个性”&#xff0c;要说均衡&#xff0c;得先从电池谈起。即使是同一厂家同一批次生产的电池&#xff0c;也都有自己的生命周期、自己的“个性”——每个电池的容量不可能完全一致。例如以下的两个原因都会造成电池不一致…

CSS中的object-fit和background-size

上面文章总结了下img标签和background-image的区别&#xff0c;这篇文章介绍一下其相关属性。 object-fit CSS属性指定可替换元素&#xff08;例如&#xff1a;<img> 或 <video>&#xff09;的内容应该如何适应到其使用高度和宽度确定的框。object-fit的默认值是…

docker部署mysql

1.查找mysql镜像 [rootVM-4-5-centos ~]# docker search mysql NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL is a widely used, open-sourc…

AnyText:多语言视觉文字生成与编辑——最详细傻瓜式安装教程

先看图,下面都是AnyText生成的,可以说效果效果确实是很震撼了。 附上地址: GitHub - tyxsspa/AnyTextContribute to tyxsspa/AnyText development by creating an account on GitHub.https://github.com/tyxsspa/AnyText接下来开始详细讲解安装过程: 1. 下载项目 (1)下…

全国计算机等级考试| 二级Python | 真题及解析(8)

1. 数据库系统的核心是___________。 A数据库管理系统 B数据模型 C软件工具 D数据库 正确答案: A 2. 下列叙述中正确的是___________。 A线性表链式存储结构的存储空间可以是连续的,也可以是不连续的 B线性表链式存储结构与顺序存储结构的存储空间都是连续的 C线性表…

探讨JVM垃圾回收机制与内存泄漏

目录 1. 垃圾回收机制的基本原理 2. 内存泄漏的定义与表现 3. 垃圾回收机制的局限性 4. Finalizer导致的延迟 5. 不当使用静态集合 6. JNI资源未释放 7. 解决内存泄漏的方法 8. 结语 在Java虚拟机&#xff08;JVM&#xff09;的世界中&#xff0c;垃圾回收机制被设计用…

电磁波的信号加载说明

电磁波的信号加载电磁波(Electromagnetic wave)是由同相振荡 且互相垂直的电场与磁场在空间中衍生发射的振荡粒子波&#xff0c;是以波动的形式传播的电磁场&#xff0c;具有波粒二象性&#xff0c;其粒子形态称为光子&#xff0c;电磁波与光子不是非黑即白的关系&#xff0c;而…

外显和呼叫系统的关系

经常接到推销电销&#xff0c;对于不同号码显示&#xff0c;我们选择接听电话和挂断电话的概率也是不一样的。 我们接到号码有显示运营商和归属地名称。 例如&#xff1a;北京 移动&#xff0c;广东深圳 电信&#xff0c;广电&#xff0c;广东广州 虚拟运营商等&#xff1b; 有…

快速打通 Vue 3(二):响应式对象基础

很激动进入了 Vue 3 的学习&#xff0c;作为一个已经上线了三年多的框架&#xff0c;很多项目都开始使用 Vue 3 来编写了 这一组文章主要聚焦于 Vue 3 的新技术和新特性 如果想要学习基础的 Vue 语法可以看我专栏中的其他博客 Vue&#xff08;一&#xff09;&#xff1a;Vue 入…

Flink-【时间语义、窗口、水位线】

1. 时间语义 1.1 事件时间&#xff1a;数据产生的事件&#xff08;机器时间&#xff09;&#xff1b; 1.2 处理时间&#xff1a;数据处理的时间&#xff08;系统时间&#xff09;。 &#x1f330;&#xff1a;可乐 可乐的生产日期 事件时间&#xff08;可乐产生的时间&…