一、左关联
在SQL中,左关联(LEFT JOIN)是一种连接操作,它将两个表连接在一起,但与内关联(INNER JOIN)不同的是,左关联会返回左表中的所有记录,即使右表中没有匹配的记录。如果右表中没有匹配的记录,那么结果集中右表的部分将包含NULL值。
左关联的基本语法如下:
SELECT columns
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;
这里是一个具体的例子:
假设有两个表:employees
(员工表)和departments
(部门表),它们通过department_id
字段关联。
employees
表:
employee_id | employee_name | department_id |
---|---|---|
1 | Alice | 10 |
2 | Bob | 20 |
3 | Charlie | 30 |
departments
表:
department_id | department_name |
---|---|
10 | IT |
20 | HR |
如果你想要获取所有员工的信息,包括那些没有分配部门的员工,你可以使用左关联:
SELECT employees.employee_name, departments.department_name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.department_id;
结果集:
employee_name | department_name |
---|---|
Alice | IT |
Bob | HR |
Charlie | NULL |
在这个例子中,即使Charlie没有分配到任何部门,他的名字仍然出现在结果集中,只是department_name
字段为NULL。
一、左关联嵌套select语句
将**table1
替换为一个嵌套的SELECT
语句**,意味着你将使用一个子查询来代替table1
。子查询可以是一个简单的SELECT
语句,也可以是更复杂的查询,包括聚合函数、分组、排序等。
假设我们仍然使用前面提到的employees
和departments
表,但这次我们想要先从employees
表中选出所有员工,然后只选择那些名字以字母"A"开头的员工进行左关联。
首先,我们创建一个子查询来选择employees
表中名字以"A"开头的员工:
SELECT employee_id, employee_name, department_id
FROM employees
WHERE employee_name LIKE 'A%';
然后,我们将这个子查询嵌入到原来的左关联查询中,代替table1
:
SELECT subquery.employee_name, departments.department_name
FROM (
SELECT employee_id, employee_name, department_id
FROM employees
WHERE employee_name LIKE 'A%'
) AS subquery
LEFT JOIN departments ON subquery.department_id = departments.department_id;
在这个例子中,subquery
是嵌套在外部查询中的子查询,它首先选出所有名字以"A"开头的员工,然后外部查询使用左关联将这些员工与departments
表连接起来。
结果集将只包含名字以"A"开头的员工及其对应的部门名称。如果某个员工没有分配部门,那么department_name
字段将为NULL。