MySQL - UNION 運算子
你好,未來的數據庫魔法師們!今天,我們將深入探討 MySQL 最强大的工具之一:UNION 運算子。它就像一根神奇的魔杖,讓我們能夠將多個 SELECT 語句的結果組合成單一的结果集。是不是很興奮?讓我們一起踏上這次冒险吧!
MySQL UNION 運算子
UNION 運算子用於組合兩個或多個 SELECT 語句的结果集。這就像邀请不同的朋友群體來參加同一個派對 - 他們全都聚集在一個地方!
這裡是基本語法:
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
讓我們看一個實際的例子。假設我們有兩個表:'employees' 和 'customers'。
-- 創建 employees 表
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(100)
);
-- 插入一些數據
INSERT INTO employees VALUES
(1, 'John Doe', '[email protected]'),
(2, 'Jane Smith', '[email protected]');
-- 創建 customers 表
CREATE TABLE customers (
id INT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(100)
);
-- 插入一些數據
INSERT INTO customers VALUES
(1, 'Alice Johnson', '[email protected]'),
(2, 'Bob Wilson', '[email protected]');
-- 现在,讓我們使用 UNION
SELECT name, email FROM employees
UNION
SELECT name, email FROM customers;
這個查詢會給我們一個從兩個表中組合起來的名字和電子郵件的列表。酷炫吧?
記住,UNION 默認會刪除重複的行。這就像派對上的保安,確保沒有人能夠進入兩次!
UNION 與 WHERE 子句
我們可以通過添加 WHERE 子句使 UNION 更加强大。這讓我們可以在組合之前過濾每個 SELECT 語句的结果。
SELECT name, email FROM employees WHERE id > 1
UNION
SELECT name, email FROM customers WHERE name LIKE 'B%';
這個查詢會給我們 ID 大於 1 的員工和名字以 'B' 開頭的客戶。這就像在我們的派對上有 VIP 區域!
UNION 與 ORDER BY 子句
想要對組合的结果進行排序?沒問題!我們可以使用 ORDER BY,但它必須在整個 UNION 語句的末尾。
SELECT name, email FROM employees
UNION
SELECT name, email FROM customers
ORDER BY name ASC;
這會給我們所有名字和電子郵件,按名字的字母順序排序。這就像將我們的派對客人按字母順序排列!
UNION 與別名
有時候,我們表中的列可能會有不同的名稱。別擔心!我們可以使用別名來讓它們匹配。
SELECT name, email AS contact FROM employees
UNION
SELECT customer_name, customer_email AS contact FROM customers;
在這裡,我們假設 customers 表有稍微不同的列名。AS 關鍵字讓我們能夠即時重命名它們!
UNION ALL 運算子
記得我們那位刪除重複行的保安嗎?有時候我們希望讓所有人進入,包括重複的人。這就是 UNION ALL 的用處。
SELECT name FROM employees
UNION ALL
SELECT name FROM customers;
這會給我們所有的名字,即使兩個表之間有重複。這就像在我們的派對上實行“來者不拒”的政策!
在客戶程序中使用 UNION 運算子
現在,讓我們看看如何在客戶程序中使用 UNION 運算子。我會用 Python 和 mysql-connector 库給你一個例子。
import mysql.connector
# 連接到數據庫
cnx = mysql.connector.connect(user='your_username', password='your_password',
host='127.0.0.1', database='your_database')
cursor = cnx.cursor()
# 執行 UNION 查詢
query = """
SELECT name, email FROM employees
UNION
SELECT name, email FROM customers
ORDER BY name
"""
cursor.execute(query)
# 獲取並打印结果
for (name, email) in cursor:
print(f"{name}: {email}")
# 關閉連接
cursor.close()
cnx.close()
這個腚本連接到你的 MySQL 數據庫,執行 UNION 查詢,並打印出结果。這就像有一個私人助理來管理你的派對名單!
這裡是一個總結我們討論過的 UNION 方法的表格:
方法 | 描述 |
---|---|
UNION | 組合结果,刪除重複 |
UNION ALL | 組合结果,保留重複 |
UNION 與 WHERE | 組合前過濾结果 |
UNION 與 ORDER BY | 排序組合结果 |
UNION 與別名 | 為列重命名以達到兼容 |
而你們,我年輕的數據庫愛好者!我們已經穿越了 UNION 運算子的土地,從基本的組合到帶過濾和排序的複雜查詢。記住,熟能生巧,所以不要害怕在您自己的數據庫中嘗試這些查詢。誰知道呢?你可能會在鎮上舉辦最棒的數據派對!
Credits: Image by storyset