MySql的子查询是多表查询的一个重要组成部分,常常和连接查询一起使用,是多表查询的基础。下面本篇文章就来带大家了解一下子查询,希望对你们有所帮助。

什么是子查询?

子查询,又叫内部查询。当一个查询是另一个查询的条件时,称之为子查询。子查询可以使用几个简单命令构造功能强大的复合命令。子查询最常用于SELECT-SQL命令的WHERE子句中。

子查询是一个 SELECT 语句,它嵌套在一个 SELECT、SELECT…INTO 语句、INSERT…INTO 语句、DELETE 语句、或 UPDATE 语句或嵌套在另一子查询中。

二、子查询分类

子查询分为如下几类:

1、 标量子查询:返回单一值的标量,最简单的形式。

2、 列子查询:返回的结果集是 N 行一列。

3、行子查询:返回的结果集是一行 N 列。

4、 表子查询:返回的结果集是 N 行 N 列。

可以使用的操作符:= > < >= <= <> ANY IN SOME ALL EXISTS

一个子查询会返回一个标量(就一个值)、一个行、一个列或一个表,这些子查询称之为标量、行、列和表子查询。

如果子查询返回一个标量值(就一个值),那么外部查询就可以使用:=、>、=、<=和<>符号进行比较判断;如果子查询返回的不是一个标量值,而外部查询使用了比较符和子查询的结果进行了比较,那么就会抛出异常。

1、 标量子查询:

是指子查询返回的是单一值的标量,如一个数字或一个字符串,也是子查询中最简单的返回形式。 可以使用 = > < >= <= <> 这些操作符对子查询的标量结果进行比较,通常子查询的位置在比较式的右侧

示例:SELECT * FROM article WHERE uid = (SELECT uid FROM user WHERE status=1 ORDER BY uid DESC LIMIT 1)

SELECT * FROM t1 WHERE column1 = (SELECT MAX(column2) FROM t2)

SELECT * FROM article AS t WHERE 2 = (SELECT COUNT(*) FROM article WHERE article.uid = t.uid)

2、MySQL 列子查询:

指子查询返回的结果集是 N 行一列,该结果通常来自对表的某个字段查询返回。

可以使用 = > < >= <= <>这些操作符对子查询的标量结果进行比较,通常子查询的位置在比较式的右侧

可以使用 IN、ANY、SOME 和 ALL 操作符,不能直接使用 = > < >= <= <> 这些比较标量结果的操作符。

示例:SELECT * FROM article WHERE uid IN(SELECT uid FROM user WHERE status=1)

SELECT s1 FROM table1 WHERE s1 > ANY (SELECT s2 FROM table2)

SELECT s1 FROM table1 WHERE s1 > ALL (SELECT s2 FROM table2)

NOT IN 是 <> ALL 的别名,二者相同。

特殊情况:

如果 table2 为空表,则 ALL 后的结果为 TRUE;

如果子查询返回如 (0,NULL,1) 这种尽管 s1 比返回结果都大,但有空行的结果,则 ALL 后的结果为 UNKNOWN 。

注意:对于 table2 空表的情况,下面的语句均返回 NULL:SELECT s1 FROM table1 WHERE s1 > (SELECT s2 FROM table2)

SELECT s1 FROM table1 WHERE s1 > ALL (SELECT MAX(s1) FROM table2)

3、MySQL 行子查询:

指子查询返回的结果集是一行 N 列,该子查询的结果通常是对表的某行数据进行查询而返回的结果集。

例子:SELECT * FROM table1 WHERE (1,2) = (SELECT column1, column2 FROM table2)

//注:(1,2) 等同于 row(1,2)

SELECT * FROM article WHERE (title,content,uid) = (SELECT title,content,uid FROM blog WHERE bid=2)

4、MySQL 表子查询:

指子查询返回的结果集是 N 行 N 列的一个表数据。

例子:SELECT * FROM article WHERE (title,content,uid) IN (SELECT title,content,uid FROM blog)

mysql中子查询是什么_mysql子查询是什么相关推荐

  1. mysql子查询的语法_MySQL子查询Subquery语法介绍

    MySQL子查询Subquery语法介绍 发布时间:2020-05-19 15:48:10 来源:51CTO 阅读:187 作者:三月 下面讲讲关于MySQL子查询Subquery,文字的奥妙在于贴近 ...

  2. mysql用in报错_Mysql子查询IN中使用LIMIT

    学习下Mysql子查询IN中使用LIMIT的方法. 这两天项目里出了一个问题,mysql LIMIT使用后报错. 需求是这样的,我有3张表,infor信息表,mconfig物料配置表,maaply物料 ...

  3. mysql子查询过多慢_MySQL子查询慢现象的解决

    当你在用explain工具查看sql语句的执行计划时,若select_type 字段中出现"DEPENDENT SUBQUERY"时,你要注意了,你已经掉入了mysql子查询慢的& ...

  4. mysql查找并删除记录_mysql 子查询删除记录

    mysql 子查询删除记录 mysql 可以通过子查询得到要删除的记录条件,然后通过子查询得结果匹配要删除的记录.但是 mysql 不能直接删除子查询表中的数据,必须通过一个临时表来解决.例如: de ...

  5. mysql子查询复杂操作_MySQL 子查询操作

    子查询 在一个 select 语句中,嵌入了另外一个 select 语句, 那么被嵌入的 select 语句称之为子查询语句 为什么会有子查询这种用法 数据库有没有记忆力 但查询结果需要的数据,本表已 ...

  6. mysql子查询是什么_mysql子查询

    1. 什么是子查询 ​ 当一个查询是另一个查询的条件时,这个查询称之为子查询(内层查询) ​ 什么时候用? ​ 当查询需求比较复杂,一次性查询无法得到结果,需要多次查询时, ​ 例如:给出一个部门名称 ...

  7. mysql子查询分为几种方法_MYSQL子查询的5种形式

    mysql从4.1版开始支持子查询功能,在此版本前,可以用join写连表查询来进行替代,但不推荐这么写,相当麻烦,mysql子查询的几种常 见写法: 1.select * from xxx where ...

  8. mysql 分号子查询_MySQL子查询详解

    子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从 MySQL 4.1 开始引入,在 SELECT 子句中先计算子查询,子查询结果作为外层另一个查询的过滤条件,查询可以基于一个表或者多个表 ...

  9. mysql的where子查询_mysql子查询

    原标题:mysql子查询 一.mysql子查询基本知识 子查询就是在原有的查询语句中,嵌入新的查询,来得到我们想要的结果集. 子查询一般分为:where型子查询.from型子查询和exists型子查询 ...

最新文章

  1. Python使用openCV把原始彩色图像转化为灰度图、使用OpenCV把图像二值化(仅仅包含黑色和白色的简化版本)、基于自适应阈值预处理(adaptive thresholding)方法
  2. 树莓派python编程自学-两个简易的树莓派初学者Python程序
  3. WINCE创建快捷方式
  4. php本身免费是啥意思,PHP本身是否支持连接和析取?
  5. ORACLE REPLACE函数
  6. SQL Server DATEDIFF() 函数计算时间差
  7. virtualenv在windows10下面使用的注意事项
  8. 37)智能指针(就是自动delete空间)
  9. VMWare 虚拟机安装及新建虚拟机
  10. odoo13 订单模板设置_免费开源ERP Odoo 13系统E-mail邮件功能设置操作指南
  11. oracle解锁用户
  12. python卸载_Python包管理工具pip - amanlikethis
  13. jave double相加结果误差+尾巴
  14. 【证明】—— 矩阵秩的相关证明
  15. seetaface6之画出人脸位置
  16. Java文件操作——简单文件搜索
  17. 解释程序与解释程序的缺点,图解——解释程序与编译程序的区别
  18. c语言两个字母如何比较,c如何比较两个字符 C语言中怎么判断两个字符相同
  19. 报错 The type类名 is already defined
  20. 2015网易游戏校园招聘笔试题 研发岗

热门文章

  1. Shiro权限管理详解
  2. Promises讲解
  3. html鼠标悬停点击,jQuery实现鼠标点击悬浮特效
  4. Win7 D盘没了:DiskGen 指派驱动器号时出现错误(00000002)系统找不到指定的文件
  5. 图的基础知识及深度优先、广度优先算法
  6. php md5 64,php加密函数md5,crypt,base64_encode的用法介绍
  7. 如何写好一份“漏洞报告”
  8. mysql2008错误2_解决SQL Server 连接服务器 错误2
  9. OPPO手机不再是全部自主设计制造,部分来自于ODM
  10. Secure CRT8.1.3 64位安装及注册激活