Photo by Caspar Camille Rubin on Unsplash
基本 SQL 语法
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;
SQL 执行顺序
1 . FROM and JOINs
FROM 跟 JOIN 会有先执行,决定所有的资料集有哪些必须要查询,包含所有的 Sub Query
及其产生的 暂存表(temporary tables)
2. WHERE
决定完所有资料范围后,首先过滤 WHERE 限制的条件,判断哪些栏位的资料符合限制条件,在请求执行 FROM 条件时,会直接透过 WHERE 条件限制去过滤请求的资料
有 Alias 的查询子条件的 WHERE 限制条件无法马上执行,因为子条件的资料必须要先捞出来才能够在做外部的 WHERE 条件过滤
3. GROUP BY
在透过 WHERE 限制条件过滤完资料后,会将这些资料做 GROUP BY 群组运算,仅会留下唯一的栏位数值,当你需要整合这些资讯时,可以使用 GROUP BY 用在你的查询 Query 中
4. HAVING
假如 Query 有 GROUP BY 的条件,可以使用 HAVING 条件去对 GROUP BY 后的资料去做查询,使用 HAVING 条件过滤后将不符合条件的栏位资料丢弃,就像 WHERE 条件一样
5. SELECT
任何的 SELECT 栏位会在这个步骤去执行
6. DISTINCT
剩馀的栏位资料,如果资料列的资料值有重複时,会被使用 DISTINCT 进行过滤,相同的资料将会被丢弃
7. ORDER BY
若有使用 ORDER BY 条件,资料列会透过指定栏位去进行排序,可以顺向或逆向排序,因为要捞出的栏位已经被 SELECT 捞出来了,所以可以透过这些栏位去进行排序
8. LIMIT / OFFSET
最后,资料列会透过 LIMIT 及 OFFSET 条件捞出指定的资料范围,然后将最后的资料列回传输出
参考资料
Donate KJ 贊助作者喝咖啡
如果這篇文章對你有幫助的話,可以透過下面支付方式贊助作者喝咖啡,如果有什麼建議或想說的話可以贊助並留言給我
If this article has been helpful to you, you can support the author by treating them to a coffee through the payment options below. If you have any suggestions or comments, feel free to sponsor and leave a message for me!
方式 Method | 贊助 Donate |
PayPal | https://paypal.me/kejyun |
綠界 ECPay | https://p.ecpay.com.tw/AC218F1 |
歐付寶 OPay | https://payment.opay.tw/Broadcaster/Donate/BD2BD896029F2155041C8C8FAED3A6F8 |