如何使用Python在MySQL中使用连接查询?

  • Post category:Python

当使用Python与MySQL交互时,可以使用连接查询来检索来自多个表的数据。连接查询是一种将两个或多个表中的数据组合在一起的查询。以下是在MySQL中使用连接查询的完整攻略,包括内连接、左连接、右连接和全连接等步骤。同时,还提供了两个示例来演示如何在Python中使用MySQL连接查询。

内连接

内连接是一种只返回两个表中都有匹配行的查询。以下是使用内连接的示例,该示例从名为orderscustomers的两个表中选择一些数据:

mycursor = mydb.cursor()

# 内连接
mycursor.execute("""
SELECT orders.id, customers.name, orders.product_name
FROM orders
INNER JOIN customers ON orders.customer_id = customers.id
""")

result = mycursor.fetchall()

for row in result:
  print(row)

在上面的代码中,我们使用INNER JOIN语句将orders表和customers表连接起来,并使用ON子句指定连接条件。然后,我们使用for循环遍历每一行,并使用print()函数打印每一行。

左连接

左连接是一种返回左表中所有行以及右表中匹配行的查询。以下是使用连接的示例,该示例从名为orderscustomers的两个表中选择一些数据:

mycursor = mydb.cursor()

# 左连接
mycursor.execute("""
SELECT orders.id, customers.name, orders.product_name
FROM orders
LEFT JOIN customers ON orders.customer_id = customers.id
""")

result = mycursor.fetchall()

for row in result:
  print(row)

在上面的代码中,我们使用LEFT JOIN语句将orders表和customers表连接起来,并使用ON子句指定连接条件。然后,我们使用for循环遍历每一行,并使用print()函数打印每一行。

右连接

右连接是一种返回右表中所有行以及左表中匹配行的查询。以下是使用右连接的示例,该示例从名为orderscustomers的两个表中选择一些数据:

mycursor = mydb.cursor()

# 右连接
mycursor.execute("""
SELECT orders.id, customers.name, orders.product_name
FROM orders
RIGHT JOIN customers ON orders.customer_id = customers.id
""")

result = mycursor.fetchall()

for row in result:
  print(row)

在上面的代码中,我们使用RIGHT JOIN语句将orders表和customers表连接起来,并使用ON子句指定连接条件。然后,我们使用for循环遍历每一行,并使用print()函数打印每一行。

全连接

全连接是一种返回左表和右表中所有行的查询。以下是使用全连接的示例,该示例从名为orderscustomers的两个表中选择一些数据:

mycursor = mydb.cursor()

# 全连接
mycursor.execute("""
SELECT orders.id, customers.name, orders.product_name
FROM orders
FULL OUTER JOIN customers ON orders.customer_id = customers.id
""")

result = mycursor.fetchall()

for row in result:
  print(row)

在上面的代码中,我们使用FULL OUTER JOIN语句将orders表和customers表连接起来,并使用ON子句指定连接条件。然后,我们使用for循环遍历每一行,并使用print()函数打印每一行。

示例1

在这个示例中,我们将使用Python在MySQL中创建一个名为orders的表和一个名为customers的表,并向这两个表中插入一些数据。然后,我们将使用内连接从这两个表中选择一些数据,并使用fetchall()方法获取所有行。

CREATE TABLE orders (
  id INT AUTO_INCREMENT PRIMARY KEY,
  customer_id INT,
  product_name VARCHAR(255),
  price INT
);

CREATE TABLE customers (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(255),
  address VARCHAR(255)
);

INSERT INTO customers (name, address)
VALUES
  ('John', 'Highway 21'),
  ('Peter', 'Lowstreet 4'),
  ('Amy', 'Apple st 652'),
  ('Hannah', 'Mountain 21'),
  ('Michael', 'Valley 345'),
  ('Sandy', 'Ocean blvd 2'),
  ('Betty', 'Green Grass 1'),
  ('Richard', 'Sky st 331'),
  ('Susan', 'One way 98'),
  ('Vicky', 'Yellow Garden 2'),
  ('Ben', 'Park Lane 38'),
  ('William', 'Central st 954'),
  ('Chuck', 'Main Road 989'),
  ('Viola', 'Sideway 1633');

INSERT INTO orders (customer_id, product_name, price)
VALUES
  (1, 'Product A', 100),
  (2, 'Product B', 200),
  (3, 'Product C', 300),
  (4, 'Product D', 400),
  (5, 'Product E', 500),
  (6, 'Product F', 600),
  (7, 'Product G', 700),
  (8, 'Product H', 800),
  (9, 'Product I', 900),
  (10, 'Product J', 1000),
  (11, 'Product K', 1100),
  (12, 'Product L', 1200),
  (13, 'Product M', 1300),
  (14, 'Product N', 1400);

SELECT orders.id, customers.name, orders.product_name
FROM orders
INNER JOIN customers ON orders.customer_id = customers.id;

在上面的示例中,我们使用CREATE TABLE语句创建名为orderscustomers的表,并使用INSERT INTO语句向这两个表中插入一些数据。然后,我们使用SELECT语句从这两个表中选择一些数据,并使用内连接将它们连接起来。

以下是Python代码:

mycursor = mydb.cursor()

# 从表中选择数据
mycursor.execute("""
SELECT orders.id, customers.name, orders.product_name
FROM orders
INNER JOIN customers ON orders.customer_id = customers.id
""")

result = mycursor.fetchall()

for row in result:
  print(row)

在上面的代码中,我们使用mycursor.execute()方法从名为orderscustomers的表中选择数据,并使用内连接将它们连接起来。然后,我们使用fetchall()方法获取所有行,并使用for循环遍历每一行,并使用print()函数打印每一行。

示例2

在这个示例中,我们将使用Python在MySQL中创建一个名为orders的表和一个名为customers的表,并向这两个表中插入一些数据。然后,我们将使用左连接从这两个表中选择一些数据,并使用fetchall()方法获取所有行。

CREATE TABLE orders (
  id INT AUTO_INCREMENT PRIMARY KEY,
  customer_id INT,
  product_name VARCHAR(255),
  price INT
);

CREATE TABLE customers (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(255),
  address VARCHAR(255)
);

INSERT INTO customers (name, address)
VALUES
  ('John', 'Highway 21'),
  ('Peter', 'Lowstreet 4'),
  ('Amy', 'Apple st 652'),
  ('Hannah', 'Mountain 21'),
  ('Michael', 'Valley 345'),
  ('Sandy', 'Ocean blvd 2'),
  ('Betty', 'Green Grass 1'),
  ('Richard', 'Sky st 331'),
  ('Susan', 'One way 98'),
  ('Vicky', 'Yellow Garden 2'),
  ('Ben', 'Park Lane 38'),
  ('William', 'Central st 954'),
  ('Chuck', 'Main Road 989'),
  ('Viola', 'Sideway 1633');

INSERT INTO orders (customer_id, product_name, price)
VALUES
  (1, 'Product A', 100),
  (2, 'Product B', 200),
  (3, 'Product C', 300),
  (4, 'Product D', 400),
  (5, 'Product E', 500),
  (6, 'Product F', 600),
  (7, 'Product G', 700),
  (8, 'Product H', 800),
  (9, 'Product I', 900),
  (10, 'Product J', 1000),
  (11, 'Product K', 1100),
  (12, 'Product L', 1200),
  (13, 'Product M', 1300),
  (14, 'Product N', 1400);

SELECT orders.id, customers.name, orders.product_name
FROM orders
LEFT JOIN customers ON orders.customer_id = customers.id;

在上面的示例中,我们使用CREATE TABLE语句创建名为orderscustomers的表,并使用INSERT INTO语句向这两个表中插入一些数据。然后,我们使用SELECT语句从这两个表中选择一些数据,并使用左连接将它们连接起来。

以下是Python代码:

mycursor = mydb.cursor()

# 从表中选择数据
mycursor.execute("""
SELECT orders.id, customers.name, orders.product_name
FROM orders
LEFT JOIN customers ON orders.customer_id = customers.id
""")

result = mycursor.fetchall()

for row in result:
  print(row)

在上面的代码中,我们使用mycursor.execute()方法从名为orderscustomers的表中选择数据,并使用左连接将它们连接起来。然后,我们使用fetchall()方法获取所有行,并使用for循环遍历每一行,并使用print()函数打印每一行。

以上是使用Python在MySQL中使用连接查询的完整攻略,包括内连接、左连接、右连接和全连接等步骤。示例1演示了如何使用Python从名为orderscustomers的表中选择数据,并使用内连接将它们连接起来。示例2演示了如何使用Python从名为orderscustomers的表中选择数据,并使用左连接将它们连接起来。