添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

1. 子查询

MySQL 的子查询比较多,但是一般我们很少会写很复杂的子查询,因为这样会使得 SQL 语句很复杂,因此这里只是简单举个例子:

select * from 数据表名1 where 字段1 = (select 字段2 from 数据表名2 where 字段3 = xx);

如上在 SQL 语句中嵌套 SQL 语句的情况叫子查询。

2. 查询语句的书写与执行顺序

前面我们学到查询语句可以通过不同的子句来筛选相应的数据,那么当它们出现在一个 SQL 语句中时,应该遵循什么书写顺序呢?应该遵循下面的书写顺序:

select ===> from ===> where ===> group by ===> having ===> order by ===> limit

书写顺序和执行顺序肯定不同,但执行的顺序又是怎么样的呢?假如有个查询语句包含了以下所有子句,那么我们好好来分析以下:
①首先,执行 from子句,确定目标是查询哪一张表;
②接着,执行where 子句,根据where语句排除掉部分数据(例如找出大于20的数据等等)
③接着,执行group up子句,根据分组条件,对where 语句筛选出来的数据进行分组,分成若干”小表“
④接着,执行having子句,根据筛选条件,再对每个小表中的数据分别筛选。
⑤接着,执行select子句,这个时候,已经知道了查询的结果(当然,顺序和限定数)还未知
⑥接着,执行order by子句,通过③的分组④的筛选后,再对每个小表的数据进行排序(可升序或降序)
⑦最后,执行limit子句,限制输出的记录条数,当然这个时候是以整张表为单位的,而不是针对每张小表来说的。

from ===> where ===> group by ===> having ===> select ===> order by ===> limi
                    1. 子查询MySQL 的子查询比较多,但是一般我们很少会写很复杂的子查询,因为这样会使得 SQL 语句很复杂,因此这里只是简单举个例子:select * from 数据表名1 where 字段1 = (select 字段2 from 数据表名2 where 字段3 = xx);如上在 SQL 语句中嵌套 SQL 语句的情况叫子查询。2. 查询语句的书写与执行顺序前面我们学到查询语句可以通过不同的子句来筛选相应的数据,那么当它们出现在一个 SQL 语句中时,应该遵循什么书写顺序呢?应该遵循下面的
对于外部查询返回的每一行数据,内部查询都要执行一次。在关联子查询中是信息流是双向的。外部查询的每行数据传递一个值给子查询,然后子查询为每一行数据执行一次并返回它的记录。然后,外部查询根据返回的记录做出决策。
反正我是没看懂,下面详细解释SQL中关联子查询的逻辑。
员工表的主要信息:
要解决的问题:检索工资大于同职位的平均工资的员工信息。
2.1 直觉的做法
员工多,而相应的职位(如销售员、经理、部门经理等)少,因此首先想到的思路.
				
文章目录子查询(嵌套查询)1. 标准子查询2. 列子查询(多行子查询)3. 行子查询select后面的子查询from后面的子查询exists后面(相关子查询子查询(嵌套查询) 出现在其他语句中的select语句被称为子查询 按位置分类: select后面 from后面 where或having后面 exists后面 按结果级的行数不同分类: 标量子查询 (结果集有一行一列) 列子查询 (结果集只有一列多行) 行子查询 (结果集只有一行多列) 表子查询 (结果集一般为多行多列)
MySQL执行带有子查询的语句时,会先执行子查询,然后将子查询的结果作为外部查询的条件或数据来源。具体执行顺序如下: 1. FROM子句:按照表之间的连接关系形成虚拟的表。 2. WHERE子句:按照指定条件筛选行。 3. GROUP BY子句:按照指定的列对结果进行分组。 4. HAVING子句:按照指定条件筛选分组。 5. SELECT子句:选择要查询的列。 6. DISTINCT关键字:去除重复行。 7. ORDER BY子句:按照指定的列对结果进行排序。 8. LIMIT子句:限制查询结果的行数。 在执行包含子查询的语句时,MySQL会先执行子查询,得到子查询的结果集,然后将该结果集作为外查询的条件或数据来源,再执行外查询。外查询执行顺序与普通查询相同。 需要注意的是,子查询执行顺序也遵循以上的规则,即先执行子查询的FROM子句、WHERE子句、GROUP BY子句、HAVING子句、SELECT子句、DISTINCT关键字、ORDER BY子句和LIMIT子句。