mysql-sql逻辑查询顺序
1、sql逻辑执行顺序(物理执行顺序可能会因索引而不同)
SELECT 7 DISTINCT 8
FROM 1
JOIN 2
ON 3
WHERE 4
GROUP BY 5
HAVING 6
ORDER BY 9
LIMIT 10
表t1 join t2 产生虚拟表VT1
VT1通过on过滤笛卡尔积产生VT2
VT2通过where过滤产生VT3
VT3通过group by 分组产生VT4
VT4通过having过滤产生VT5
VT5通过select选择指定列产生VT6
VT6通过distinct过滤重复列产生VT7
VT7通过order by 排序产生VT8
VT8通过limit n,m 产生VT9
2、由于逻辑处理顺序如上述1,则写sql时需要注意以前事项:
(1)、对null值的情况
on null = null :视为false
group by null :视为相同值
order by null :视为相同值,默认为最小值。
(2) on、where、having区别
on:
当存在外连接时,on不能过滤掉保留表中的数据(指定条件过滤保留表中数据后,外连接会将保留表中数据重新添加)
当不存在外连接时,on能过滤掉指定条件数据
where:
无论是否存在外连接,where都能过滤掉指定条件数据
不能使用聚合函数,因为执行顺序在group by前
不能使用列的别名,因为执行顺序在select前
having:
不能使用count(1)或者count(*)进行统计,这样可能会将非保留表中的空值字段统计在内导致与预期统计结果不一致
(3)使用了group by,再使用distinct则没意义
(4) limit n,m n:起始行,m:每页行数
mysql-sql逻辑查询顺序的更多相关文章
- python 3 mysql sql逻辑查询语句执行顺序
python 3 mysql sql逻辑查询语句执行顺序 一 .SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_t ...
- mysql SQL 逻辑查询语句和执行顺序
关键字的执行优先级(重点) fromwheregroup byhavingselectdistinctorder bylimit 先创建两个表 CREATE TABLE table1 ( custom ...
- {MySQL的逻辑查询语句的执行顺序}一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析
MySQL的逻辑查询语句的执行顺序 阅读目录 一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析 一 SEL ...
- SQL学习笔记四(补充-1-1)之MySQL单表查询补充部分:SQL逻辑查询语句执行顺序
阅读目录 一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析 一 SELECT语句关键字的定义顺序 SELE ...
- mysql五补充部分:SQL逻辑查询语句执行顺序
一 SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOI ...
- Mysql补充部分:SQL逻辑查询语句执行顺序
一 SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOI ...
- mysql第四篇--SQL逻辑查询语句执行顺序
mysql第四篇--SQL逻辑查询语句执行顺序 一.SQL语句定义顺序 SELECT DISTINCT <select_list> FROM <left_table> < ...
- 45、SQL逻辑查询语句执行顺序
一 SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOI ...
- 第四篇:记录相关操作 SQL逻辑查询语句执行顺序
http://www.cnblogs.com/linhaifeng/articles/7372774.html 一 SELECT语句关键字的定义顺序 SELECT DISTINCT <selec ...
- SQL逻辑查询语句执行顺序
阅读目录 一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析 一 SELECT语句关键字的定义顺序 SELE ...
随机推荐
- JS 自动关闭页面
<script language=javascript> this.window.opener = null; window.close(); </script>
- mnist手写数字问题初体验
上一篇我们提到了回归问题中的梯度下降算法,而且我们知道线性模型只能解决简单的线性回归问题,对于高维图片,线性模型不能完成这样复杂的分类任务.那么是不是线性模型在离散值预测或图像分类问题中就没有用武之地 ...
- jenkins用户权限配置 Role-based Authorization Strategy
插件简介 插件名称 Role-based Authorization Strategy 插件介绍 Role Strategy Plugin插件可以对构建的项目进行授权管理,让不同的用户管理不同的项目, ...
- R 拼接结果展示
学长教的拼接结果展示 哇,R 简直太有魅力了! 晚一点补充
- 问题 C: 神奇的口袋
#include <cstdio> using namespace std; int n1; int nums[99]; int help(int i, int sum) { if (su ...
- pip淘宝镜像安装
pip install virtualenvwrapper-win pip install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenv ...
- 记PHP使用rtrim()导致获得的数据乱码问题
一.问题描述: 我用rtrim()函数去除右侧多余的"."号,去除之后,发现乱码. 二.出现原因: 当右侧没有分号,要去除的字符串的十六进制又刚刚好以81结尾,就导致81被去除,从 ...
- jvm gc 调优 实战
非常不错的文章们 转自: 中文:http://blog.csdn.net/dragonassassin/article/details/51010947 http://josh-persistence ...
- Linux shell 只删除目录下所有(不知道文件名字)文件,只删除文件夹
#!/bin/sh RM="rm -rf" function delete_all_dir() { for i in `ls` do if [ -d $i ];then $RM $ ...
- Django生成脚本迁移文件时,报错django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.
一.本人环境:django:3.0.2, python:3.8.1, pymysql:0.9.3 二.解决步骤: 1.django目录下找到 base.py文件: 2.在base.py文件中注释以下 ...