谷歌、Uber都在用:標準SQL語法入門指南

全文共1969字,預計學習時長11分鐘

 

谷歌、Uber都在用:標準SQL語法入門指南

圖源: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是一個通用關聯式資料庫管理系統,也是最先進的開源數據庫系統。

 

谷歌、Uber都在用:標準SQL語法入門指南

圖源: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函數

 

谷歌、Uber都在用:標準SQL語法入門指南

圖源:unsplash

 

在Postgres,我們可以使用LIMIT函數來控制查詢中輸出的行數。例如,我們想找到成績最好的前三名學生。

 

SELECT
               *
FROM
               STUDENTS
ORDER BY
               GRADES DESC
LIMIT
               3

 

由於我們使用ORDER BY DESC,我們有最高分的學生的排序——現在限制爲3個值,那麼我們就看到前3個。

 

SQL可以做的事情還有很多,它值得你花時間去探索。本文講到的查詢單個表中的數據時使用的標準SQL語法,要好好掌握呀!

 

谷歌、Uber都在用:標準SQL語法入門指南

我們一起分享AI學習與發展的乾貨
歡迎關注全平臺AI垂類自媒體 “讀芯術”

(添加小編微信:dxsxbb,加入讀者圈,一起討論最新鮮的人工智能科技哦~)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章