Tham gia Python MySQL
Tham gia hai hoặc nhiều bàn
Bạn có thể kết hợp các hàng từ hai hoặc nhiều bảng, dựa trên một cột có 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ó một bảng "người dùng" và một 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:}
Mỹ 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 fav
trường của người dùng và trường sản phẩm
id
.
Thí dụ
Tham gia cùng người dùng và sản phẩm để xem tên của 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)
Lưu ý: Bạn có thể sử dụng JOIN thay vì INNER JOIN. Cả hai đều sẽ cho bạn cùng một kết quả.
CHỖ NỐI BÊN TRÁI
Trong ví dụ trên, Hannah và Michael đã bị loại khỏi kết quả, đó là vì INNER JOIN chỉ hiển thị các bản ghi có sự trùng khớp.
Nếu bạn muốn hiển thị cho 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:
Thí 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"
THAM GIA ĐÚNG
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 có chúng là sản phẩm yêu thích của họ, ngay cả khi không có người dùng nào coi chúng là sản phẩm yêu thích của họ, hãy sử dụng câu lệnh RIGHT JOIN:
Thí 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"
Lưu ý: Hannah và Michael, những người không có sản phẩm yêu thích, không được đưa vào kết quả.