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 24 MySQL
MySql存储过程之逻辑判断和条件控制
May 26 MySQL
MySQL库表名大小写的选择
Jun 05 MySQL
mysql 数据插入优化方法之concurrent_insert
Jul 01 MySQL
MySQL 5.7常见数据类型
Jul 15 MySQL
MySQL定时备份数据库(全库备份)的实现
Sep 25 MySQL
MySQL七大JOIN的具体使用
Feb 28 MySQL
SQL注入篇学习之盲注/宽字节注入
Mar 03 MySQL
mysql的Buffer Pool存储及原理
Apr 02 MySQL
MySQL中IO问题的深入分析与优化
Apr 02 MySQL
MySQL创建管理KEY分区
Apr 13 MySQL
jdbc中自带MySQL 连接池实践示例
Jul 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和.net的区别
2014/09/28 PHP
php获取服务器操作系统相关信息的方法
2016/10/08 PHP
javascript RadioButtonList获取选中值
2009/04/09 Javascript
ASP小贴士/ASP Tips javascript tips可以当桌面
2009/12/10 Javascript
jquery创建并行对象或者合并对象的实现代码
2012/10/10 Javascript
关于Javascript与iframe的那些事儿
2013/07/04 Javascript
js+jquery实现图片裁剪功能
2015/01/02 Javascript
js实现界面向原生界面发消息并跳转功能
2016/11/22 Javascript
scroll事件实现监控滚动条并分页显示(zepto.js)
2016/12/18 Javascript
AngularJS ng-repeat指令中使用track by子语句解决重复数据遍历错误问题
2017/01/21 Javascript
webpack学习教程之publicPath路径问题详解
2017/06/17 Javascript
Node.js  事件循环详解及实例
2017/08/06 Javascript
EasyUI在Panel上动态添加LinkButton按钮
2017/08/11 Javascript
bootstrap3-dialog-master模态框使用详解
2017/08/22 Javascript
Vim快速合并行及vim 将文件所有行合并到一行
2017/11/27 Javascript
实例详解vue.js浅度监听和深度监听及watch用法
2018/08/16 Javascript
Vue 与 Vuex 的第一次接触遇到的坑
2018/08/16 Javascript
Django+vue跨域问题解决的详细步骤
2019/01/20 Javascript
详解如何在Javascript和Sass之间共享变量
2019/11/13 Javascript
前端深入理解Typescript泛型概念
2020/03/09 Javascript
vue渲染方式render和template的区别
2020/06/05 Javascript
深入学习Python中的上下文管理器与else块
2017/08/27 Python
DataFrame中去除指定列为空的行方法
2018/04/08 Python
python广度优先搜索得到两点间最短路径
2019/01/17 Python
详解PANDAS 数据合并与重塑(join/merge篇)
2019/07/09 Python
python 多维高斯分布数据生成方式
2019/12/09 Python
python中如何写类
2020/06/29 Python
html5跳转小程序wx-open-launch-weapp踩坑
2020/12/02 HTML / CSS
欧洲最大的滑雪假期供应商之一:Sunweb Holidays
2018/01/06 全球购物
老人节标语大全
2014/10/08 职场文书
项目经理岗位职责
2015/01/31 职场文书
幼师求职自荐信
2015/03/26 职场文书
2015年政教主任工作总结
2015/07/23 职场文书
2016年领导干部廉政承诺书
2016/03/24 职场文书
Python基础之元类详解
2021/04/29 Python
高性能跳频抗干扰宽带自组网电台
2022/02/18 无线电