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 22 MySQL
详解MySQL中的主键与事务
May 27 MySQL
深入解析MySQL索引数据结构
Oct 16 MySQL
浅谈mysql哪些情况会导致索引失效
Nov 20 MySQL
MySQL之MyISAM存储引擎的非聚簇索引详解
Mar 03 MySQL
Innodb存储引擎中的后台线程详解
Apr 03 MySQL
MySQL GTID复制的具体使用
May 20 MySQL
mysql5.5中文乱码问题解决的有用方法
May 30 MySQL
sql查询语句之平均分、最高最低分及排序语句
May 30 MySQL
MySQL详细讲解变量variables的用法
Jun 21 MySQL
MySQL实现字段分割一行转多行的示例代码
Jul 07 MySQL
MySQL事务的ACID特性以及并发问题方案
Jul 15 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
xajax写的留言本
2006/11/25 PHP
PHP数据类型之整数类型、浮点数的介绍
2013/04/28 PHP
PHP 5.6.11 访问SQL Server2008R2的几种情况详解
2016/08/08 PHP
PHP中include()与require()的区别说明
2017/02/14 PHP
Javascript 对象的解释
2008/11/24 Javascript
获取dom元素那些讨厌的位置封装代码
2010/06/23 Javascript
Javascript 鼠标移动上去 滑块跟随效果代码分享
2013/11/23 Javascript
Javascript正则控制文本框只能输入整数或浮点数
2014/09/02 Javascript
jquery单选框radio绑定click事件实现方法
2015/01/14 Javascript
javascript实现带节日和农历的日历特效
2015/02/01 Javascript
jquery实现增加删除行的方法
2015/02/03 Javascript
第一次接触神奇的Bootstrap导航条
2016/08/09 Javascript
微信小程序 两种滑动方式(横向滑动,竖向滑动)详细及实例代码
2017/01/13 Javascript
jquery mobile移动端幻灯片滑动切换效果
2020/04/15 Javascript
BootStrap daterangepicker 双日历控件
2017/06/02 Javascript
vue中对象数组去重的实现
2020/02/06 Javascript
如何优雅地取消 JavaScript 异步任务
2020/03/22 Javascript
详解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和区别
2017/06/23 Python
Python_LDA实现方法详解
2017/10/25 Python
使用python对文件中的单词进行提取的方法示例
2018/12/21 Python
详解Python 中sys.stdin.readline()的用法
2019/09/12 Python
TensorFlow使用Graph的基本操作的实现
2020/04/22 Python
Keras中的多分类损失函数用法categorical_crossentropy
2020/06/11 Python
Python文件夹批处理操作代码实例
2020/07/21 Python
HTML5使用DOM进行自定义控制示例代码
2013/06/08 HTML / CSS
有abstract方法的类一定要用abstract修饰吗
2016/03/14 面试题
毕业生的自我评价范文
2013/12/31 职场文书
粗加工管理制度
2014/02/04 职场文书
中学生学雷锋演讲稿
2014/04/26 职场文书
园林系毕业生求职信
2014/06/23 职场文书
基层干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
初中成绩单评语
2014/12/29 职场文书
委托公证书样本
2015/01/23 职场文书
工作试用期自我评价
2015/03/10 职场文书
离婚承诺书格式范文
2015/05/04 职场文书
python绘制箱型图
2021/04/27 Python