ToolkitX
知识库工具箱

JOIN 连接查询

INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN

25min·进阶

01. INNER JOIN

内连接 - 返回两表都匹配的行:
sql
-- 基本内连接
SELECT users.username, orders.amount
FROM users
INNER JOIN orders ON users.id = orders.user_id;

-- 使用别名
SELECT u.username, o.amount
FROM users u
INNER JOIN orders o ON u.id = o.user_id;

-- 多表连接
SELECT u.username, o.amount, p.product_name
FROM users u
INNER JOIN orders o ON u.id = o.user_id
INNER JOIN products p ON o.product_id = p.id;

02. LEFT JOIN

左连接 - 返回左表所有行,右表无匹配则为NULL:
sql
-- 查询所有用户及其订单(包括没有订单的用户)
SELECT u.username, o.amount
FROM users u
LEFT JOIN orders o ON u.id = o.user_id;

-- 找出没有订单的用户
SELECT u.username
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
WHERE o.id IS NULL;

03. RIGHT JOIN & FULL JOIN

右连接和全连接:
sql
-- 右连接 - 返回右表所有行
SELECT u.username, o.amount
FROM users u
RIGHT JOIN orders o ON u.id = o.user_id;

-- MySQL不支持 FULL JOIN,可以用 UNION 模拟
SELECT u.username, o.amount
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
UNION
SELECT u.username, o.amount
FROM users u
RIGHT JOIN orders o ON u.id = o.user_id;
INNER JOIN 是最常用的连接类型,LEFT JOIN 次之。FULL JOIN 在 MySQL 中不直接支持。

知识测验

1/4正确 0

INNER JOIN 返回什么?

下一节

聚合函数与分组

下一节