在一个表表达中可以调用另一个表表达式,这个被调用的表表达式叫做子查询(subquery),我么也称作子选择(subselect)或内嵌选择(inner select)。子查询的结果传递给调用它的表表达式继续处理。
2.1 按返回结果集分类
子查询按返回结果集的不同分为4种:表子查询,行子查询,列子查询和标量子查询。
表子查询:
返回的结果集是一个行的集合,N行N列(N>=1)。表子查询经常用于父查询的FROM子句中。
行子查询:
返回的结果集是一个列的集合,一行N列(N>=1)。行子查询可以用于福查询的FROM子句和WHERE子句中。
列子查询:
返回的结果集是一个行的集合,N行一列(N>=1)。
标量子查询
:返回的结果集是一个标量集合,一行一列,也就是一个标量值。可以指定一个标量表达式的任何地方,都可以用一个标量子查询。
从定义上讲,每个标量子查询也是一个行子查询和一个列子查询,反之则不是;每个行子查询和列子查询也是一个表子查询,反之也不是。
2.2 按照对返回结果的调用方法
子查询按对返回结果集的调用方法,可分为where型子查询,from型子查询及exists型子查询。
where型子查询:
(把内层查询结果当作外层查询的比较条件)
定义:where型的子查询就是把内层查询的结果当作外层查询的条件。
from型子查询:
(把内层的查询结果供外层再次查询)
定义:from子查询就是把子查询的结果(内存里的一张表)当作一张临时表,然后再对它进行处理。
exists型子查询:
(把外层查询结果拿到内层,看内层的查询是否成立)
定义:exists子查询就是对外层表进行循环,再对内表进行内层查询。和in ()差不多,但是它们还是有区别的。主要是看两个张表大小差的程度。若子查询表大则用exists(内层索引),子查询表小则用in(外层索引);
1.一个子查询必须放在圆括号中。
2.将子查询放在比较条件的右边以增加可读性。
子查询不包含 ORDER BY 子句。对一个 SELECT 语句只能用一个 ORDER BY 子句,并且如果指定了它就必须放在主 SELECT 语句的最后。
3.在子查询中可以使用两种比较条件:单行运算符(>, =, >=, <, <>, <=) 和多行运算符(IN, ANY, ALL)。
4.1 创建测试表
CREATE TABLE PLAYERS
(PLAYERNO INTEGER NOT NULL,
1 子查询定义 在一个表表达中可以调用另一个表表达式,这个被调用的表表达式叫做子查询(subquery),我么也称作子选择(subselect)或内嵌选择(inner select)。子查询的结果传递给调用它的表表达式继续处理。2 子查询分类 2.1 按返回结果集分类 子查询按返回结果集的不同分为4种:表子查询,行子查询,列子查询和标量子查询。
使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈。
如下面SQL语句:
EXPLAIN select * from system_area where status = 1
获得下面的结果:
select_type
SIMPLE:简单表,不使用表连接或子查询
PRIMARY:主查询,即外层的查询
UNION:UNION中的第二个或者后面的查询语句
table
显示来自哪一张表
partitions
匹配的分区,如果查询是基于分区表的话,会显示查询将访问的分区
注意:在5.7以前的版本中,想要显示pa
1> 查询数据表除了前三条以外的数据。
起初我想到的是这条语句
SELECT * FROM admin WHERE userid NOT IN (
SELECT userid FROM admin ORDER BY userid LIMIT 3) ORDER BY userid DESC
但是运行的时候会报 This version of
MySQL doesn’t yet support ‘LIMIT & IN/ALL/ANY/SOME
subquery
这个的意思是表示
子查询的时候不支持limit ,还有一点我就是很二了 就是查询的时候用not in 效率非常不高
一,子选择基本用法 1,子选择的定义 子迭择允许把一个查询嵌套在另一个查询当中。比如说:一个考试记分项目把考试事件分为考试(T)和测验(Q)两种情形。下面这个查询就能只找出学生们的考试成绩 select * from score where event_id in (select event_id from event where type=’T’); 2,子选择的用法(3种) 用子选择来生成一个参考值 在这种情况下,用内层的查询语句来检索出一个数据值,然后把这个数据值用在外层查询语句的比较操作中。比如说,如果要查询表中学生们在某一天的测验成绩,就应该使用一个内层查询先找到这
子查询允许把一个查询嵌套在另一个查询当中。
子查询,又叫内部查询,相对于内部查询,包含内部查询的就称为外部查询。
子查询可以包含普通
select可以包括的任何子句,比如:distinct、 group by、order by、limit、join和union等;但是对应的外部查询必须是以下语句之一:
select、insert、update、delete、set或 者do。
一、
子查询定义
子查询指一个
查询语句嵌套在另一个
查询语句内部的查询,这个特性从
MySQL 4.1开始引入。
SQL 中
子查询的使用大大增强了
SELECT 查询的能力,因为很多时候查询需要从结果集中获取数据,或者需要从同一个表中先计算得出一个数据结果,然后与这个数据结果(可能是某个标量,也可能是某个集合)进行比较。
二、
子查询的基本使用
1、
子查询(内查询)在主查询之前一次执行完成。
2、
子查询的结果被主查询(外查询)使用。
3、注意事项:
(1)
子查询要包含在括号内
(2)将
子查询放在比较条件的右侧
文章目录
MySQL——
子查询用法1、
子查询概述2、
子查询的使用2.1、单行
子查询2.2、多行
子查询2.3、相关
子查询子查询练习题
MySQL——
子查询用法
1、
子查询概述
子查询简介
子查询指一个
查询语句嵌套在另一个
查询语句内部的查询,内部的查询是外部查询的条件,这个特性从
MySQL4.1开始引入。
SQL中
子查询的使用大大增强了
SELECT查询的能力,因为很多时候查询需要从结果集中获取数据,或者需要从同一个表中先计算得出一个数据结果,然后与这个数据结果(可能是某个标量,也可能是某个集合)进行比较。
MySQL子查询语句是一种嵌套在主查询中的查询语句。它可以在主查询中使用子查询的结果进行进一步的过滤、计算或联接操作。
下面是一个示例,演示如何使用MySQL子查询语句:
SELECT column1, column2, ...
FROM table1
WHERE column1 = (SELECT column1 FROM table2 WHERE condition);
在这个示例中,主查询从 `table1` 表中选择特定的列,并使用子查询作为过滤条件。子查询通过选择满足特定条件的列来返回一个值,然后主查询使用该值来过滤结果。
还有其他类型的MySQL子查询语句,例如使用IN运算符的子查询、使用EXISTS运算符的子查询等。它们可以用于解决各种复杂的查询需求。
希望这个示例能够帮助你理解MySQL子查询语句!如果有更多问题,请随时提问。