因為從事 IT 工作的關係,我也讀了一些專門教 SQL 的網站、書籍。比方說,Joe Celko 的書、Markus Winand 的 modern-sql.com 等。這兩位 SQL 專家不約而同地有講一件產業觀察,讓我有點驚訝。他們一致表示,其實 IT 業界的平均 SQL 能力很差,差到嚇死人。
是否真的是如此?由於我收集的樣本數有限,先不做評論。但是,從一些學界、業界的環境因素來看,似乎真的有可能如此。
總之,能徒手寫好 SQL 的人,算是相對少數。正因如此,只是略懂 SQL 的人,如果可以利用 Metabase 的進階操作來生成 SQL ,那自然就可以快速地跳過這一大段 SQL 的進入門檻。
參考下圖,點選紅圈的位置,就會進入查詢建立器 (query builder)。
進入後,可以看到如下的畫面。如果再點選紅圈的位置一次,就可以看到純文字形式的 SQL 。(純文字形式的 SQL 編輯已超過本文的範疇,本文只專注於討論用 GUI 來生成 SQL。)
在查詢建立器的主畫面一樣有之前介紹過的篩選 (filter) 與概括 (summarize) 功能。接下來,我們會基於查詢建立器的主畫面,一一來探討其它四個常用功能,以及一個很容易忽略的欄位選擇功能。
參考下圖, Order table 與 Customer table 的資料,顯然可以透過 Name 的欄 (column) 加以連結。在試算表軟體 (spreadsheet) 如果要連結這兩張表的話,應用的函數是 vlookup
。而在 Metabase 的話,因為資料倉儲裡可以運作的語言是 SQL ,我們要使用的 SQL 語法就是 join
。不精確地來講,試算表軟體的 vlookup 就相當於 SQL 的 join 。
為什麼說這是不精確呢?因為其實 join 的表達能力 (expressiveness) 比 vlookup 強多了。參考下圖,如果我們點選紅圈處,就可以更改 join 的種類。
客製化欄位基本上可以想象是使用試算表軟體的公式 (formula),只是說,SQL 支援的公式寫法與試算表軟體又略有差異。
當查詢資料時,我們有時候會希望傳回的資料根據某一欄位,或是某兩、三個欄位,進行遞增或是遞減排序,這時就可以應用排序的功能。
當查詢資料時,如果要操作的資料表比較大的時候,速度就有可能很慢,造成使用者的等待。然而,很多時候,我們只是要大略了解資料的長相而己。這時候,傳回列數上限的功能就非常有用,比方說,我們設定它為 10 筆、或是 100 筆,本來要跑 10 秒才會完成的操作有可能變成瞬間完成。
如果我們有一些 join 操作時,很容易就可以生成一張很寬的表,裡頭有很多的欄位 (column)。但是,實際上,我們可能只對其中的少數欄位有興趣而已。這時可以利用『欄位選擇功能』讓我們生成的表變窄,使資料更容易閱讀。在下圖中,點選紅圈的位置,就可以開啟『欄位選擇功能』。
如果能巧妙地應用 Metabase 的查詢建立器,SQL-92 的語法幾乎都可以順利生成出來,離我們利用資料創造價值又更近一步了。