Python MySQL JOIN



  • 联接两个或更多表

    您可以使用JOIN语句基于两个或多个表之间的相关列来合并它们之间的行。假设您有一个“user”表和一个“products”表:
    user表有记录
    { 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' }
    
    可以通过使用用户 fav 字段和产品 id 字段来组合这两个表。
    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)
    
    注意:您可以使用JOIN代替INNER 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"