CTE(Common Table Expressions): CTE 是一个临时的结果集,它在执行查询时被定义,并且只在该查询的执行期间存在。CTE 可以使复杂的 SQL 查询更加清晰和易于管理。
Join SQL 函数: Join 是 SQL 中用于将两个或多个表中的行组合在一起的操作。常见的 Join 类型包括 INNER JOIN、LEFT JOIN、RIGHT JOIN 和 FULL JOIN。
假设我们有三个表:employees
、departments
和 salaries
。我们希望查询每个员工的姓名、所在部门和薪水。
WITH EmployeeDepartment AS (
SELECT
e.employee_id,
e.name AS employee_name,
d.department_name
FROM
employees e
INNER JOIN
departments d ON e.department_id = d.department_id
),
EmployeeSalary AS (
SELECT
s.employee_id,
s.salary
FROM
salaries s
)
SELECT
ed.employee_name,
ed.department_name,
es.salary
FROM
EmployeeDepartment ed
INNER JOIN
EmployeeSalary es ON ed.employee_id = es.employee_id;
问题:查询结果中某些员工的薪水信息缺失。
原因:
salaries
表中没有对应的员工记录。employees
表和 departments
表之间的关联出现问题。解决方法:
WITH EmployeeDepartment AS (
SELECT
e.employee_id,
e.name AS employee_name,
d.department_name
FROM
employees e
INNER JOIN
departments d ON e.department_id = d.department_id
),
EmployeeSalary AS (
SELECT
s.employee_id,
s.salary
FROM
salaries s
)
SELECT
ed.employee_name,
ed.department_name,
es.salary
FROM
EmployeeDepartment ed
LEFT JOIN
EmployeeSalary es ON ed.employee_id = es.employee_id;
通过这种方式,即使某些员工没有薪水记录,他们的姓名和部门信息仍然会显示在结果中,薪水字段将显示为 NULL。
领取专属 10元无门槛券
手把手带您无忧上云