MySQL 子查询(多表查询 三)

news2025/4/25 17:44:03

概念

SQL语句中嵌套select语句,称为嵌套查询,又称子查询,它可以在查询过程中使用其他查询的结果。

基本语法:

select * from t1 where column1 = ( select column1 from t2 );

子查询外部的语句可以是insert/ update/ delete/ select的任何一个(实现更精确的操作)。

基本分类

根据子查询结果不同--主要分类

1. 标量子查询(子查询结果为单个值)
2. 列子查询(子查询结果为一列)
3. 行子查询(子查询结果为一行)
4. 表子查询(子查询结果为多行多列)

根据子查询位置--分类

1. where之后
2. from之后
3. select之后

标量子查询

子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式,这种子查询称为标量子查询。
常用的操作符:=    <>(不等于符号)   >   >=   <   <=

基本语法:

select 列名
from 表名
where 列名 操作符 (子查询语句);

示例:

-- 查询员工表中年龄最大的员工的姓名和年龄。
select name, age
from employees
where age = (select max(age) from employees);

-- 根据 "销售部" 部门id, 查询员工信息
select name 员工姓名,department_id 归属部门 
from employees 
where department_id = (select id from departments where name = '销售部');

列子查询

子查询返回的结果是一列(可以是多行),这种子查询称为列子查询。
常用的操作符:

操作符作用
in在指定的集合范围之内,多选一
not in不在指定的集合范围之内
any子查询返回列表中,有任意一个满足即可(任一)
some与any等同,使用some的地方都可以使用any
all子查询返回列表的所有值都必须满足(所有)

in、not in与any、some、all的使用区别:

in操作符本身就表示等值比较,不能加上"="之类的操作符使用

any操作符本身没有比较,需要加上" < "之类的操作符才能使用

基本语法:

select 列名
from 表名
where 列名 操作符  (子查询语句);

示例:

操作一般分为两步:先列出子查询,然后添加到外部操作内部(这样无论是编写,还是查错都十分方便)

-- 1.先建立子查询:查询两个部门id
select id 
from departments 
where name = '销售部' or name = '市场部';
-- 2.再将子查询添加到外部操作:根据部门id查询员工
select * 
from employees 
where department_id in (select id from departments where name = '销售部' or name = '市场部');
-- 1.查询各个部门平均年龄
select department_id 部门, avg(age) 平均年龄  
from employees
group by department_id;
-- 2.查询员工表中年龄大于 所有部门 平均年龄的员工的姓名和年龄
select name,age
from employees
where age > all (select avg(age) from employees group by department_id);

行子查询

子查询返回的结果是一行(可以是多列),这种子查询称为行子查询。
常用的操作符:= 、<> 、in、not in

基本语法:

select 列名
from 表名
where (列1, 列2, ...) 操作符 (子查询语句);

示例

-- 查询员工表中与某个员工年龄和性别完全相同的员工的姓名和邮箱
select name, email
from employees
where (age, gender) = (select age, gender from employees where name = '李白');

表子查询

子查询返回的结果是多行多列,这种子查询称为表子查询。
常用的操作符:in

基本语法

select 列名
from 表名
where (列1, 列2, ...) 操作符 (子查询语句);

示例

-- 1.查询两个员工年龄和部门
select age, department_id 
from employees 
where name = '李白' or name = '张三';

-- 2.查询员工中哪些人年龄和部门与这两个之一相同
select * 
from employees 
where (age,department_id) in 
( select age, department_id from employees where name = '李白' or name = '张三' );

上一篇:MySQL 连接查询(多表查询 二)

下一篇:

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

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

相关文章

Docker的学习记录

Docker是一个被广泛使用的开源容器引擎&#xff0c;基于Go语言&#xff0c;遵从Apache2.0协议开源。 docker的三个概念&#xff1a;容器、镜像和仓库。 镜像&#xff08;Image&#xff09;&#xff1a;镜像是Docker中的一个模板。通过 Docker镜像 来创建 Docker容器&#xff…

四川玖璨公司抖音收费多少?

首先&#xff0c;从公司背景来看&#xff0c;四川玖璨电子商务有限公司是一家专注于电子商务领域的公司&#xff0c;经验丰富且有一支优秀的团队。作为一家专业的抖音培训公司&#xff0c;他们推出的抖音培训项目肯定是建立在自己经验与实践的基础上&#xff0c;并且对市场的变…

SpringBoot2.x整合Jedis客户端详细过程

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;啥技术都喜欢捣鼓捣鼓&#xff0c;喜欢分享技术、经验、生活。 &#x1f60e;人生感悟&#xff1a;尝尽人生百味&#xff0c;方知世间冷暖。 &#x1f4d6;所属专栏&#xff1a;Sp…

dependencies

这个dependencies 软件显示dll的functions有的时候不全。 他本来可以看function。但是有时构造体的自动生成的构造函数是没有的。 这个dll在生成lib里面其实会有自动生成的构造函数。

selenium自动化测试-获取网页截图

今天学习下使用selenium自动化测试工具获取网页截图。 1&#xff0c;如果是简单获取当前屏幕截图只需要使用方法&#xff1a; driver.get_screenshot_as_file(screenshot.png) 2&#xff0c;如果想获取完整网页长宽的截图需要设置参数后使用该方法&#xff1a; 首先打开驱动方…

提升科研效率的关键:掌握3D科研绘图技能【文末送书】

提升科研效率的关键&#xff1a;掌握3D科研绘图技能 引言3D科研绘图的重要性和应用领域 3D科研绘图基础3D科研绘图的定义和重要性3D科研绘图的基本概念和技术 书籍简介书籍亮点核心内容内容简介作者简介 购买链接参与方式往期赠书回顾 引言 3D科研绘图的重要性和应用领域 3D科…

Ant-Design-Pro-V5 :ProTable自定义搜索菜单操作栏和搜索事件、列表工具栏操作。

import React, { useRef, useState, useEffect } from react; import { Button, Form } from antd; import { PageContainer, ProTable} from ant-design/pro-components; const Demo () > { const beforeSearchSubmit (params) > {//par 就是你搜索表单输入的内容 } co…

3D科研绘图与学术图表绘制:从入门到精通

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 3D科研绘图和学术图表绘…

运行时内存分配

目录 一、程序计数器 二、虚拟机栈 3、本地方法栈 4、Java堆&#xff08;Heap) 5、方法区 很多人将 JAVA 内存分为堆内存(Heap)和栈内存(Stack)&#xff0c;这种划分方式在一定程度上体现这两块区域是 Java 工程师最关注的内存区域。但是这种划分方式并不完全正确&#xf…

AttributeError: ‘Prophet‘ object has no attribute ‘stan_backend‘解决方案

在使用Facebook prophet过程遇到如下问题&#xff1a; 代码如下&#xff1a; from prophet import Prophet model Prophet()执行程序报如下错误&#xff1a; File "D:\Python\Python38\lib\site-packages\prophet\forecaster.py", line 156, in _load_stan_backend…

如何构建基于大模型的App

ChatGPT 的出现让大模型再一次成为业界的关注热点&#xff0c;然而&#xff0c;并不是每个组织都要去训练及生成大模型的&#xff0c;而且各个组织的技术积累和计算资源也不太允许这样去做。更多的时候&#xff0c; 我们还是基于大模型开发业务应用。所谓智能原生&#xff08;A…

Spring MVC 入门指南

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

Windows系统利用cpolar内网穿透搭建Zblog博客网站并实现公网访问内网!

文章目录 1. 前言2. Z-blog网站搭建2.1 XAMPP环境设置2.2 Z-blog安装2.3 Z-blog网页测试2.4 Cpolar安装和注册 3. 本地网页发布3.1. Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1. 前言 想要成为一个合格的技术宅或程序员&#xff0c;自己搭建网站制作网页是绕…

使用github创建个人页面,以及git的两种使用方式

目录 前言记录如何使用vs code提交代码 一、个人页面的创建二、Git的使用1.Git的工作原理2. 如何使用VS Code同步代码到远程仓库参考3. 如何在github网页上提交更新 前言 本篇主要介绍两个干货&#xff1a;1、如何利用github创建个人页面&#xff0c;对于学者范儿的从业人员可…

【已解决】windows10误删环境变量Path

【已解决】windows10误删环境变量Path 1.问题描述 进行python环境配置时&#xff0c;误删Path全部环境变量 2.解决原理及操作 图形化界面修改Path&#xff1a;同步到注册表&#xff0c;立即生效&#xff0c;已打开的cmd不会生效cmd命令修改Path&#xff1a;同步到注册表&am…

报错处理:Java休眠时在CPU上运行

大家好&#xff0c;今天我来分享一个我在运维过程中遇到的问题&#xff0c;关于Linux上Tomcat启动时出现的“Java休眠时在CPU上运行”的报错&#xff0c;以及如何解决这个问题的。 首先&#xff0c;让我们来看看这个报错信息。当你在启动Tomcat时&#xff0c;如果你看到类似的错…

SpringMVC 学习(四)RestFul 风格

5. RestFul 风格 5.1 简介 概念 Restful就是一个资源定位及资源操作的风格。不是标准也不是协议&#xff0c;只是一种风格。基于这个风格设计的软件可以更简洁&#xff0c;更有层次&#xff0c;更易于实现缓存等机制。 功能 资源&#xff1a;互联网所有的事物都可以被抽象为…

【冰糖R语言】创建R包(打包R程序)

目标&#xff1a;将现有R程序打包 可能涉及知识点&#xff1a;devtools包、usethis包、Rstudio软件 一、R包的类型 通常一个R包中包含以下元素&#xff1a; 1&#xff09;R文件夹&#xff1a;函数代码 2&#xff09;man文件夹&#xff1a;存放每个函数的注释文件 3&#x…

千万别把工作 当成天大的事

作者| Mr.K 编辑| Emma 来源| 技术领导力(ID&#xff1a;jishulingdaoli) 工作不是我们的“主业”&#xff0c;人生才是。K哥一位前同事的遭遇&#xff0c;让我对这句话有了更深的感受。这位前同事&#xff0c;是某大厂高管&#xff0c;由于长期作息不规律和巨大工作压力&…