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 使用SQL语句修改表名的实现
Apr 07 MySQL
虚拟机linux端mysql数据库无法远程访问的解决办法
May 26 MySQL
MySQL通过binlog恢复数据
May 27 MySQL
MySQL中的布尔值,怎么存储false或true
Jun 04 MySQL
使用ORM新增数据在Mysql中的操作步骤
Jul 26 MySQL
MYSQL 的10大经典优化案例场景实战
Sep 14 MySQL
面试被问select......for update会锁表还是锁行
Nov 11 MySQL
mysql timestamp比较查询遇到的坑及解决
Nov 27 MySQL
浅谈redis的过期时间设置和过期删除机制
Mar 18 MySQL
Nebula Graph解决风控业务实践
Mar 31 MySQL
数据设计之权限的实现
Aug 05 MySQL
MySQL 原理与优化之Limit 查询优化
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
DedeCms模板安装/制作概述
2007/03/11 PHP
destoon网站转移服务器后搜索汉字出现乱码的解决方法
2014/06/21 PHP
PHP sleep()函数, usleep()函数
2016/08/25 PHP
thinkPHP内置字符串截取函数用法详解
2016/11/15 PHP
基于PHP实现的多元线性回归模拟曲线算法
2018/01/30 PHP
js获取url参数的使用扩展实例
2007/12/29 Javascript
利用js实现遮罩以及弹出可移动登录窗口
2013/07/08 Javascript
JS实现局部选择打印和局部不选择打印
2014/04/03 Javascript
js中的setInterval和setTimeout使用实例
2014/05/09 Javascript
基于React.js实现原生js拖拽效果引发的思考
2016/03/30 Javascript
Jquery组件easyUi实现选项卡切换示例
2016/08/23 Javascript
解析NodeJs的调试方法
2016/12/11 NodeJs
Js实现中国公民身份证号码有效性验证实例代码
2017/05/03 Javascript
vue input 输入校验字母数字组合且长度小于30的实现代码
2018/05/16 Javascript
angular 组件通信的几种实现方式
2018/07/13 Javascript
Vue2.x Todo之自定义指令实现自动聚焦的方法
2019/01/08 Javascript
微信小程序学习笔记之获取位置信息操作图文详解
2019/03/29 Javascript
详解微信小程序胶囊按钮返回|首页自定义导航栏功能
2019/06/14 Javascript
Ajax请求时无法重定向的问题解决代码详解
2019/06/21 Javascript
浅析JavaScript预编译和暗示全局变量
2020/09/03 Javascript
[43:47]完美世界DOTA2联赛PWL S3 LBZS vs Phoenix 第一场 12.09
2020/12/11 DOTA
用smtplib和email封装python发送邮件模块类分享
2014/02/17 Python
Python进程通信之匿名管道实例讲解
2015/04/11 Python
python之Character string(实例讲解)
2017/09/25 Python
python sys.argv[]用法实例详解
2018/05/25 Python
Python2.7环境Flask框架安装简明教程【已测试】
2018/07/13 Python
Python日志无延迟实时写入的示例
2019/07/11 Python
Python selenium环境搭建实现过程解析
2020/09/08 Python
使用HTML5的Notification API制作web通知的教程
2015/05/08 HTML / CSS
全球游戏Keys和卡片市场:GamesDeal
2018/03/28 全球购物
俄罗斯皮肤健康中心:Pharmacosmetica.ru
2020/02/22 全球购物
大课间活动实施方案
2014/03/06 职场文书
教师见习报告范文
2014/11/03 职场文书
个性发展自我评价2015
2015/03/09 职场文书
公务员爱岗敬业心得体会
2016/01/25 职场文书
Centos7中MySQL数据库使用mysqldump进行每日自动备份的编写
2021/08/02 MySQL