mysql 子查询的使用


Posted in MySQL onApril 28, 2022

出现在其他语句中的 select 语句,称为子查询或内查询;外部的查询语句,称为主查询或 外查询 . 

-- 子查询
-- 查询的条件来自于另一查询的结果
SELECT * FROM t_user WHERE number=(SELECT number FROM t_user WHERE NAME='张三')

当然子查询也有类型,分为以下几种 : 

  • 标量子查询(结果集只有一行一列)
  • 列子查询(结果集只有一列多行)
  • 行子查询(结果集有一行多列)(较少)
  • 表子查询(结果集一般为多行多列)

这里我们以新建t_user表为例

mysql 子查询的使用 

需要注意的是 : 这里的分类是根据内嵌子查询的结果来分的 例如上述的sql语句就是标量子查询

mysql 子查询的使用

子查询结果只有一行一列

接着我们根据子查询在sql语句中出现的位置来讨论 : 

select后面:仅仅支持标量子查询

-- select语句后面,将t1查询出的结果作为子查询的条件
SELECT t1.number,
  (SELECT NAME FROM t_user t2 WHERE t1.name = t2.name)
FROM t_user t1

查询结果 : 

mysql 子查询的使用

insert into , update和 delete后面 : 

insert into用来为表中插入数据 , 所以后面是可以跟列子查询和表子查询的

-- insert into 后跟子查询
INSERT INTO t_user(number,NAME,age,birthday,weight,sex,opertime)
       SELECT number,NAME,age,birthday,weight,sex,NOW() FROM t_user WHERE id=3

这里需要注意的是 update与delete

UPDATE t_user SET NAME='abc' WHERE number=(SELECT number FROM t_user WHERE weight=110)

DELETE FROM t_user WHERE id=(SELECT id FROM t_user WHERE id=7)

上述这两条sql , mysql是不允许我们这样去执行的 : 

mysql 子查询的使用

mysql的底层机制使得我们在操作此表的时候是不能去改变此表结构的 

也就是说,子查询不能查询当前正在操作的表

where 后面 : 可跟标量子查询, 列子查询, 行子查询

-- where后跟标量子查询
-- 查询体重最大的人信息
SELECT * FROM t_user WHERE weight=(SELECT MAX(weight) FROM t_user)
-- where后跟列子查询
-- 查询体重大于或等于130的人信息
SELECT * FROM t_user WHERE weight IN (SELECT weight FROM t_user WHERE weight>=130)
-- where后跟行子查询
-- 查询年龄最大,体重最大的人的信息
SELECT * FROM t_user 
     WHERE (age,weight) = (SELECT MAX(age),MAX(weight) FROM t_user)

from 后面 : 可跟表子查询

表字查询的结果是多行多列, 也就是一个表

-- 表子查询
SELECT t.age FROM (SELECT age,weight FROM t_user)t

结果 :

mysql 子查询的使用

到此这篇关于mysql详细分析讲解子查询的使用的文章就介绍到这了!


Tags in this post...

MySQL 相关文章推荐
MySQL Router的安装部署
Apr 24 MySQL
MySQL中你可能忽略的COLLATION实例详解
May 12 MySQL
详解GaussDB for MySQL性能优化
May 18 MySQL
如何搭建 MySQL 高可用高性能集群
Jun 21 MySQL
SQL实现LeetCode(176.第二高薪水)
Aug 04 MySQL
浅谈MySQL之select优化方案
Aug 07 MySQL
MySQL令人大跌眼镜的隐式转换
Aug 23 MySQL
mysql事务对效率的影响分析总结
Oct 24 MySQL
CentOS 7安装mysql5.7使用XtraBackUp备份工具命令详解
Apr 12 MySQL
详解Mysql数据库平滑扩容解决高并发和大数据量问题
May 25 MySQL
MySQL8.0 Undo Tablespace管理详解
Jun 16 MySQL
MySQL count(*)统计总数问题汇总
Sep 23 MySQL
Mysql 数据库中的 redo log 和 binlog 写入策略
Apr 26 #MySQL
优化Mysql查询的示例
Apr 26 #MySQL
MySQL的存储过程和相关函数
Apr 26 #MySQL
mysql 索引的数据结构为什么要采用B+树
MySQ InnoDB和MyISAM存储引擎介绍
pt-archiver 主键自增
Apr 26 #MySQL
提高系统的吞吐量解决数据库重复写入问题
Apr 23 #MySQL
You might like
php&java(二)
2006/10/09 PHP
Windows Apache2.2.11及Php5.2.9-1的安装与配置方法
2009/06/08 PHP
PHP函数http_build_query使用详解
2014/08/20 PHP
PHP GD库相关图像生成和处理函数小结
2016/09/30 PHP
php mysql数据库操作类(实例讲解)
2017/08/06 PHP
php插件Xajax使用方法详解
2017/08/31 PHP
PHP7 字符串处理机制修改
2021/03/09 PHP
Raphael带文本标签可拖动的图形实现代码
2013/02/20 Javascript
jQuery中click事件用法实例
2014/12/26 Javascript
html的DOM中document对象forms集合用法实例
2015/01/21 Javascript
基于jQuery.Hz2Py.js插件实现的汉字转拼音特效
2015/05/07 Javascript
jQuery判断元素是否显示 是否隐藏的简单实现代码
2016/05/19 Javascript
vue 权限认证token的实现方法
2018/07/17 Javascript
JS div匀速移动动画与变速移动动画代码实例
2019/03/26 Javascript
vue实现的封装全局filter并统一管理操作示例
2020/02/02 Javascript
多种类型jQuery网页验证码插件代码实例
2021/01/09 jQuery
Python二维码生成库qrcode安装和使用示例
2014/12/16 Python
python matplotlib画图实例代码分享
2017/12/27 Python
python通过getopt模块如何获取执行的命令参数详解
2017/12/29 Python
Tornado 多进程实现分析详解
2018/01/12 Python
Django项目中model的数据处理以及页面交互方法
2018/05/30 Python
Python使用pandas处理CSV文件的实例讲解
2018/06/22 Python
Python之循环结构
2019/01/15 Python
在Python 的线程中运行协程的方法
2020/02/24 Python
Python单例模式的四种创建方式实例解析
2020/03/04 Python
浅谈pytorch中的BN层的注意事项
2020/06/23 Python
Python基础进阶之海量表情包多线程爬虫功能的实现
2020/12/17 Python
详解如何使用Pytest进行自动化测试
2021/01/14 Python
国际领先的学术出版商:Springer
2017/01/11 全球购物
C# .NET面试题
2015/11/28 面试题
老公给老婆的道歉信
2014/01/10 职场文书
党员应该树立反腐倡廉的坚定意识思想汇报
2014/09/12 职场文书
2015年妇委会工作总结
2015/05/22 职场文书
幼儿园2016年圣诞活动总结
2016/03/31 职场文书
《鲁班学艺》读后感3篇
2019/11/27 职场文书
聊聊Python String型列表求最值的问题
2022/01/18 Python