全文共1969字,預計學習時長11分鐘
圖源:Pexels
SQL(結構化查詢語言)是數據分析最重要的編碼語言,它手推Python,腳踩R語言,成爲分析師所必須擁有的最常用工具,重要性不言而喻。
根據Dataquest.io的數據,幾乎所有大型科技公司都使用SQL。優步、網飛、愛彼迎等,即使在臉書、谷歌和亞馬遜內部,即使它們已經建立了獨立的高性能數據庫系統公司,用SQL查詢數據和執行分析也是必不可少的。
像所有語言一樣,你需要通過不斷的練習來理解和掌握它的概念。在我看來,一旦理解了代碼的基本結構,SQL是最容易使用的語言之一。本文筆者將分享進行SQL查詢的必要步驟。
標準SQL結構
本文是PostgreSQL備忘單的入門部分,將涵蓋SELECT、 FROM、 WHERE、GROUP BY、HAVING、ORDER BY和LIMIT的使用方法。
從單個表中提取結果的查詢的基本結構如下:
SELECT
COLUMN_NAME(S)
FROM
TABLE_NAME
WHERE
CONDITION
GROUP BY
COLUMN_NAME(S)
HAVING
AGGREGATE_CONDITION
ORDER BY
COLUMN_NAME
LIMIT
N
什麼是SQL?
SQL意爲結構化查詢語言(Structured Query Language)。SQL用於和數據庫交流。它是關係數據庫管理系統的標準語言。SQL語句用於執行諸如更新數據庫中的數據,或從數據庫中檢索數據等任務。
什麼是關聯式資料庫管理系統(RDBMS)?
RDBMS將數據組織到具有行和列的表中。“關係”二字意味着每個表中的值彼此之間存在關係。
· 行(Rows)——也稱爲記錄
· 列(Columns)——也稱爲字段,有一個描述性名稱和特定的數據類型。
什麼是PostgreSQL?
PostgreSQL是一個通用關聯式資料庫管理系統,也是最先進的開源數據庫系統。
圖源:unsplash
其他常用的數據庫管理系統有MySQL、Oracle、IBM Db2和MS Access。
讓我們開始吧!
SELECT語句
SELECT語句用於從數據庫中選擇數據。返回的數據存儲在結果表中,稱爲結果集。
特定列
SELECT
COLUMN_1,
COLUMN_2
FROM
TABLE_NAME
所有列
使用 * 可以查詢表中的每一列:
SELECT *
FROM
TABLE_NAME
獨特列
查找列中的所有唯一記錄:
SELECT
DISTINCT(COLUMN_NAME)
FROM
TABLE_NAME
清點所有行
如果你想知道整個表中的所有值,使用COUNT(*),就能得到一個單獨的數字。
SELECT
COUNT(*)
FROM
TABLE_NAME
計數獨特值
如果使用COUNT和DISTINCT來計算一個列中不同值的數量,則會得到一個數字,它表示一個列的總體唯一值:
SELECT
COUNT (DISTINCTCOLUMN_NAME)
FROM
TABLE_NAME
WHERE語句
使用WHERE子句,可以創建條件來篩選出想要或不想要的值。注意——WHERE總是在GROUP BY之前使用(稍後將詳細介紹):
SELECT *
FROM
TABLE_NAME
WHERE
CONDITION
條件
SQL中可以使用各種各樣的條件。下面是由學生在校成績組成的表格中的一些例子。只需指定一次WHERE,爲了進行演示,我在每個步驟中都包含了:
WHERE。WHEREFIRSTNAME = 'BOB' -- exact match
WHERE FIRSTNAME != 'BOB' -- everything excluding BOB
WHERE NOT FIRSTNAME ='BOB' -- everything excluding BOBWHERE FIRSTNAMEIN ('BOB', 'JASON') -- eithercondition is met
WHERE FIRSTNAME NOT IN ('BOB', 'JASON') -- excludes both valuesWHERE FIRSTNAME = 'BOB' AND LASTNAME ='SMITH' -- both conditions
WHERE FIRSTNAME = 'BOB' OR FIRSTNAME = 'JASON' -- either conditionWHERE GRADES > 90 -- greater than 90
WHERE GRADES < 90 -- lessthan 90
WHERE GRADES >= 90 -- greater than or equal to 90
WHERE GRADES <= 90 -- less than or equal to 90WHERESUBJECT IS NULL -- returns valueswith missing values
WHERE SUBJECT NOT NULL -- returnsvalues with no missing values
條件——通配符
LIKE運算符用於WHERE子句中,以搜索列中的特定模式。在“”中傳遞LIKE運算符時,大小寫會影響結果。
有兩個通配符經常與LIKE操作符一起使用:
· % -百分號表示零個,一個,或多個字符
· _ -下劃線表示單個字符
WHEREFIRSTNAME LIKE ‘B%’ -- finds values starting uppercase B
WHEREFIRSTNAME LIKE ‘%b’ -- finds values starting lowercase B
WHEREFIRSTNAME LIKE ‘%an%’ -- find values that have “an” in any position
WHEREFIRSTNAME LIKE ‘_n%’ -- find values that have “n” in the second position
WHEREFIRSTNAME LIKE ‘B__%’ -- find values that start with “B” and have at least 3characters in length
WHEREFIRSTNAME LIKE ‘B%b’ -- find values that start with “B” and end with “b”
WHEREFIRSTNAME LIKE ‘[BFL]’ -- find all values that start with ‘B’, ‘F’ OR ‘L’
WHEREFIRSTNAME LIKE ‘[B-D]’ -- find all values that start with ‘B’, ‘C’, OR ‘D’
WHEREFIRSTNAME LIKE ‘[!BFL]%’ -- find everything exlcusing values that start with‘B’, ‘F’ OR ‘L’
WHEREFIRSTNAME NOT LIKE ‘[BFL]%’ -- same as above. excludes values starting with‘B’, ‘F’, OR ‘L’
WHEREGRADES BETWEEN 80 and 90 -- find grades between 80 and 90
GROUP BY函數
GROUP BY函數幫助按所選列計算出彙總值。它通常與聚合函數(COUNT、SUM、AVG、MAX、MIN)一起使用。
SELECT
SUBJECT,
AVG(GRADES)
FROM
STUDENTS
GROUP BY
SUBJECT
上面的查詢將對每個主題進行分組並計算平均成績。
SELECT
SUBJECT,
COUNT(*)
FROM
STUDENTS
GROUP BY
SUBJECT
上面的查詢將計算每個科目的學生人數(count)。
HAVING語句
HAVING子句類似於WHERE,但更適用於篩選聚合函數。HAVING函數位於GROUP BY之後,而WHERE位於GROUP BY之前。
如果我們想知道哪個學科的平均成績90分以上,我們可以使用下面的方法。
SELECT
SUBJECT,
AVG(GRADES)
FROM
STUDENTS
GROUP BY
SUBJECT
HAVING
AVG(GRADES) >= 90
ORDER BY函數
通過使用ORDER BY函數,可以指定對數值排序的方式。繼續看前面的學生表。
SELECT
*
FROM
STUDENTS
ORDER BY
GRADES DESC
默認情況下使用ORDER BY時,排序將按升序進行。如果要反序,則需要在列名後面指定DESC。
LIMIT函數
圖源:unsplash
在Postgres,我們可以使用LIMIT函數來控制查詢中輸出的行數。例如,我們想找到成績最好的前三名學生。
SELECT
*
FROM
STUDENTS
ORDER BY
GRADES DESC
LIMIT
3
由於我們使用ORDER BY DESC,我們有最高分的學生的排序——現在限制爲3個值,那麼我們就看到前3個。
SQL可以做的事情還有很多,它值得你花時間去探索。本文講到的查詢單個表中的數據時使用的標準SQL語法,要好好掌握呀!
我們一起分享AI學習與發展的乾貨
歡迎關注全平臺AI垂類自媒體 “讀芯術”
(添加小編微信:dxsxbb,加入讀者圈,一起討論最新鮮的人工智能科技哦~)