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部分操作
Apr 05 MySQL
MySQL pt-slave-restart工具的使用简介
Apr 07 MySQL
MySQL 使用SQL语句修改表名的实现
Apr 07 MySQL
详解MySQL InnoDB存储引擎的内存管理
Apr 08 MySQL
MySQL触发器的使用
May 24 MySQL
如何设计高效合理的MySQL查询语句
May 26 MySQL
Mysql实现主从配置和多主多从配置
Jun 02 MySQL
MySQL系列之八 MySQL服务器变量
Jul 02 MySQL
mysql中DCL常用的用户和权限控制
Mar 31 MySQL
mysql 索引的数据结构为什么要采用B+树
Apr 26 MySQL
优化Mysql查询的示例
Apr 26 MySQL
了解MySQL查询语句执行过程(5大组件)
Aug 14 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+DBM的同学录程序(3)
2006/10/09 PHP
PHP观察者模式原理与简单实现方法示例
2017/08/25 PHP
从零开始学习jQuery (八) 插播:jQuery实施方案
2011/02/23 Javascript
兼容ie、firefox的图片自动缩放的css跟js代码分享
2012/01/21 Javascript
javascript抖动元素的小例子
2013/10/28 Javascript
JavaScript之Object类型介绍
2015/04/01 Javascript
JQuery球队选择实例
2015/05/18 Javascript
readonly和disabled属性的区别
2015/07/26 Javascript
js和jquery实现监听键盘事件示例代码
2020/06/24 Javascript
Jquery和JS获取ul中li标签的实现方法
2016/06/02 Javascript
scroll事件实现监控滚动条并分页显示(zepto.js)
2016/12/18 Javascript
jQuery用户头像裁剪插件cropbox.js使用详解
2017/06/07 jQuery
js构建二叉树进行数值数组的去重与优化详解
2018/03/26 Javascript
Vue.js 实现微信公众号菜单编辑器功能(二)
2018/05/08 Javascript
Vue面试题及Vue知识点整理
2018/10/07 Javascript
angular4 获取wifi列表中文显示乱码问题的解决
2018/10/20 Javascript
Vue CLI 2.x搭建vue(目录最全分析)
2019/02/27 Javascript
微信小程序实现的绘制table表格功能示例
2019/04/26 Javascript
微信小程序位置授权处理方法
2019/06/13 Javascript
关于Layui Table隐藏列问题
2019/09/16 Javascript
Vue数字输入框组件示例代码详解
2020/01/15 Javascript
JQuery复选框全选效果如何实现
2020/05/08 jQuery
[51:15]完美世界DOTA2联赛PWL S2 PXG vs Magma 第一场 11.21
2020/11/24 DOTA
初学python数组的处理代码
2011/01/04 Python
python中Flask框架简单入门实例
2015/03/21 Python
Python3利用Dlib19.7实现摄像头人脸识别的方法
2018/05/11 Python
值得收藏,Python 开发中的高级技巧
2018/11/23 Python
关于Python3爬虫利器Appium的安装步骤
2020/07/29 Python
属性与 @property 方法让你的python更高效
2020/09/21 Python
Html5嵌入钉钉的实现示例
2020/06/04 HTML / CSS
Ticketmaster德国票务网站:购买音乐会和体育等门票
2016/11/14 全球购物
Peter Alexander新西兰站:澳大利亚领先的睡衣设计师品牌
2016/12/10 全球购物
美国护肤咨询及美容产品电商:Askderm
2017/02/24 全球购物
幼儿园园长工作总结2015
2015/05/25 职场文书
2016年小学植树节活动总结
2016/03/16 职场文书
Python四款GUI图形界面库介绍
2022/06/05 Python