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 InnoDB存储引擎的内存管理
Apr 08 MySQL
MySQL 视图(View)原理解析
May 19 MySQL
修改MySQL的默认密码的四种小方法
May 26 MySQL
MySQL 常见存储引擎的优劣
Jun 02 MySQL
mysql如何配置白名单访问
Jun 30 MySQL
浅谈MySql整型索引和字符串索引失效或隐式转换问题
Nov 20 MySQL
Mysql中有关Datetime和Timestamp的使用总结
Dec 06 MySQL
MySQL数据库⾼可⽤HA实现小结
Jan 22 MySQL
详细聊一聊mysql的树形结构存储以及查询
Apr 05 MySQL
MySQL数据库查询进阶之多表查询详解
Apr 08 MySQL
MYSQL如何查看操作日志详解
May 30 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实现无限分类的实现方法
2016/11/14 PHP
简单的php购物车代码
2020/06/05 PHP
JavaScript实现Sleep函数的代码
2007/03/04 Javascript
js href的用法
2010/05/13 Javascript
jsonp原理及使用
2013/10/28 Javascript
js不能获取隐藏的div的宽度只能先显示后获取
2014/09/04 Javascript
Jquery $.getJSON 在IE下的缓存问题解决方法
2014/10/10 Javascript
javascript闭包(Closure)用法实例简析
2015/11/30 Javascript
js文本框输入内容智能提示效果
2015/12/02 Javascript
基于jquery插件实现拖拽删除图片功能
2020/08/27 Javascript
原生js的数组除重复简单实例
2016/05/24 Javascript
require简单实现单页应用程序(SPA)
2016/07/12 Javascript
用最简单的方法判断JavaScript中this的指向(推荐)
2017/09/04 Javascript
JavaScript执行环境及作用域链实例分析
2018/08/01 Javascript
vue 指令之气泡提示效果的实现代码
2018/10/18 Javascript
前端插件之Bootstrap Dual Listbox使用教程
2019/07/23 Javascript
使用typescript构建Vue应用的实现
2019/08/26 Javascript
SSM+layUI 根据登录信息显示不同的页面方法
2019/09/20 Javascript
小程序Scroll-view上拉滚动刷新数据
2020/06/21 Javascript
跟老齐学Python之集合(set)
2014/09/24 Python
python检测是文件还是目录的方法
2015/07/03 Python
python装饰器-限制函数调用次数的方法(10s调用一次)
2018/04/21 Python
对python中矩阵相加函数sum()的使用详解
2019/01/28 Python
Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统
2019/09/05 Python
Python实现图片裁剪的两种方式(Pillow和OpenCV)
2019/10/30 Python
利用CSS3的3D效果制作正方体
2020/03/10 HTML / CSS
Nisbets爱尔兰:英国最大的厨房和餐饮设备供应商
2019/01/26 全球购物
在职研究生自我鉴定
2013/10/16 职场文书
大学生优秀的自我评价分享
2013/10/22 职场文书
社区党员先进事迹
2014/01/22 职场文书
承诺书的格式范文
2014/03/28 职场文书
学校通报表扬范文
2015/05/04 职场文书
民事调解书范文
2015/05/20 职场文书
劳动仲裁代理词范文
2015/05/25 职场文书
Go语言并发编程 sync.Once
2021/10/16 Golang
聊聊SpringBoot自动装配的魔力
2021/11/17 Java/Android