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 相关文章推荐
如何使用Maxwell实时同步mysql数据
Apr 08 MySQL
mysql数据库入门第一步之创建表
May 14 MySQL
zabbix监控mysql的实例方法
Jun 02 MySQL
深入解析MySQL索引数据结构
Oct 16 MySQL
weblogic服务建立数据源连接测试更新mysql驱动包的问题及解决方法
Jan 22 MySQL
解析MySQL索引的作用
Mar 03 MySQL
解决MySQL添加新用户-ERROR 1045 (28000)的问题
Mar 03 MySQL
MySQL慢查询优化解决问题
Mar 17 MySQL
提高系统的吞吐量解决数据库重复写入问题
Apr 23 MySQL
MySQL数据库如何查看表占用空间大小
Jun 10 MySQL
MySQL添加索引特点及优化问题
Jul 23 MySQL
MySQL中TIMESTAMP类型返回日期时间数据中带有T的解决
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学习 变量使用总结
2011/03/24 PHP
PHP操作文件类的函数代码(文件和文件夹创建,复制,移动和删除)
2011/11/10 PHP
UCenter 批量添加用户的php代码
2012/07/17 PHP
PHP获取客户端真实IP地址的5种情况分析和实现代码
2014/07/08 PHP
WIN8.1下搭建PHP5.6环境
2015/04/29 PHP
Twig模板引擎用法入门教程
2016/01/20 PHP
javascript 常用关键字列表集合
2007/12/04 Javascript
javascript的函数、创建对象、封装、属性和方法、继承
2011/03/10 Javascript
js浏览器本地存储store.js介绍及应用
2014/05/13 Javascript
一个字符串中出现次数最多的字符 统计这个次数【实现代码】
2016/04/29 Javascript
BootStrap智能表单实战系列(三)分块表单配置详解
2016/06/13 Javascript
关于Javascript回调函数的一个妙用
2016/08/29 Javascript
js手动播放图片实现图片轮播效果
2016/09/17 Javascript
JavaScript实现邮箱地址自动匹配功能代码
2016/11/28 Javascript
基于jquery二维码生成插件qrcode
2017/01/07 Javascript
通过示例彻底搞懂js闭包
2017/08/10 Javascript
使用JS和canvas实现gif动图的停止和播放代码
2017/09/01 Javascript
vue2.0实现前端星星评分功能组件实例代码
2018/02/12 Javascript
javascript深拷贝、浅拷贝和循环引用深入理解
2018/05/27 Javascript
Python数据分析之获取双色球历史信息的方法示例
2018/02/03 Python
opencv改变imshow窗口大小,窗口位置的方法
2018/04/02 Python
Python浅复制中对象生存周期实例分析
2018/04/02 Python
Python里字典的基本用法(包括嵌套字典)
2019/02/27 Python
python opencv将图片转为灰度图的方法示例
2019/07/31 Python
英语专业个人求职自荐信
2013/09/21 职场文书
蔬菜基地的创业计划书
2014/01/06 职场文书
《火烧云》教学反思
2014/04/12 职场文书
2014年学校法制宣传日活动总结
2014/11/01 职场文书
2015年度服装销售工作总结
2015/03/31 职场文书
党员干部公开承诺书范文
2015/04/27 职场文书
2015年招生工作总结
2015/05/04 职场文书
人民检察院起诉书
2015/05/20 职场文书
圆明园纪录片观后感
2015/06/03 职场文书
公司食堂管理制度
2015/08/05 职场文书
《珍珠鸟》教学反思
2016/02/16 职场文书
sql查询语句之平均分、最高最低分及排序语句
2022/05/30 MySQL