📜  在 SQL 中连接 4 个表(1)

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

在 SQL 中连接 4 个表

在 SQL 数据库中,通常需要同时关联多张表以获取相关的数据。在连接 4 个表时,可以使用 JOIN 或者 UNION 操作符。

以 JOIN 操作符为例

假设我们有以下 4 张表:

  • users (用户信息表)
  • transactions (交易记录表)
  • products (产品信息表)
  • orders (订单信息表)
1. 内连接

内连接可以通过 MATCHING 或者 ON 子句进行关联。例如,我们想要查询所有订单的产品名称、购买时间和用户姓名,可以使用以下语句:

SELECT products.product_name, orders.purchase_time, users.user_name
FROM orders
INNER JOIN users ON orders.user_id = users.user_id
INNER JOIN transactions ON orders.order_id = transactions.order_id
INNER JOIN products ON transactions.product_id = products.product_id;
2. 左连接

左连接比内连接更加宽松,即使没有匹配的记录,也会返回左表中的所有行。例子:我们现在想要查找所有用户的订单记录,甚至包括没有任何订单的用户,可以使用以下语句:

SELECT users.user_name, orders.order_id, orders.purchase_time
FROM users
LEFT JOIN orders ON users.user_id = orders.user_id
LEFT JOIN transactions ON orders.order_id = transactions.order_id
LEFT JOIN products ON transactions.product_id = products.product_id;
3. 右连接

右连接与左连接相反,返回全部右表中的行。例如,我们现在想要查找所有的产品记录,并包括未有订单的产品,可以使用以下语句:

SELECT products.product_name, products.product_id, orders.order_id, users.user_name
FROM products
RIGHT JOIN transactions ON products.product_id = transactions.product_id
RIGHT JOIN orders ON transactions.order_id = orders.order_id
RIGHT JOIN users ON orders.user_id = users.user_id;
以 UNION 操作符为例

除了 JOIN 操作符,还可以使用 UNION 操作符。

例如,我们想要查找所有用户购买的产品信息,包括购买时间、产品名称和价格,可以使用以下语句:

SELECT users.user_name, products.product_name, transactions.purchase_time, products.price
FROM transactions
JOIN users ON transactions.user_id = users.user_id
JOIN products ON transactions.product_id = products.product_id

UNION

SELECT users.user_name, products.product_name, null AS purchase_time, products.price
FROM products
LEFT JOIN transactions ON products.product_id = transactions.product_id
LEFT JOIN users ON transactions.user_id = users.user_id
WHERE transactions.purchase_time IS NULL;

以上是连接 4 个表的示例。

总结:

  • JOIN 操作符可以连接多个表,可以使用 INNER JOIN、LEFT JOIN 或 RIGHT JOIN 进行关联;
  • UNION 操作符也可以连接多个表,用于合并不同 SELECT 语句的结果。