#核心知识点

书写顺序:where——》group by——》having——》order by——》limit

许多时候在书写一些复杂的sql语句的时候,尤其是在渐进式推导的时候,经常想要添加一些条件,但是却不知道往哪里加,也许进过许多次尝试之后成功了,但是下次又不知道了,因此总结就显得非常重要了。

首先给出sql语句的查询(或书写)顺序:

  1. (7) SELECT
  2. (8) DISTINCT <select_list> #去重
  3. (1) FROM <left_table>
  4. (3) <join_type> JOIN <right_table> #左、右、内链接的一种
  5. (2) ON <join_condition>
  6. (4) WHERE <where_condition> #条件查询
  7. (5) GROUP BY <group_by_list> #分组
  8. (6) HAVING <having_condition> #分组后过滤
  9. (9) ORDER BY <order_by_condition> #排序
  10. (10) LIMIT <limit_number> #分页

上面从上到下是sql语句的书写顺序,前面括号代表它的执行顺序。

只有弄清楚书写顺序,我们写好的查询语句才不会出现语法错误,

只有弄清楚执行顺序,才能得到想要得到的结果。

关于书写我们要记住关键字:where——》group by——》having——》order by——》limit

下面给出一个例子,帮助理解:

有表table1和table2,需要查询来自杭州,且订单数小于2的客户。

表一:

  1. mysql> select * from table1;
  2. +-------------+----------+
  3. | customer_id | city |
  4. +-------------+----------+
  5. | 163 | hangzhou |
  6. | 9you | shanghai |
  7. | baidu | hangzhou |
  8. | tx | hangzhou |
  9. +-------------+----------+
  10. 4 rows in set (0.00 sec)

表二:

  1. mysql> select * from table2;
  2. +----------+-------------+
  3. | order_id | customer_id |
  4. +----------+-------------+
  5. | 1 | 163 |
  6. | 2 | 163 |
  7. | 3 | 9you |
  8. | 4 | 9you |
  9. | 5 | 9you |
  10. | 6 | tx |
  11. | 7 | NULL |
  12. +----------+-------------+
  13. 7 rows in set (0.00 sec)

使用两种方法来解答:

第一种,使用子查询

  1. #来自杭州
  2. SELECT * FROM table1 WHERE city = 'hangzhou';
  3. +-------------+----------+
  4. | customer_id | city |
  5. +-------------+----------+
  6. | 163 | hangzhou |
  7. | baidu | hangzhou |
  8. | tx | hangzhou |
  9. +-------------+----------+
  10.  
  11. #订单小于2
  12. SELECT * FROM table2
  13. GROUP BY customer_id HAVING COUNT(customer_id)< 2;
  14.  
  15. +----------+-------------+
  16. | order_id | customer_id |
  17. +----------+-------------+
  18. | 7 | NULL |
  19. | 6 | tx |
  20. +----------+-------------+
  21. #再过滤掉其中不符合的就行
  22.  
  23. #联合在一起
  24. SELECT * FROM table2
  25. WHERE customer_id in (SELECT customer_id FROM table1 WHERE city = 'hangzhou')
  26. GROUP BY customer_id HAVING COUNT(customer_id)< 2;
  27.  
  28. #结果:
  29. +----------+-------------+
  30. | order_id | customer_id |
  31. +----------+-------------+
  32. | 6 | tx |
  33. +----------+-------------+

这种方法逻辑性比较鲜明。

2.第二种,使用内链接查询

(1)内链接

  1. mysql> SELECT order_id,a.customer_id city FROM table2 a INNER JOIN table1 b
  2. -> on a.customer_id = b.customer_id;
  3. +----------+------+
  4. | order_id | city |
  5. +----------+------+
  6. | 1 | 163 |
  7. | 2 | 163 |
  8. | 3 | 9you |
  9. | 4 | 9you |
  10. | 5 | 9you |
  11. | 6 | tx |
  12. +----------+------+

(2)地点是杭州

  1. mysql> SELECT order_id,a.customer_id city FROM table2 a INNER JOIN table1 b
  2. -> on a.customer_id = b.customer_id
  3. -> WHERE city = 'hangzhou';
  4. +----------+------+
  5. | order_id | city |
  6. +----------+------+
  7. | 1 | 163 |
  8. | 2 | 163 |
  9. | 6 | tx |
  10. +----------+------+

(3)小于两件

  1. mysql> SELECT order_id,a.customer_id city FROM table2 a INNER JOIN table1 b
  2. -> on a.customer_id = b.customer_id
  3. -> WHERE city = 'hangzhou'
  4. -> GROUP BY a.customer_id
  5. -> HAVING COUNT(1) < 2;
  6. +----------+------+
  7. | order_id | city |
  8. +----------+------+
  9. | 6 | tx |
  10. +----------+------+

使用内链接查询的效率会比子查询来的高,但是对个人的要求比较高。

MySQL——sql语句的执行顺序的更多相关文章

  1. mysql 中sql语句的执行顺序

    今天突然想起来,之前面试一个很牛逼的公司(soho)的时候,一个美眉面试官,面试的时候问到了很多之前都没有意识到的问题,回想起来那美眉看着年纪不大,技术那是真666啊.好了说一下人家问的这个有关mys ...

  2. SQL语句的执行顺序

    一.sql语句的执行顺序 (8)SELECT (9) DISTINCT (11) <TOP_specification> <select_list> (1) FROM < ...

  3. SQL SERVER 一个SQL语句的执行顺序

    一个SQL 语句的执行顺序 1.From (告诉程序 来自哪张表  如果是表表达式 依旧是如此顺序) 2.Where(条件筛选  谓词筛选 ) 3.Group by(分组) 4.Having(分组   ...

  4. SQL语句的执行顺序和效率

    今天上午在开发的过程中,突然遇到一个问题,需要了解SQL语句的执行顺序才能继续,上网上查了一下相关的资料,现整理如下:一.sql语句的执行步骤: 1)语法分析,分析语句的语法是否符合规范,衡量语句中各 ...

  5. day57-mysql-五种约束和sql语句逻辑执行顺序

    二.sql语句逻辑执行顺序 () SELECT () DISTINCT <select_list> 去重复 () FROM <left_table> () <join_t ...

  6. MySQL笔记-语句的执行顺序

    在一次查询线上问题时发现有以下两条同样的SQL,执行后数据的顺序不一样: SELECT * FROM nns_assists_item AS asset WHERE asset.nns_assist_ ...

  7. mysql查询语句的执行顺序(重点)

    一 SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOI ...

  8. MySQL Select语句的执行顺序

    源文章:How is a query executed in MySQL? 当执行SQL的Select查询语句时,SQL指令的执行顺序如下: FROM 子句 WHERE 子句 GROUP BY 子句 ...

  9. mysql 查询语句的执行顺序(重重点)

    一 SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOI ...

随机推荐

  1. 缠中说禅股票交易系统图解 z

    缠中说禅股票交易系统图解 2010-03-23 10:51 (王纯阳)缠论祖师的经典语录 1. 就在买点买,卖点卖:当然,买点并不一定是一个点,一个价位,级别越大的,可以容忍的区间越大. 2. 你要经 ...

  2. dedecms调用文章发布日期

    <span>[field:pubdate function="MyDate('m-d',@me)"/]</span>

  3. Mac Pro 系统自带python路径

    /usr/local/Frameworks/Python.framework/Versions/2.7/bin

  4. HDU 1041 Computer Transformation 数学DP题解

    本题假设编程是使用DP思想直接打表就能够了. 假设是找规律就须要数学思维了. 规律就是看这些连续的0是从哪里来的. 我找到的规律是:1经过两次裂变之后就会产生一个00: 00经过两次裂变之后也会产生新 ...

  5. 负样本采样及bias校准、ctr平滑

    参考:https://zhuanlan.zhihu.com/p/31529643 在CTR预估中,负样本采样是一种常见的特征工程方法.一般CTR预估的原始正负样本比可能达到1:1000~1:10000 ...

  6. ubuntu更改mysql的编码配置

    1.Ctrl+t打开终端 2.输入mysql -u root -p 命令,进入MySQL 输入 SHOW VARIABLES LIKE 'char%'; 查看MySQL编码,有两个不是utf8 3.在 ...

  7. Android 百度地图开发(二)

    这一篇文章主要解说的是百度地图的定位功能,然后还有MyLocationOverlay和PopupOverlay两个地图覆盖物的使用.Overlay是"图层"或"覆盖物&q ...

  8. apue学习笔记(第十四章 高级I/O)

    本章涵盖了从多概念和函数:非阻塞I/O.记录锁.I/O多路转换.异步I/O.readv和writev函数以及存储映射I/O 非阻塞I/O 非阻塞I/O使我们可以发出open.read和write这样的 ...

  9. openssl生成https证书

    openssl生成https证书 分类: 其它2009-09-03 16:20 452人阅读 评论(0) 收藏 举报 includemoduleaccessapachessl服务器 openssl生成 ...

  10. URL Handle in Swift (一) -- URL 分解

    更新时间: 2018-6-6 在程序开发过程之中, 我们总是希望模块化处理某一类相似的事情. 在 ezbuy 开发中, 我接触到了对于 URL 处理的优秀的代码, 学习.改进.记录下来.希望对你有所帮 ...