Python MySQL Kết Hợp

Kết hợp hai hoặc nhiều bảng

Bạn có thể sử dụng câu lệnh JOIN để kết hợp hai hoặc nhiều bảng trong đó dựa trên các cột liên quan.

Giả sử bạn có bảng "users" và "products":

users

{ id: 1, name: 'John', fav: 154},
{ id: 2, name: 'Peter', fav: 154},
{ id: 3, name: 'Amy', fav: 155},
{ id: 4, name: 'Hannah', fav:},
{ id: 5, name: 'Michael', fav:}

products

{ id: 154, name: 'Chocolate Heaven' },
{ id: 155, name: 'Tasty Lemons' },
{ id: 156, name: 'Vanilla Dreams' }

Bạn có thể sử dụng thuộc tính của users fav thuộc tính và của products id thuộc tính để kết hợp hai bảng này.

Ví dụ

Kết hợp người dùng và sản phẩm, xem sản phẩm yêu thích của người dùng:

import mysql.connector
mydb = mysql.connector.connect(
  host="localhost",
  user="yourusername",
  passwd="yourpassword",
  database="mydatabase"
)
mycursor = mydb.cursor()
sql = "SELECT \

  users.name AS user, \

  products.name AS favorite \

  FROM users \

  INNER JOIN products ON users.fav = products.id"
mycursor.execute(sql)
myresult = mycursor.fetchall()
for x in myresult:
  print(x)

Chạy ví dụ

Ghi Chú:Bạn có thể sử dụng JOIN thay vì INNER JOIN. Bạn sẽ nhận được kết quả tương tự.

LEFT JOIN

Trong ví dụ trên, Hannah và Michael không được bao gồm trong kết quả vì INNER JOIN chỉ hiển thị các bản ghi khớp.

Nếu bạn muốn hiển thị tất cả người dùng, ngay cả khi họ không có sản phẩm yêu thích, hãy sử dụng câu lệnh LEFT JOIN:

Ví dụ

Chọn tất cả người dùng và sản phẩm yêu thích của họ:

sql = "SELECT \

  users.name AS user, \

  products.name AS favorite \

  FROM users \

  LEFT JOIN products ON users.fav = products.id"

Chạy ví dụ

RIGHT JOIN

Nếu bạn muốn trả về tất cả các sản phẩm và người dùng yêu thích chúng, ngay cả khi không có người dùng yêu thích những sản phẩm đó, hãy sử dụng câu lệnh RIGHT JOIN:

Ví dụ

Chọn tất cả sản phẩm và người dùng yêu thích chúng:

sql = "SELECT \

  users.name AS user, \

  products.name AS favorite \

  FROM users \

  RIGHT JOIN products ON users.fav = products.id"

Chạy ví dụ

Ghi Chú:Hannah và Michael, không có sự quan tâm đến bất kỳ sản phẩm nào, không được bao gồm trong kết quả.