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 InnoDB存储引擎的内存管理
Apr 08 MySQL
分析MySQL抛出异常的几种常见解决方式
May 18 MySQL
Mysql中 unique列插入重复值该怎么解决呢
May 26 MySQL
一文读懂navicat for mysql基础知识
May 31 MySQL
mysql连接查询中and与where的区别浅析
Jul 01 MySQL
MySQL系列之六 用户与授权
Jul 02 MySQL
MySQL一些常用高级SQL语句
Jul 03 MySQL
MySQL之select、distinct、limit的使用
Nov 11 MySQL
MySQL和Oracle批量插入SQL的通用写法示例
Nov 17 MySQL
MySQL 逻辑备份 into outfile
May 15 MySQL
mysql数据库实现设置字段长度
Jun 10 MySQL
MySQL数据管理操作示例讲解
Dec 24 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
《Re:从零开始的异世界生活 冰结之绊》
2020/04/09 日漫
基于mysql的论坛(2)
2006/10/09 PHP
javascript+php实现根据用户时区显示当地时间的方法
2015/03/11 PHP
PHP动态规划解决0-1背包问题实例分析
2015/03/23 PHP
php获取本机真实IP地址实例代码
2016/03/31 PHP
PHP Header用于页面跳转时的几个注意事项
2016/10/21 PHP
图像替换新技术 状态域方法
2010/01/28 Javascript
避免 showModalDialog 弹出新窗体的原因分析
2010/05/31 Javascript
Javascript继承(上)——对象构建介绍
2012/11/08 Javascript
JavaScript检测实例属性, 原型属性
2015/02/04 Javascript
JS实现点击按钮自动增加一个单元格的方法
2015/03/09 Javascript
JavaScript 变量、作用域及内存
2015/04/08 Javascript
深入学习jQuery Validate表单验证(二)
2016/01/18 Javascript
基于RequireJS和JQuery的模块化编程——常见问题全面解析
2016/04/14 Javascript
Javascript操作表单实例讲解(下)
2016/06/20 Javascript
拖动时防止选中
2017/02/03 Javascript
three.js绘制地球、飞机与轨迹的效果示例
2017/02/28 Javascript
vue中SPA单页面应用程序详解
2017/11/07 Javascript
NodeJS实现不可逆加密与密码密文保存的方法
2018/03/16 NodeJs
原生JS实现的自动轮播图功能详解
2018/12/28 Javascript
小程序测试后台服务的方法(ngrok)
2019/03/08 Javascript
vue学习笔记之Vue中css动画原理简单示例
2020/02/29 Javascript
[04:49]2014DOTA2国际邀请赛 Newbee顺利挺进总决赛 ImbaTV独家专访
2014/07/19 DOTA
Python创建xml文件示例
2017/03/22 Python
查看django执行的sql语句及消耗时间的两种方法
2018/05/29 Python
python实现人人自动回复、抢沙发功能
2018/06/08 Python
关于keras中keras.layers.merge的用法说明
2020/05/23 Python
如何通过python计算圆周率PI
2020/11/11 Python
HTML5的结构和语义(3):语义性的块级元素
2008/10/17 HTML / CSS
Hotels.com越南:酒店预订
2019/10/29 全球购物
贯彻落实“八项规定”思想汇报
2014/09/13 职场文书
2014年公务员个人工作总结
2014/11/22 职场文书
故宫导游词
2015/01/31 职场文书
天下第一关导游词
2015/02/06 职场文书
mybatis源码解读之executor包语句处理功能
2022/02/15 Java/Android
WIN10使用IIS部署ftp服务器详细教程
2022/08/05 Servers