課程1: Basic SQL(發音sei kuo)
課程來源:https://classroom.udacity.com/courses/ud198
ERD(Entry relationship diagram) 實體關係圖
這些圖可幫助您可視化所分析的數據,包括:
- 表的名稱。
- 每個表中的列。
- 表一起工作的方式。
SQL(Structured Query Language)
企業使用數據庫的原因:
1 確保數據的完整性
2 可以快速訪問數據
3 數據易於分享
SQL的關鍵是理解語句。一些聲明包括:
- CREATE TABLE是在數據庫中創建新表的語句。
- DROP TABLE是刪除數據庫中的表的語句。
- SELECT允許您讀取和顯示數據。這稱爲查詢。
每個查詢中使用:SELECT … FROM…。
- SELECT指示要爲其提供數據的列。
- FROM指定要從中選擇表的列。注意,該表中的列需要存在。
如果要提供表中所有列的數據,請使用“ *”,例如 SELECT * FROM orders;
SELECT 格式化查詢
SQL查詢不區分大小寫
通用的做法是將表名和列名保留小寫的同時,大寫命令字.這樣可以使查詢更易於閱讀,而在編寫更復雜的查詢時,查詢將變得更加重要.
在表名和變量名中避免空格
表名和變量名中通常使用下劃線並在列名稱中避免空格
在查詢中使用空格
SQL查詢會忽略空格,因此可以根據需要在代碼之間添加儘可能多的空格和空白行,查詢結果是相同的.例如:
SELECT account_id
FROM orders
分號
最好的做法是在每個語句的末尾加上分號,如果環境允許,也可以一次運行多個查詢。
LIMIT
LIMIT可以讓你看到的一個表的前幾行語句。這比加載整個數據集要快得多。
LIMIT命令始終是一個查詢的最後一部分, 例如:
SELECT *
FROM orders
LIMIT 10;
ORDER BY
ORDER BY語句允許我們對我們造成任何列使用的數據進行排序
使用ORDER BY只會對查詢結果產生臨時影響
DESC可以在ORDER BY語句的列之後添加按降序排序,因爲默認情況是按升序排序(ASC)。
降序(descending)
使用ORDER BY要注意排序多個字段時的順序問題.例如, 以下兩個查詢
SELECT id, account_id, total_amt_usd
FROM orders
ORDER BY account_id, total_amt_usd DESC;
SELECT id, account_id, total_amt_usd
FROM orders
ORDER BY total_amt_usd DESC, account_id;
在查詢1中,將每個帳戶ID的所有訂單分組在一起,然後在每個分組中,訂單的顯示順序爲最大訂單量到最小訂單量。在查詢2中,由於首先按總金額排序,因此訂單從最大到最小顯示,而不管它們來自哪個account_id。然後,將它們按照account_id排序。
WHERE
可以將WHERE命令視爲過濾數據
包括 >, < , >=, <=, =, != 6種
WHERE語句還可以用非數字數據使用。我們可以在此處使用=and !=運算符。這裏需要確保對文本數據使用單引號
派生列(derived column)
創建由現有列組合而成的新列稱爲派生列。通常,您想使用AS關鍵字爲新列指定名稱或“別名” 。
此派生列及其別名通常只是臨時的,僅在查詢期間存在。例如:
SELECT id, (standard_amt_usd/total_amt_usd)*100 AS std_percent, total_amt_usd
FROM orders
LIMIT 10;
在這裏,我們將標準紙面美元金額除以總訂單量,以找到該訂單的標準紙面百分比,並使用AS關鍵字將此新列命名爲“ std_percent
可以使用的算術運算符爲: +, -, *, / 4種
如果是除法, 注意數據中的至少一個值在您的公式中創建了零除的情況.
邏輯運算符
- LIKE
這使您可以進行類似的操作使用WHERE和=,但是當你的情況可能不知道究竟你在找什麼。 - IN
這使您可以執行與使用WHERE和相似的操作=,但要針對多個條件。 - NOT
與IN和LIKE一起使用,以選擇在特定條件下NOT LIKE或NOT IN所有狀態的所有行。 - AND和BETWEEN之
組合,您可以在必須滿足所有組合條件的情況下組合操作。 - OR
這允許您組合其中至少有一個組合條件爲真的操作。
LIKE
通配符(wildcard)
% 代表一個或任意數量的字符
使用LIKE需要區分大小寫
例如: name字段中以C開始的記錄
SELECT name
FROM accounts
WHERE name LIKE 'C%';
name字段包含one的記錄
SELECT name
FROM accounts
WHERE name LIKE '%one%';
name字段以s結尾的記錄
SELECT name
FROM accounts
WHERE name LIKE '%s';
IN
可以檢查同一查詢中一個列值中對應的一個或多個數據.
文本可以使用單引號或雙引號, 如果文本中帶有``, 則可能需要使用雙引號
例如:
SELECT *
FROM web_events
WHERE channel IN ('organic', 'adwords');