Mysql学习笔记09——子查询

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Mysql学习篇

细枝末节

1. 子查询又叫内查询,是出现在其他语句中的SELECT语句

2. 与子查询对应的是主查询,又叫外查询

3. 子查询一般放在小括号中

4. 子查询一般放在条件右侧

5. 标量子查询一般搭配单行操作符:>,<,>=,<=,=,<>

6. 列子查询一般搭配多行操作符:IN,ANY/SOME,ALL

7. 子查询的执行优先于主查询执行,主查询的条件用到了子查询的结果

分类

按结果集的行列数

1. 标量子查询:   结果集为一行一列

2. 列子查询:     结果集为一列多行

3. 行子查询:     结果集为一行多列

4. 表子查询:     结果集为多行多列

按子查询出现位置

1. SELECT后面:             支持标量子查询

2. FROM后面:               支持表子查询

3. WHEREE或HAVING后面:     支持标量子查询,列子查询,行子查询

4. EXISTS后面:             支持表子查询

WHERE或HAVING后面

支持标量子查询,列子查询,行子查询

示例

查询工资比Abel高的员工信息

/* 1. 查询Abel的工资 */

SELECT salary

FROM emp

WHERE name ='Abel';


/* 2. 查询salary>1中结果的员工信息 */

SELECT*

FROM emp

WHERE salary > (

   SELECT salary

   FROM emp

   WHERE name ='Abel'

);

查询最低工资大于50号部门最低工资的部门id及其最低工资

/* 1. 查询50号部门的最低工资 */

SELECTMIN(salary)

FROM emp

WHERE dept_id =50;


/* 2. 查询每个部门的最低工资 */

SELECTMIN(salary), dept_id

FROM emp

GOURP BY dept_id;


/* 3. 在2的结果集上进行筛选,满足MIN(salary)>1中结果 */

SELECT dept_id, MIN(salary)

FROM emp

GROUPBY dept_id

HAVINGMIN(salary) > (

   SELECTMIN(salary)

   FROM emp

   WHERE dept_id =50

);

列子查询(多行子查询)

示例

查询location_id是1400或1700的部门的所有员工姓名

/* 1. 查询location_id是1400或1700的部门 */

SELECT id

FROM dept

WHERE loc_id IN(1400, 1700);


/* 2. 在1的结果中查询所有员工姓名 */

SELECT name

FROM emp

WHERE dept_id IN(

   SELECT id

   FROM dept

   WHERE loc_id IN(1400, 1700)

);

EXISTS后面

格式

/* 子查询有元素,结果为1;子查询无元素,结果为0 */

EXISTS(子查询)

示例

查询有员工的部门名

SELECT name

FROM dept

WHEREEXISTS(

   SELECT*

   FROM emp

   WHERE dept.id = emp.dept_id

);

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
152 6
|
13天前
|
存储 关系型数据库 MySQL
10个案例告诉你mysql不使用子查询的原因
大家好,我是V哥。上周与朋友讨论数据库子查询问题,深受启发。为此,我整理了10个案例,详细说明如何通过优化子查询提升MySQL性能。主要问题包括性能瓶颈、索引失效、查询优化器复杂度及数据传输开销等。解决方案涵盖使用EXISTS、JOIN、IN操作符、窗口函数、临时表及索引优化等。希望通过这些案例,帮助大家在实际开发中选择更高效的查询方式,提升系统性能。关注V哥,一起探讨技术,欢迎点赞支持!
|
5月前
|
SQL 关系型数据库 MySQL
在 MySQL 中使用子查询
【8月更文挑战第12天】
273 0
在 MySQL 中使用子查询
|
3月前
|
SQL 关系型数据库 MySQL
Mysql学习笔记(三):fetchone(), fetchmany(), fetchall()详细总结
MySQL中用于数据检索的`fetchone()`, `fetchmany()`, `fetchall()`函数的功能、SQL语句示例和应用场景。
95 3
Mysql学习笔记(三):fetchone(), fetchmany(), fetchall()详细总结
|
3月前
|
SQL Ubuntu 关系型数据库
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
本文为MySQL学习笔记,介绍了数据库的基本概念,包括行、列、主键等,并解释了C/S和B/S架构以及SQL语言的分类。接着,指导如何在Windows和Ubuntu系统上安装MySQL,并提供了启动、停止和重启服务的命令。文章还涵盖了Navicat的使用,包括安装、登录和新建表格等步骤。最后,介绍了MySQL中的数据类型和字段约束,如主键、外键、非空和唯一等。
82 3
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
|
3月前
|
关系型数据库 MySQL 数据库
Mysql学习笔记(四):Python与Mysql交互--实现增删改查
如何使用Python与MySQL数据库进行交互,实现增删改查等基本操作的教程。
76 1
|
4月前
|
SQL 缓存 关系型数据库
MySQL高级篇——关联查询和子查询优化
左外连接:优先右表创建索引,连接字段类型要一致、内连接:驱动表由数据量和索引决定、 join语句原理、子查询优化:拆开查询或优化成连接查询
|
5月前
|
SQL druid Java
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
67 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
|
5月前
|
SQL Java 关系型数据库
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(上)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
214 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(上)
|
5月前
|
SQL 关系型数据库 MySQL
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)(下)
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)
47 6