SQL 的 JOIN 操作用于在两个或多个数据库表之间,根据它们之间的关联字段,把相关的数据行组合在一起,形成一个结果集。
在实际数据库中,数据通常按“主题”拆分到不同表中,例如:
users(用户表)orders(订单表)如果要查询“某个用户下了哪些订单”,就需要把两张表关联起来,这时就用 JOIN。
假设有两张表:
users
| id | name |
|---|---|
| 1 | 张三 |
| 2 | 李四 |
| 3 | 王五 |
orders
| id | user_id | amount |
|---|---|---|
| 1 | 1 | 100 |
| 2 | 1 | 200 |
| 3 | 2 | 150 |
只返回两表中都匹配的数据。
SELECT users.name, orders.amount
FROM users
INNER JOIN orders
ON users.id = orders.user_id;
结果:
| name | amount |
|---|---|
| 张三 | 100 |
| 张三 | 200 |
| 李四 | 150 |
王五没有订单,不会出现在结果中。
返回左表全部数据,右表没有匹配则为 NULL。
SELECT users.name, orders.amount
FROM users
LEFT JOIN orders
ON users.id = orders.user_id;
结果:
| name | amount |
|---|---|
| 张三 | 100 |
| 张三 | 200 |
| 李四 | 150 |
| 王五 | NULL |
返回右表全部数据,左表没有匹配则为 NULL。
SELECT users.name, orders.amount
FROM users
RIGHT JOIN orders
ON users.id = orders.user_id;
返回左右两表所有数据,不匹配的部分用 NULL 填充(MySQL 不直接支持,可用 UNION 模拟)。
返回两表的笛卡尔积(不常用,容易数据爆炸)。
SELECT * FROM users CROSS JOIN orders;
SELECT 列名
FROM 表A
[JOIN类型] 表B
ON 表A.关联字段 = 表B.关联字段;
如果你愿意,我也可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。