MySQL中的左连接(LEFT JOIN)是一种连接查询,它会返回左表(即连接语句中位于LEFT JOIN关键字之前的表)中的所有记录,以及右表中与左表匹配的记录。如果右表中没有匹配的记录,则结果集中右表的部分将包含NULL值。
MySQL中的左连接主要有以下几种类型:
左连接常用于以下场景:
假设有两个表:users
和 orders
。
users
表结构:
| id | name | |----|-------| | 1 | Alice | | 2 | Bob | | 3 | Carol |
orders
表结构:
| id | user_id | amount | |----|---------|--------| | 1 | 1 | 100 | | 2 | 1 | 200 | | 3 | 2 | 150 |
查询所有用户及其订单信息(即使某些用户没有订单):
SELECT users.id, users.name, orders.id AS order_id, orders.amount
FROM users
LEFT JOIN orders ON users.id = orders.user_id;
结果集:
| id | name | order_id | amount | |----|-------|----------|--------| | 1 | Alice | 1 | 100 | | 1 | Alice | 2 | 200 | | 2 | Bob | 3 | 150 | | 3 | Carol | NULL | NULL |
原因:右表中没有与左表匹配的记录。
解决方法:
WHERE
子句过滤掉NULL值。SELECT users.id, users.name, orders.id AS order_id, orders.amount
FROM users
LEFT JOIN orders ON users.id = orders.user_id
WHERE orders.id IS NOT NULL;
SELECT users.id, users.name, COALESCE(orders.id, 'No Order') AS order_id, COALES虑E(orders.amount, 0) AS amount
FROM users
LEFT JOIN orders ON users.id = orders.user_id;
希望这些信息对你有所帮助!如果有更多问题,请随时提问。
领取专属 10元无门槛券
手把手带您无忧上云