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
MySQL 表空间碎片的概念及相关问题解决
May 07 MySQL
MySQL sql_mode修改不生效的原因及解决
May 07 MySQL
mysql升级到5.7时,wordpress导数据报错1067的问题
May 27 MySQL
SQL实现LeetCode(197.上升温度)
Aug 07 MySQL
彻底解决MySQL使用中文乱码的方法
Jan 22 MySQL
MySQL限制查询和数据排序介绍
Mar 25 MySQL
mysql的单列多值存储实例详解
Apr 05 MySQL
Mysql排查分析慢sql之explain实战案例
Apr 19 MySQL
mysql全面解析json/数组
Jul 07 MySQL
MySQL生成千万测试数据以及遇到的问题
Aug 05 MySQL
数据设计之权限的实现
Aug 05 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 parse_url 一个好用的函数
2009/10/03 PHP
在PHP中使用redis
2013/11/04 PHP
php调用nginx的mod_zip模块打包ZIP文件
2014/06/11 PHP
PHP的时间戳与具体时间转化的简单实现
2016/06/13 PHP
php投票系统之增加与删除投票(管理员篇)
2016/07/01 PHP
Linux服务器下PHPMailer发送邮件失败的问题解决
2017/03/04 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解
2019/04/09 PHP
Laravel框架Request、Response及Session操作示例
2019/05/06 PHP
php实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
PHP7 新增功能
2021/03/09 PHP
addRule在firefox下的兼容写法
2006/11/30 Javascript
Code:loadScript( )加载js的功能函数
2007/02/02 Javascript
复制小说文本时出现的随机乱码的去除方法
2010/09/07 Javascript
jquery scroll()区分横向纵向滚动条的方法
2014/04/04 Javascript
Javascript学习笔记之相等符号与严格相等符号
2014/11/23 Javascript
浅谈关于JavaScript API设计的一些建议和准则
2015/06/24 Javascript
详解JavaScript中的4种类型识别方法
2015/09/14 Javascript
jQuery计算文本框字数及限制文本框字数的方法
2016/03/01 Javascript
深入理解jQuery layui分页控件的使用
2016/08/17 Javascript
ionic开发中点击input时键盘自动弹出
2016/12/23 Javascript
Vue中保存数据到磁盘文件的方法
2018/09/06 Javascript
vue下拉菜单组件(含搜索)的实现代码
2018/11/25 Javascript
vue-cli脚手架引入弹出层layer插件的几种方法
2019/06/24 Javascript
详解常用查找数据结构及算法(Python实现)
2016/12/09 Python
利用python打印出菱形、三角形以及矩形的方法实例
2017/08/08 Python
python中for用来遍历range函数的方法
2018/06/08 Python
python进行文件对比的方法
2018/12/24 Python
Flask框架学习笔记之表单基础介绍与表单提交方式
2019/08/12 Python
将 Ubuntu 16 和 18 上的 python 升级到最新 python3.8 的方法教程
2020/03/11 Python
python 爬取B站原视频的实例代码
2020/09/09 Python
在阿尔卑斯山或希腊度过快乐假期:Alpine Elements
2019/12/28 全球购物
建筑安全员岗位职责
2014/03/13 职场文书
员工安全承诺书
2014/05/22 职场文书
大学新闻系应届生求职信
2014/06/02 职场文书
企业财务人员岗位职责
2015/04/14 职场文书
教你使用Python pypinyin库实现汉字转拼音
2021/05/27 Python