定义
`LEFT JOIN` 会返回左表(`LEFT JOIN` 关键字左边的表)中的所有记录,以及右表(`LEFT JOIN` 关键字右边的表)中匹配的记录。若右表中没有与左表匹配的记录,那么右表的列会显示为 `NULL`。
语法
sql
SELECT 列名
FROM 左表
LEFT JOIN 右表
ON 左表.列名 = 右表.列名;
在上述语法里,`ON` 子句用于指定连接条件,即两个表通过哪一列进行匹配。
使用示例
假设有两个表:`customers`(客户表)和 `orders`(订单表)。`customers` 表包含客户的信息,`orders` 表包含订单的信息,且两个表通过 `customer_id` 关联。
创建表并插入示例数据
sql
-- 创建 customers 表
CREATE TABLE customers (
customer_id INT PRIMARY KEY,
customer_name VARCHAR(50)
);
-- 创建 orders 表
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
order_amount DECIMAL(10, 2),
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
-- 向 customers 表插入数据
INSERT INTO customers (customer_id, customer_name)
VALUES (1, 'John Doe'), (2, 'Jane Smith'), (3, 'Bob Johnson');
-- 向 orders 表插入数据
INSERT INTO orders (order_id, customer_id, order_amount)
VALUES (101, 1, 100.00), (102, 1, 200.00), (103, 2, 150.00);
使用 LEFT JOIN 查询
sql
SELECT customers.customer_name, orders.order_id, orders.order_amount
FROM customers
LEFT JOIN orders
ON customers.customer_id = orders.customer_id;
在这个查询中,`customers` 表是左表,`orders` 表是右表。查询结果会包含 `customers` 表中的所有客户,以及他们对应的订单信息。若某个客户没有订单,那么订单相关的列(`order_id` 和 `order_amount`)会显示为 `NULL`。
注意事项
- **性能方面**:`LEFT JOIN` 可能会产生大量的结果集,尤其是在表数据量较大时,会影响查询性能。所以,尽量在连接列上创建索引,以此提高查询速度。
- **结果集处理**:由于 `LEFT JOIN` 会返回左表的所有记录,结果集中可能包含 `NULL` 值。在处理结果集时,要考虑这些 `NULL` 值的情况。
- **连接条件**:`ON` 子句中的连接条件要确保准确,不然可能会得到不符合预期的结果。
`LEFT JOIN` 是 MySQL 中非常实用的连接方式,能帮助你在查询时获取左表的完整数据以及右表的匹配数据。