在MySQL中,联合查询是一种将多个SELECT语句的结果组合成单个结果集的查询。在Python中,可以使用MySQL连接来执行联合查询。以下是在Python中使用联合查询的整攻略,包括联合查询的基本语法、使用联合查询的示例以及如何在Python中使用联合查询。
联合查询的基本语法
联合查询的基本语法如下:
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2;
在上面的语法中,UNION
关键字用于将两个或多个SELECT语句的结果组合成单个结果集。请注意,每个SELECT语句必须具有相同的列数和数据类型。
示例1
在这个示例中,我们将使用Python在MySQL中创建两个名为customers
和orders
的表,并向这些表中插入一些数据。然后,我们将使用联合查询从这些表中选择一些数据,并它们组合成单个结果集。
CREATE TABLE customers (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
address VARCHAR(255)
);
CREATE TABLE orders (
id INT AUTO_INCREMENT PRIMARY KEY,
customer_id INT,
product_name VARCHAR(255),
price INT
);
INSERT INTO customers (name, address)
VALUES
('John', '123 Main St.'),
('Peter', '456 Oak Ave.'),
('Amy', '789 Maple Dr.');
INSERT INTO orders (customer_id, product_name, price)
VALUES
(1, 'Product A', 100),
(2, 'Product B', 200),
(3, 'Product C', 300);
SELECT customers.name, orders.product_name, orders.price
FROM customers
JOIN orders ON customers.id = orders.customer_id
UNION
SELECT customers.name, 'No orders', 0
FROM customers
LEFT JOIN orders ON customers.id = orders.customer_id
WHERE orders.id IS NULL;
在上面的示例中,我们使用CREATE TABLE
语句创建名为customers
和orders
的表,并使用INSERT INTO
语句向这些表中插入一些数据。然后,我们使用联合查询从这些表中选择一些数据,并将它们组合成单个结果集。
以下是Python代码:
mycursor = mydb.cursor()
# 从表中选择数据
mycursor.execute("""
SELECT customers.name, orders.product_name, orders.price
FROM customers
JOIN orders ON customers.id = orders.customer_id
UNION
SELECT customers.name, 'No orders', 0
FROM customers
LEFT JOIN orders ON customers.id = orders.customer_id
WHERE orders.id IS NULL
""")
result = mycursor.fetchall()
for row in result:
print(row)
在上面的代码中,我们使用mycursor.execute()
方法从名为customers
和orders
的表中选择数据,并使用联合查询将它们组合成单个结果集。然后,我们使用fetchall()
方法获取所有行,并使用for
循环遍历每一行,并使用print()
函数打印每一行。
示例2
在这个示例中,我们将使用Python在MySQL中创建两个名为customers
和orders
的表,并向这些表中插入一些数据。然后,我们将使用联合查询从这些表中选择一些数据,并将它们组合成单个结果集。
CREATE TABLE customers (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
address VARCHAR(255)
);
CREATE TABLE orders (
id INT AUTO_INCREMENT PRIMARY KEY,
customer_id INT,
product_name VARCHAR(255),
price INT
);
INSERT INTO customers (name, address)
VALUES
('John', '123 Main St.'),
('Peter', '456 Oak Ave.'),
('Amy', '789 Maple Dr.');
INSERT INTO orders (customer_id, product_name, price)
VALUES
(1, 'Product A', 100),
(2, 'Product B', 200),
(3, 'Product C', 300);
SELECT customers.name, orders.product_name, orders.price
FROM customers
LEFT JOIN orders ON customers.id = orders.customer_id
WHERE orders.price > 0
UNION
SELECT customers.name, 'No orders', 0
FROM customers
LEFT JOIN orders ON customers.id = orders.customer_id
WHERE orders.id IS NULL;
在上面的示例中,我们使用CREATE TABLE
语句创建名为customers
和orders
的表,并使用INSERT INTO
语句向这些表中插入一些数据。然后,我们使用联合查询从这些表中选择一些数据,并将它们组合成单个结果集。
以下是Python代码:
mycursor = mydb.cursor()
# 从表中选择数据
mycursor.execute("""
SELECT customers.name, orders.product_name, orders.price
FROM customers
LEFT JOIN orders ON customers.id = orders.customer_id
WHERE orders.price > 0
UNION
SELECT customers.name, 'No orders', 0
FROM customers
LEFT JOIN orders ON customers.id = orders.customer_id
WHERE orders.id IS NULL
""")
result = mycursor.fetchall()
for row in result:
print(row)
在上面的代码中,我们使用mycursor.execute()
方法从名为customers
和orders
的表中选择数据,并使用联合查询将它们组合成单个结果集。然后,我们使用fetchall()
方法获取所有行,并使用for
循环遍历每一行,并使用print()
函数打印每一行。
以上是使用Python在MySQL中使用联合查询的完整攻略,包括联合查询的基本语法、使用联合查询的示例以及如何在Python中使用联合查询。