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 相关文章推荐
浅析InnoDB索引结构
Apr 05 MySQL
Unity连接MySQL并读取表格数据的实现代码
Jun 20 MySQL
解决mysql问题:由于找不到MSVCR120.dll,无法继续执行代码
Jun 26 MySQL
MySQL分库分表详情
Sep 25 MySQL
mysql主从复制的实现步骤
Oct 24 MySQL
mysql中varchar类型的日期进行比较、排序等操作的实现
Nov 17 MySQL
一文弄懂MySQL中redo log与binlog的区别
Feb 15 MySQL
MySQL优化常用的19种有效方法(推荐!)
Mar 17 MySQL
MySQL中的全表扫描和索引树扫描
May 15 MySQL
mysql中关键词exists的用法实例详解
Jun 10 MySQL
mysql拆分字符串作为查询条件的示例代码
Jul 07 MySQL
DQL数据查询语句使用示例
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
PHP实现通过CURL上传文件功能示例
2018/05/30 PHP
Laravel使用swoole实现websocket主动消息推送的方法介绍
2019/10/20 PHP
jquery中实现标签切换效果的代码
2011/03/01 Javascript
cnblogs 代码高亮显示后的代码复制问题解决实现代码
2011/12/14 Javascript
javascript替换已有元素replaceChild()使用介绍
2014/04/03 Javascript
jquery图片播放浏览插件prettyPhoto使用详解
2014/12/19 Javascript
javascript验证身份证号
2015/03/03 Javascript
JavaScript中setFullYear()方法的使用详解
2015/06/11 Javascript
使用angularjs创建简单表格
2016/01/21 Javascript
JS实现图片的不间断连续滚动的简单实例
2016/06/03 Javascript
JS实现图片延迟加载并淡入淡出效果的简单方法
2016/08/25 Javascript
ionic cordova一次上传多张图片(类似input file提交表单)的实现方法
2016/12/16 Javascript
理解AngularJs篇:30分钟快速掌握AngularJs
2016/12/23 Javascript
jquery dialog获取焦点的方法
2017/02/09 Javascript
JS验证input输入框(字母,数字,符号,中文)
2017/03/23 Javascript
JavaScript Date对象应用实例分享
2017/10/30 Javascript
vue环形进度条组件实例应用
2018/10/10 Javascript
JQuery常用简单动画操作方法回顾与总结
2019/12/07 jQuery
微信小程序实现手指拖动选项排序
2020/04/22 Javascript
Node.js API详解之 console模块用法详解
2020/05/12 Javascript
Postman参数化实现过程及原理解析
2020/08/13 Javascript
使用Python构建Hopfield网络的教程
2015/04/14 Python
python 换位密码算法的实例详解
2017/07/19 Python
Python模拟登录的多种方法(四种)
2018/06/01 Python
Python使用POP3和SMTP协议收发邮件的示例代码
2019/04/16 Python
pytorch之inception_v3的实现案例
2020/01/06 Python
python实现定时发送邮件到指定邮箱
2020/12/23 Python
详解CSS3 用border写 空心三角箭头 (两种写法)
2017/09/29 HTML / CSS
菲律宾票务网站:StubHub菲律宾
2018/04/21 全球购物
澳洲本土太阳镜品牌:Quay Australia
2019/07/29 全球购物
Rowdy Gentleman服装和配饰:美好时光
2019/09/24 全球购物
美术指导助理求职信
2014/04/20 职场文书
超越自我演讲稿
2014/05/21 职场文书
拓展训练激励口号
2014/06/17 职场文书
妈妈别哭观后感
2015/06/08 职场文书
阳光体育运动标语口号
2015/12/26 职场文书