【sql】sql执行顺序

本文详细介绍了SQL逻辑查询语句的执行顺序,从FROM、JOIN、WHERE、GROUP BY、HAVING、SELECT、DISTINCT到ORDER BY。通过示例说明了每个步骤的作用,以及在MySQL中的具体应用。在理解SQL执行顺序时,需要注意WHERE和GROUP BY的顺序,HAVING和SELECT的顺序等。
摘要由CSDN通过智能技术生成

个人总结:

from、join类、where、group by 、having、select、distinct、order by

ps:

  1. 先执行where过滤再分组汇总
  2. 先分组,再having进行聚合过滤
  3. 先select再distinct

以下具体内容参考

https://www.cnblogs.com/loong-hon/p/13470263.html

阅读目录

  • 准备工作
  • SQL逻辑查询语句执行顺序
  • # 执行FROM语句
  • # 执行ON过滤
  • # 添加外部行
  • # 执行WHERE过滤
  • # 执行GROUP BY分组
  • # 执行HAVING过滤
  • # SELECT列表
  • # 执行DISTINCT子句
  • # 执行ORDER BY子句

  SQL 不同于与其他编程语言的最明显特征是处理代码的顺序。在大数编程语言中,代码按编码顺序被处理,但是在SQL语言中,第一个被处理的子句是FROM子句,尽管SELECT语句第一个出现,但是几乎总是最后被处理。

      每个步骤都会产生一个虚拟表,该虚拟表被用作下一个步骤的输入。这些虚拟表对调用者(客户端应用程序或者外部查询)不可用。只是最后一步生成的表才会返回 给调用者。如果没有在查询中指定某一子句,将跳过相应的步骤。

先来一段伪代码,首先你能看懂么?

复制代码

SELECT DISTINCT <select_list>
FROM <left_table>
<join_type> JOIN <right_table>
ON <join_condition>
WHERE <where_condition>
GROUP BY <group_by_list>
HAVING <having_condition>
ORDER BY <order_by_condition>
LIMIT <limit_number>

复制代码

如果你知道每个关键字的意思,作用,如果你还用过的话,那再好不过了。但是,你知道这些语句,它们的执行顺序你清楚么?

准备工作

首先声明下,一切测试操作都是在MySQL数据库上完成,关于MySQL数据库的一些简单操作,请阅读一下文章:

继续做以下的前期准备工作:

1、新建一个测试数据库TestDB;

 create database TestDB;

2、创建测试表table1和table2;

复制代码

CREATE TABLE table1
 (
     customer_id VARCHAR(10) NOT NULL,
     city VARCHAR(10) NOT NULL,
     PRIMARY KEY(customer_id)
 )ENGINE=INNODB DEFAULT CHARSET=UTF8;

 CREATE TABLE table2
 (
     order_id INT NOT NULL auto_increment,
     customer_id VARCHAR(10),
     PRIMARY KEY(order_id)
 )ENGINE=INNODB DEFAULT CHARSET=UTF8;

复制代码

3、插入测试数据;

复制代码

 INSERT INTO table1(customer_id,city) VALUES('163','hangzhou');
 INSERT INTO table1(customer_id,city) VALUES('9you','shanghai');
 INSERT INTO table1(customer_id,city) VALUES('tx','hangzhou');
 INSERT INTO table1(customer_id,city) VALUES('baidu','hangzhou');

 INSERT INTO table2(customer_id) VALUES('163');
 INSERT INTO table2(customer_id) VALUES('163');
 INSERT INTO table2(customer_id) VALUES('9you');
 INSERT INTO table2(customer_id) VALUES('9you');
 INSERT INTO table2(customer_id) VALUES('9you');
 INSERT INTO table2(customer_id) VALUES('tx');
 INSERT INTO table2(customer_id) VALUES(NULL);

复制代码

准备工作做完以后,table1和table2看起来应该像下面这样:

复制代码

 mysql> select * from table1;
 +-------------+----------+
 | customer_id | city     |
 +-------------+----------+
 | 163         | hangzhou |
 | 9you        | shanghai |
 | baidu       | hangzhou |
 | tx          | hangzhou |
 +-------------+----------+
 4 rows in set (0.00 sec)

 mysql> select * from table2;
 +----------+-------------+
 | order_id | customer_id |
 +----------&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值