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 07 MySQL
MySQL获取所有分类的前N条记录
May 07 MySQL
解读MySQL的客户端和服务端协议
May 10 MySQL
MySQL中你可能忽略的COLLATION实例详解
May 12 MySQL
my.ini优化mysql数据库性能的十个参数(推荐)
May 26 MySQL
MySQL 8.0 驱动与阿里druid版本兼容问题解决
Jul 01 MySQL
Centos7中MySQL数据库使用mysqldump进行每日自动备份的编写
Aug 02 MySQL
MySQL命令无法输入中文问题的解决方式
Aug 30 MySQL
mysql分表之后如何平滑上线详解
Nov 01 MySQL
MYSQL 表的全面总结
Nov 11 MySQL
简单聊一聊SQL注入及防止SQL注入
Mar 23 MySQL
提高系统的吞吐量解决数据库重复写入问题
Apr 23 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 组件化编程技巧
2009/06/06 PHP
PHP下通过系统信号量加锁方式获取递增序列ID
2009/09/25 PHP
php pki加密技术(openssl)详解
2013/07/01 PHP
php实现多维数组中每个单元值(数字)翻倍的方法
2015/02/16 PHP
PHP+MySQL实现在线测试答题实例
2020/01/02 PHP
jQuery TextBox自动完成条
2009/07/22 Javascript
JQuery 拾色器插件发布-jquery.icolor.js
2010/10/20 Javascript
jQuery中绑定事件的命名空间详解
2011/04/05 Javascript
jquery使用jquery.zclip插件复制对象的实例教程
2013/12/04 Javascript
Jquery跳到页面指定位置的方法
2014/05/12 Javascript
使用GruntJS构建Web程序之安装篇
2014/06/04 Javascript
Javascript中的方法链(Method Chaining)介绍
2015/03/15 Javascript
hovertree插件实现二级树形菜单(简单实用)
2016/12/28 Javascript
如何正确理解javascript的模块化
2017/03/02 Javascript
微信小程序中显示html格式内容的方法
2017/04/25 Javascript
通过命令行创建vue项目的方法
2017/07/20 Javascript
js编写简单的聊天室功能
2017/08/17 Javascript
node.js中路由,中间件,ge请求和post请求的参数详解
2017/12/26 Javascript
vue.js整合vux中的上拉加载下拉刷新实例教程
2018/01/09 Javascript
node中使用es6/7/8(支持性与性能)
2019/03/28 Javascript
vue实现网络图片瀑布流 + 下拉刷新 + 上拉加载更多(步骤详解)
2020/01/14 Javascript
Vue项目vscode 安装eslint插件的方法(代码自动修复)
2020/04/15 Javascript
JS指定音频audio在某个时间点进行播放
2020/11/28 Javascript
Python两个整数相除得到浮点数值的方法
2015/03/18 Python
详解Python各大聊天系统的屏蔽脏话功能原理
2016/12/01 Python
使用pyecharts在jupyter notebook上绘图
2020/04/23 Python
python 限制函数调用次数的实例讲解
2018/04/21 Python
Python实现的查询mysql数据库并通过邮件发送信息功能
2018/05/17 Python
Django如何实现上传图片功能
2019/08/16 Python
PYQT5开启多个线程和窗口,多线程与多窗口的交互实例
2019/12/13 Python
递归实现回文判断(如:abcdedbca就是回文,判断一个面试者对递归理解的简单程序)
2013/04/28 面试题
美国探亲签证邀请信
2014/02/05 职场文书
民政局办理协议离婚(范本)
2014/10/25 职场文书
年度考核表个人总结
2015/03/06 职场文书
大学学生会竞选稿
2015/11/19 职场文书
2016年春节慰问信息大全
2015/11/30 职场文书