一、左关联
在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。
1万+

被折叠的 条评论
为什么被折叠?



