📜  Python SQLite – JOIN 子句(1)

📅  最后修改于: 2023-12-03 15:04:08.756000             🧑  作者: Mango

Python SQLite – JOIN 子句

在 SQLite 中,JOIN 子句用于将两个或多个表连接在一起。JOIN 子句使用的最常见的操作符是 INNER JOIN。

使用 INNER JOIN,只有在参与连接的两个表中都存在匹配行时才返回结果集。除了 INNER JOIN,还有其他的 JOIN 操作符,如 LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN 等等。

以下是一个使用 INNER JOIN 将两个表连接的示例:

import sqlite3

# 创建连接对象
connection = sqlite3.connect('mydatabase.db')

# 创建游标对象
cursor = connection.cursor()

# 创建两个表
cursor.execute('''CREATE TABLE IF NOT EXISTS Customer(
                CustomerID INTEGER PRIMARY KEY,
                Name TEXT,
                Email TEXT
            )''')

cursor.execute('''CREATE TABLE IF NOT EXISTS Order(
                OrderID INTEGER PRIMARY KEY,
                CustomerID INTEGER,
                OrderDate TEXT,
                FOREIGN KEY (CustomerID) REFERENCES Customer(CustomerID)
            )''')

# 插入数据
cursor.execute('''INSERT INTO Customer(CustomerID, Name, Email)
                VALUES (1, 'John', 'john@company.com')''')

cursor.execute('''INSERT INTO Customer(CustomerID, Name, Email)
                VALUES (2, 'Jane', 'jane@company.com')''')

cursor.execute('''INSERT INTO Order(OrderID, CustomerID, OrderDate)
                VALUES (1, 1, '2020-01-01')''')

cursor.execute('''INSERT INTO Order(OrderID, CustomerID, OrderDate)
                VALUES (2, 2, '2020-02-01')''')

# 进行 INNER JOIN 并打印结果
cursor.execute('''SELECT Customer.Name, Order.OrderDate
                FROM Customer INNER JOIN Order
                ON Customer.CustomerID = Order.CustomerID''')

rows = cursor.fetchall()

for row in rows:
    print(row)

# 关闭连接
connection.close()

输出结果为:

('John', '2020-01-01')
('Jane', '2020-02-01')

在上面的示例中,我们创建了两个表 Customer 和 Order,并向它们各自插入了两条数据。然后我们使用 INNER JOIN 将这两个表连接,并选择了 Customer 表中的 Name 列以及 Order 表中的 OrderDate 列。最后将结果打印出来。

注意,在使用 INNER JOIN 进行表连接时,指定连接条件的过程非常重要。在代码中的 ON 子句中,我们使用了 CustomerID 列来连接这两个表。

如果我们使用错误的列或条件,将会返回错误的结果集。因此,在编写代码时,一定要注意连接条件的正确性。