iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 11
1
AI & Data

與資料庫共舞系列 第 11

Day 11 — 創建不同視角

  • 分享至 

  • xImage
  •  

今天介紹最後一個關聯式資料庫 SQL 的語法 — View,所以篇幅也會稍短。

我們再第六天有提到 Subquery,每個SQL段落中都可以查入子查詢。缺點是寫起來會很亂,而且常常同一段子查詢要重複寫。這時候就可以使用 Views。讀者你可以把她想成是命名好的查詢,也可以想像成虛擬表格。

他的語法很單純,就是在 Select — From — Where 之前加上 Create View ... As

Create View highPriceProduct As
Select menuid, item, price, typename
from menu natural join foodtype
where price > 40;

(對他不會回傳~因為它是一個指令)

這等於是把下面的查詢命名叫做 highPriceProduct。

我們就可以在往後的 SQL 中把他想像成一個傳存的表格。但是這個關係表沒有存在資料庫喔! 他存的是你這段指令。

Select item 
From highPriceProduct;

https://ithelp.ithome.com.tw/upload/images/20200911/20129829uCOY3rkbHV.png

當運行到 highPriceProduct 的時候,SQL會去運行上面站存的那段指令。

這樣做有三個好處: 首先,使用View就可以讓閱讀和整理 SQL 不會很麻煩,也更容易可以除錯。在來,在資料庫管理系統中,我們可以設定不同權限的人只能看到或使用特定的Views。這樣就不會把我實際的資料暴露在風險當中。最後是我們可以用同一個資料庫創造出不同版本的虛擬關係表。

假設今天這間商店有美國和台灣的菜單,價格一樣但是幣值不同,這時候我就可以這樣創造一個做美國資料分析時使用的 View:

Create View menu_US As
Select menuid, item, price/30 as price, typeID, onSale
from menu;

https://ithelp.ithome.com.tw/upload/images/20200911/20129829HITAlaOhPI.png

代表往後當我在執行一樣的查詢的時候,我只要把原本台灣的menu 改成這個 view。不管我新增新的產品,改變台灣的售價,這個View 都可以直接幫我做好單位的轉換,我就不需要額外去管理一個欄位、管理一個關係表、或是在每次查詢時都要做數字轉換。

更新和移除 Views

如果我們發現匯率變了,需要改View 的 SQL 可以使用

Alter View menu_US As
Select menuid, item, price/20 as price, typeID, onSale
from menu;

如果要刪除 Views

Drop View menu_us;

另外,MySQL Workbench 也會幫你把你創建過的View記起來。

https://ithelp.ithome.com.tw/upload/images/20200911/20129829qIC0na0SFy.png

關聯式資料庫 SQL 小節

很快的我們寫過了三分之一,過去十天我們先解釋了關聯式資料庫是什麼,然後有哪些重要的專有名詞跟關練。接著我們介紹了最常用的很多查詢方法和SQL語法: 基本查詢、群組資料、匯入更新資料庫、子查詢、等等。在有限的篇幅和時間內,我暫時還有沒解釋SQL的預存程式 (Stored Procedure)、觸發 (Trigger)、和函數 (Functions)。這部分就看後面有時間在另外補充囉!


上一篇
Day 10— 群組和整合SQL結果
下一篇
Day 12 — 回到觀念,聊聊 NoSQL
系列文
與資料庫共舞30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言