完整的SELECT查询语句:、
SELECT DISTINCT column, AGG_FUNC(column_or_expression), …
FROM mytable
JOIN another_table
ON mytable.column = another_table.column
WHERE constraint_expression
GROUP BY column
HAVING constraint_expression
ORDER BY column ASC/DESC
LIMIT count OFFSET COUNT;
查询语句的顺序为FROM和 JOIN> WHERE>GROUP BY>HAVING>SELECT>DISTINCT>ORDER BY>LIMIT/OFFSET。
1.FROM和JOIN确定查询数据的表格(数据源),没有数据谈何查找,如果没有JOIN,要查的表就是mytable,如果有JOIN,要查的表就是
mytable JOIN another_table ON mytable.column = another_table.column
把mytable 和another_table 通过mytable.column = another_table.column匹配合成一个表作为数据源表(临时表)
2.WHERE查询的限制条件,确定了数据来源 WHERE 语句就将在这个数据源中按要求进行数据筛选,并丢弃不符合要求的数据行,所有的筛选col属性 只能来自FROM圈定的表. AS别名还不能在这个阶段使用,因为可能别名是一个还没执行的表达式。
3.GROUP BY 将对之前的数据进行分组,统计等,并将是结果集缩小为分组数.这意味着 其他的数据在分组后丢弃.
4.HAVING的语法和WHERE的语法一致,如果你用了 GROUP BY 分组, HAVING 会在分组完成后对结果集再次筛选。AS别名也不能在这个阶段使用.
5.SELECT用来对结果col简单筛选或计算,决定输出什么数据.
6. DISTINCT对结果进行去重,将重复的数据去除。
7. ORDER BY 对结果做排序。因为SELECT中的表达式已经执行完了。此时可以用AS别名.
8. LIMIT 和 OFFSET 从排序的结果中截取部分数据,LIMIT确定输出数据的长度(多少行),OFFSET确定数据输出的起点(从哪一行开始输出)
总结:
不是每一个SQL语句都要用到所有的句法,但灵活运用以上的句法组合和深刻理解SQL执行原理将能在SQL层面更好的解决数据问题,而不用把问题 都抛给程序逻辑.
本文地址:https://blog.csdn.net/qq_44955169/article/details/107167113