iT邦幫忙

2022 iThome 鐵人賽

DAY 8
1
Modern Web

MySQL,我的超人系列 第 8

Day8-淺談SQL的執行順序與部分核心觀念(番外篇)

  • 分享至 

  • xImage
  •  

聊聊

原本這篇要講函數,但是連續幾天寫類似的觀念與操作屬實有點大腦疲乏,再加上目前開發的專案遇到前端效能瓶頸,上班瘋狂燒腦,坦白說這比以前解資優數學題累多了,喝了一堆咖啡因飲料身體還是吃不消,一回家就開始打起瞌睡...ZZZZ,原本以為是後端的鍋,改後端程式碼改了老半天,最後發現有幾個React的Hook瘋狂Render害的,哭阿

執行順序

一般的程式語言,大多數情況下照順序由上往下執行,以瀏覽器語言JS舉例

console.log(1);
console.log(2);
console.log(3);

結果理所當然的是1、2、3

那SQL呢?

隨便看一個例子

SELECT product_id, amount,price   
FROM products       
WHERE price>600;

第一眼看可能會覺得SQL是

  1. SELECT
  2. FROM
  3. WHERE

這看起來似乎沒毛病,但SQL不同於一般的編程語言,來看看維基百科怎麼定義的

宣告式程式設計(英語:Declarative programming)或譯為宣告式程式設計,是對與指令式程式設計不同的程式設計範型的一種合稱。它們建造電腦程式的結構和元素,表達計算的邏輯而不用描述它的控制流程

簡單來說就是告訴資料庫你要什麼,而不是透過順序來取得想要的執行結果,回到上方的例子,
正確的執行順序

  1. FROM
  2. WHERE
  3. SELECT

資料庫發生了什麼

以下流程不代表全部的資料庫皆如此處理SQL語言

1.FROM把數據從硬碟移至緩衝區方便後續操作,SQL的核心在於對表的引用,就如同前幾天內連結外連結、自連結所示範的,不同的連結可以獲得不同的集合。

2.SELECT則是FROM、WHERE、GROUP BY、HAVING後執行

去除重複關鍵字

1.DISTINCT,選取資料後去除重複
2.UNION,連結兩子集後去除重複
3.UNION ALL,連結兩子集後不去除重複
4.EXCEPT,去除第一子集中第二子集的結果
5.INTERSECT,保留第一子集中第二子集的結果並去除重複

預告

Day9-MySQL的視圖


上一篇
Day7-教你從資料表中插入數據-分級插入、資料庫規劃、商業邏輯
下一篇
Day9-MySQL的視圖
系列文
MySQL,我的超人30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言