MySQL - Distinct 子句:揭開獨特性的力量
你好啊,未來的數據庫魔法師們!今天,我們將踏上一段令人興奮的旅程,進入 MySQL 的世界,並探索一個特別實用的功能——DISTINCT 子句。別擔心如果你是編程新手——我會成為你友善的導遊,我們將一步步解決這個主題。所以,拿起你喜歡的飲料,讓我們一起深入探討吧!
MySQL DISTINCT 子句是什麼?
想象你在派對上,你想知道有多少種不同的飲料被提供。你不會分别計算每罐可口可樂,對吧?你會記下一次"可口可樂"。這正是 MySQL 中的 DISTINCT 子句所做的——它幫助我們從數據庫表中識別和檢索唯一值。
DISTINCT 子句在 SELECT 語句中用於從結果集中消除重複行。這就像俱樂部的 VIP 保鏢,只讓每組相同的客人中的一個代表進入。
讓我們看一個簡單的例子:
SELECT DISTINCT column_name
FROM table_name;
這個查詢將返回指定列中的所有唯一值。
真實世界的例子
假設我們有一個名為 employees
的表,包含以下數據:
id | name | department |
---|---|---|
1 | Alice | Sales |
2 | Bob | Marketing |
3 | Carol | Sales |
4 | David | IT |
5 | Eve | Marketing |
如果我們想知道公司中所有的不同部門,我們可以使用:
SELECT DISTINCT department
FROM employees;
這會給我們:
department |
---|
Sales |
Marketing |
IT |
看見它是如何乾淨地移除了重複項?這就是 DISTINCT 的魔法!
DISTINCT 子句與 COUNT() 函數
現在,讓我們升級並將 DISTINCT 與另一個有用的函數 COUNT() 結合起來。這對動力夥伴讓我們能夠計算列中的唯一值數量。
SELECT COUNT(DISTINCT column_name)
FROM table_name;
使用我們之前的例子,如果我們想知道我們有多少個不同的部門,我們可以使用:
SELECT COUNT(DISTINCT department)
FROM employees;
這會返回:
COUNT(DISTINCT department) |
---|
3 |
這就像問:"我們提供多少種冰淇淋口味?"而不是"我們賣了多少個冰淇淋球?"
在多列上使用 DISTINCT
這裡的事情變得真正有趣。DISTINCT 可以在同時對多列施展其魔法。它將列的組合視為一個單元來識別唯一值。
SELECT DISTINCT column1, column2
FROM table_name;
讓我們擴展我們的 employees
表:
id | name | department | city |
---|---|---|---|
1 | Alice | Sales | New York |
2 | Bob | Marketing | Chicago |
3 | Carol | Sales | New York |
4 | David | IT | Boston |
5 | Eve | Marketing | Chicago |
6 | Frank | Sales | Boston |
如果我們想知道所有唯一的部門-城市組合:
SELECT DISTINCT department, city
FROM employees;
這會給我們:
department | city |
---|---|
Sales | New York |
Marketing | Chicago |
IT | Boston |
Sales | Boston |
注意 "Sales" 出現了兩次,因為它在不同的城市。
DISTINCT 與 NULL 值
這裡有一個有趣的知識:在 DISTINCT 的世界中,NULL 被視為唯一值。如果你在列中有多個 NULL 值,DISTINCT 只會返回一個 NULL。
讓我們修改我們的 employees
表:
id | name | department | project |
---|---|---|---|
1 | Alice | Sales | Alpha |
2 | Bob | Marketing | NULL |
3 | Carol | Sales | Beta |
4 | David | IT | NULL |
5 | Eve | Marketing | Alpha |
如果我們運行:
SELECT DISTINCT project
FROM employees;
我們會得到:
project |
---|
Alpha |
NULL |
Beta |
看見那麼即使我們表中有多個 NULL 值,也只返回了一個 NULL?
使用客戶端程序使用 Distinct 子句
現在,讓我們將所有這些知識投入實踐,使用 MySQL 客戶端程序。我會使用 MySQL 命令行客戶端作為這個例子,但這些原則適用於任何 MySQL 客戶端。
首先,讓我們創建我們的 employees
表:
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(50),
department VARCHAR(50),
project VARCHAR(50)
);
INSERT INTO employees VALUES
(1, 'Alice', 'Sales', 'Alpha'),
(2, 'Bob', 'Marketing', NULL),
(3, 'Carol', 'Sales', 'Beta'),
(4, 'David', 'IT', NULL),
(5, 'Eve', 'Marketing', 'Alpha');
現在,讓我們嘗試我們學到的某些查詢:
-
獲取所有唯一的部門:
SELECT DISTINCT department FROM employees;
-
計算唯一項目的數量:
SELECT COUNT(DISTINCT project) FROM employees;
-
獲取所有唯一的部門-項目組合:
SELECT DISTINCT department, project FROM employees;
在您的 MySQL 客戶端中嘗試這些查詢,並觀察 DISTINCT 子句發揮其魔法!
結論
好了,各位!我們已經穿越了 DISTINCT 的土地,從它的基本使用到更高级的應用。記住,DISTINCT 就像一個有用的助手,整理你的數據,移除重複,並給你一個更乾淨的信息視圖。
當你繼續你的 MySQL 冒險時,你會發現 DISTINCT 是你數據庫工具包中的一個可靠工具。它特別在處理大量數據集時,需要快速識別唯一值或組合時非常有用。
持續練習,保持好奇心,在你意識到之前,你將會以一個有經驗的數據庫專業人士的信心撰寫复雜的查詢。直到下次,快樂查詢!
Credits: Image by storyset