MySQL - 派生表

您好,有抱負的數據庫愛好者!我很興奮能夠成為您進入MySQL派生表世界的導遊。作為一個教了多年計算機科學的人,我可以向您保證,儘管這個主題起初可能會讓人感到嚇人,但它其實非常有趣且非常有用。那麼,讓我們一起來探索吧!

MySQL - Derived Tables

MySQL 派生表是什麼?

想象一下,您正在組織一個大型派對(因為誰不喜歡一個好的數據庫派對,對吧?)。您有一份所有朋友的名單,但您想創建一份只包含住在附近的人的名單。這就是MySQL中派生表所做的——它在查詢中創建一個臨時表,以幫助您更有效地組織和分析數據。

從技術術語上講,派生表是一個出現在另一個SQL語句FROM子句中的子查詢。這就像是在飛行中創建一個臨時表,然後您可以在主查詢中使用它。

讓我們看一個簡單的例子:

SELECT * FROM
(SELECT name, age FROM people WHERE age > 18) AS adults
WHERE adults.age < 30;

在這個查詢中,括號內的一切都是我們的派生表。我們創建了一個包含所有18歲以上人的臨時表,然後從這個表中選擇那些30歲以下的人。

在派生表中使用WHERE子句

WHERE子句是您在使用派生表時最好的朋友。它允許您在派生表和主查詢中過濾數據。讓我們擴展我們之前的例子:

SELECT * FROM
(SELECT name, age, city FROM people WHERE age > 18) AS adults
WHERE adults.city = 'New York' AND adults.age < 30;

在這裡,我們首先創建了一個包含所有成年人(年齡>18)的派生表,然後從這個表中,我們選擇那些住在紐約且30歲以下的人。這就像是一個雙重過濾!

在派生表中別名列

有時候,您可能想給派生表中的列提供更具描述性的名稱。這時別名就派上用場了。讓我們看一下:

SELECT young_adult_name, years_alive FROM
(SELECT name AS young_adult_name, age AS years_alive
FROM people
WHERE age BETWEEN 18 AND 25) AS young_adults;

在這個例子中,我們將'name'別名為'young_adult_name',將'age'別名為'years_alive'。這可以使您的查詢更易於閱讀和理解。

顯示派生表中的聚合函數

像COUNT、AVG、SUM這樣的聚合函數在派生表中非常有用。讓我們說我們想知道每個年齡組有多少人:

SELECT age_group, count FROM
(SELECT
CASE
WHEN age < 18 THEN 'Under 18'
WHEN age BETWEEN 18 AND 30 THEN '18-30'
WHEN age BETWEEN 31 AND 50 THEN '31-50'
ELSE 'Over 50'
END AS age_group,
COUNT(*) as count
FROM people
GROUP BY age_group) AS age_distribution
ORDER BY count DESC;

這個查詢創建了一個派生表,將人們分組到年齡類別並計算每個組的人數。然後我們從這個派生表中選擇以顯示結果。

使用客戶端程序派生表

雖然我們通常直接在MySQL中寫入我們的查詢,但您也可以使用客戶端程序創建派生表。以下是一個使用Python的簡單例子:

import mysql.connector

# 連接到數據庫
cnx = mysql.connector.connect(user='your_username', password='your_password',
host='127.0.0.1', database='your_database')
cursor = cnx.cursor()

# 創建一個包含派生表的查詢
query = """
SELECT * FROM
(SELECT name, age FROM people WHERE age > 18) AS adults
WHERE adults.age < 30;
"""

# 執行查詢
cursor.execute(query)

# 獲取並打印結果
for (name, age) in cursor:
print(f"{name} is {age} years old")

# 關閉連接
cursor.close()
cnx.close()

這個Python腚本連接到您的MySQL數據庫,執行一個包含派生表的查詢,然後打印出結果。

結論

好了,各位!我們已經穿越了MySQL派生表的世界,從基本概念到更高级的使用方法。記住,派生表是您在SQL中的秘密武器——它們讓您能夠在飛行中創建臨時表,幫助您以強大的方式組織和分析數據。

與編程中的所有事物一樣,熟練來自練習。所以不要害怕在您自己的項目中嘗試使用派生表。誰知道呢?您可能會發現自己在鎮上舉辦了最好的數據庫派對!

以下是我们在本文中介绍的方法的快速參考表:

方法 描述
基本派生表 在FROM子句中創建一個臨時表
WHERE子句 在派生表和主查詢中過濾數據
別名 在派生表中為列提供更具描述性的名稱
聚合函數 在派生表中使用COUNT、AVG、SUM等函數
客戶端程序 使用外部編程語言創建派生表

愉快地查詢,願您的數據庫永遠正規化!

Credits: Image by storyset