【SQL】子查询

一.什么时候用子查询

  1. 当需要在一个查询中使用另一个查询的结果时,可以使用子查询。例如,需要在一个查询中使用另一个查询的结果作为条件进行过滤数据。

  2. 当需要在一个查询中进行聚合操作,但又需要使用另一个查询的结果进行比较或筛选时,可以使用子查询。

  3. 当需要在一个查询中进行多个条件的比较,而这些条件需要使用另一个查询的结果来确定时,可以使用子查询。

这样说很抽象直接看下面例题


二.过滤数据

链接:https://leetcode.cn/problems/sales-person/description/https://leetcode.cn/problems/sales-person/description/

这个题目的意思就是,寻找没有和名为"RED''公司相关订单的销售人员姓名,但是orders表里没有公司名字只有公司id,也没有人员名字只有人员id。

所以如果我们知道所有在 'RED' 这家公司有销售记录的销售员,那么得知没有的销售员也就很容易了。

查询所有在 'RED' 这家公司有销售记录的销售员的id:

sql 复制代码
select sales_id
from orders left join company
on orders.com_id=company.com_id
where name='RED'

用not in 筛选一下即可

sql 复制代码
# Write your MySQL query statement below

select name 
from salesperson
where sales_id not in
(select sales_id
from orders left join company
on orders.com_id=company.com_id
where name='RED')

三.聚合数据

链接:https://leetcode.cn/problems/biggest-single-number/description/https://leetcode.cn/problems/biggest-single-number/description/

这个题目的目的是找出在表中只出现过一次的最大的数。为了实现这个目的,首先需要找出所有只出现过一次的数,然后再从这些数中找出最大的那个数。

为了找出只出现过一次的数,需要使用GROUP BY子句对num进行分组,并使用HAVING子句筛选出只有一个记录的组。然后将这些数据作为子查询的结果,再从这个子查询的结果中找出最大的数。

因此,需要使用子查询来先聚合数据,然后再从聚合的结果中找出最大的数

sql 复制代码
# Write your MySQL query statement below
select max(num) 'num'
from(select num
from mynumbers
group by num
having count(*)=1
) as a;
相关推荐
花千树-01014 分钟前
MySQL 数据库备份和恢复全指南
数据库·mysql
·薯条大王18 分钟前
Node.js 操作 MySQL 数据库
javascript·数据库·mysql
weisian15134 分钟前
中间件--ClickHouse-6--SQL基础(类似Mysql,存在差异)
sql·clickhouse·中间件
Java_SuSheng38 分钟前
关于SQLite轻量数据库的研究
java·数据库·spring boot·sqlite·mybatis
学习2年半1 小时前
回溯算法:List 还是 ArrayList?一个深拷贝引发的思考
数据结构·算法·list
Gvemis⁹1 小时前
Spark-SQL
大数据·sql·spark
烁3471 小时前
每日一题(小白)暴力娱乐篇30
java·数据结构·算法·娱乐
maomi_95262 小时前
数据库学习通期末复习二
服务器·数据库
努力努力再努力wz2 小时前
【Linux实践系列】:用c/c++制作一个简易的进程池
linux·运维·数据库·c++·c
Y.O.U..4 小时前
力扣HOT100——无重复字符的最长子字符串
数据结构·c++·算法·leetcode