在SQLite中关联两个表并根据主键查询相关记录是常见的数据库操作。以下是几种实现方式:
SELECT 表1.字段, 表2.字段
FROM 表1
JOIN 表2 ON 表1.主键 = 表2.外键
WHERE 表1.主键 = 值;
SELECT 表1.字段, 表2.字段
FROM 表1
INNER JOIN 表2 ON 表1.主键 = 表2.外键
WHERE 表1.主键 = 值;
假设有两个表:Customers
(客户)和 Orders
(订单)
-- 创建示例表
CREATE TABLE Customers (
customer_id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
email TEXT
);
CREATE TABLE Orders (
order_id INTEGER PRIMARY KEY,
customer_id INTEGER,
order_date TEXT,
amount REAL,
FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
);
SELECT Customers.name, Orders.order_id, Orders.order_date, Orders.amount
FROM Customers
JOIN Orders ON Customers.customer_id = Orders.customer_id
WHERE Customers.customer_id = 123;
SELECT c.name, o.order_id, o.order_date, o.amount
FROM Customers AS c
JOIN Orders AS o ON c.customer_id = o.customer_id
WHERE c.customer_id = 123;
SELECT c.name, o.order_id
FROM Customers c
LEFT JOIN Orders o ON c.customer_id = o.customer_id;
-- 假设还有Products表
SELECT c.name, o.order_id, p.product_name
FROM Customers c
JOIN Orders o ON c.customer_id = o.customer_id
JOIN OrderItems oi ON o.order_id = oi.order_id
JOIN Products p ON oi.product_id = p.product_id
WHERE c.customer_id = 123;
SELECT *
CREATE VIEW CustomerOrders AS
SELECT c.customer_id, c.name, o.order_id, o.order_date
FROM Customers c
JOIN Orders o ON c.customer_id = o.customer_id;
这样以后查询可以直接使用视图:
SELECT * FROM CustomerOrders WHERE customer_id = 123;