Python MySQL Tham gia
Tham gia hai hoặc nhiều bảng
Bạn có thể kết hợp các hàng từ hai hoặc nhiều bảng, dựa trên cột liên quan giữa chúng, bằng cách sử dụng câu lệnh JOIN.
Hãy xem xét bạn có bảng "người dùng" và bảng "sản phẩm":
người dùng
{ 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:}
các sản phẩm
{ id: 154, name:
'Chocolate Heaven' },
{ id: 155, name: 'Tasty Lemons' },
{
id: 156, name: 'Vanilla Dreams' }
Hai bảng này có thể được kết hợp bằng cách sử dụng trường fav
của người dùng và trường id
của sản phẩm.
Ví dụ
Tham gia người dùng và sản phẩm để xem tên sản phẩm người dùng yêu thích:
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user=" yourusername ",
password=" 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ụ »Lưu ý: Bạn có thể sử dụng JOIN thay vì INNER JOIN. Cả hai đều sẽ cho bạn kết quả như nhau.
CHỖ NỐI BÊN TRÁI
Trong ví dụ trên, Hannah và Michael đã bị loại khỏi kết quả, đó là do INNER JOIN chỉ hiển thị các bản ghi có kết quả trùng 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ụ »QUYỀN THAM GIA
Nếu bạn muốn trả lại tất cả các sản phẩm và những người dùng yêu thích chúng, ngay cả khi không có người dùng nào yêu thích chúng, hãy sử dụng câu lệnh RIGHT JOIN:
Ví dụ
Chọn tất cả các sản phẩm và (những) 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ụ »Lưu ý: Hannah và Michael không có sản phẩm yêu thích sẽ không được đưa vào kết quả.