Python MySQL 多表查询
两个或更多表查询
两个或多个表基于关联字段联全查询, 使用JOIN
语句。
如下是"users"表和"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 表
可以使用users表中的{ id: 154, name: 'Chocolate Heaven' }, { id: 155, name: 'Tasty Lemons' }, { id: 156, name: 'Vanilla Dreams' }
fav
字段 和 prducts 表的 id
字段关联
实例
关联 users表和 products 表查看用户喜欢的产品: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)运行实例 »
注意:我们使用的是
INNER JOIN
而不是 JOIN
,他们得到的结果是相同。
LEFT JOIN
在上面的实例中,我们发现Hannah和Michael被排除在结果之外,这是因为INNER JOIN
仅显示匹配的记录。
如果我们要显示所有用户,即使他们没有喜欢的产品,那么我们需要使用LEFT JOIN
(左关联)语句:
实例
选择所有用户及其喜爱的产品:sql = "SELECT \ users.name AS user, \ products.name AS favorite \ FROM users \ LEFT JOIN products ON users.fav = products.id"运行实例 »
RIGHT JOIN
如果我们想要返回所有有喜欢产品的用户,即使有的产品不会被用户喜欢,我们需要使用RIGHT JOIN
语句:
实例
选择所有产品以及将其作为收藏的用户:sql = "SELECT \ users.name AS user, \ products.name AS favorite \ FROM users \ RIGHT JOIN products ON users.fav = products.id"运行实例 »
注意:没有最喜欢的产品的Hannah和Michael不包括在结果中。