SQL 链接查询

链接查询

在 SQL 中,链接查询(Join Query)是将两个或多个表中的数据组合在一起的查询。通过使用不同的链接类型,可以实现不同的数据组合方式。以下是对链接查询的详细讲解,包括 INNER JOINLEFT JOINRIGHT JOINFULL JOIN

假设有两个表 employeesdepartments,数据如下:

employees 表:

employee_id first_name last_name department_id
1 Alice Smith 101
2 Bob Johnson 102
3 Charlie Brown NULL

departments 表:

department_id department_name
101 Sales
102 Marketing

1. INNER JOIN

INNER JOIN 是最基本的链接类型,它返回两个表中匹配的记录。JOININNER JOIN 的简写形式。如果某个表中的记录在另一个表中没有匹配的记录,则这些记录不会出现在结果集中。

语法:
SELECT column1, column2, ...
FROM table1
INNER JOIN table2
ON table1.column = table2.column;
示例:

查询所有员工及其所属部门:

SELECT e.employee_id, e.first_name, e.last_name, d.department_name
FROM employees e
INNER JOIN departments d
ON e.department_id = d.department_id;

结果:

employee_id first_name last_name department_name
1 Alice Smith Sales
2 Bob Johnson Marketing

2. LEFT JOIN

LEFT JOIN 返回左表(table1)中的所有记录,即使右表(table2)中没有匹配的记录。如果右表中没有匹配的记录,则结果集中右表的列将包含 NULL

语法:
SELECT column1, column2, ...
FROM table1
LEFT JOIN table2
ON table1.column = table2.column;
示例:

查询所有员工及其所属部门,即使某些员工没有分配部门:

SELECT e.employee_id, e.first_name, e.last_name, d.department_name
FROM employees e
LEFT JOIN departments d
ON e.department_id = d.department_id;

结果:

employee_id first_name last_name department_name
1 Alice Smith Sales
2 Bob Johnson Marketing
3 Charlie Brown NULL

3. RIGHT JOIN

RIGHT JOIN 返回右表(table2)中的所有记录,即使左表(table1)中没有匹配的记录。如果左表中没有匹配的记录,则结果集中左表的列将包含 NULL

语法:
SELECT column1, column2, ...
FROM table1
RIGHT JOIN table2
ON table1.column = table2.column;
示例:

查询所有部门及其员工,即使某些部门没有员工:

SELECT e.employee_id, e.first_name, e.last_name, d.department_name
FROM employees e
RIGHT JOIN departments d
ON e.department_id = d.department_id;

结果:

employee_id first_name last_name department_name
1 Alice Smith Sales
2 Bob Johnson Marketing
NULL NULL NULL NULL

4. FULL JOIN

FULL JOIN 返回左表和右表中的所有记录,即使某些记录在另一表中没有匹配的记录。如果某表中没有匹配的记录,则结果集中该表的列将包含 NULL。需要注意的是,FULL JOIN 在某些数据库系统(如 MySQL)中不支持。

语法:
SELECT column1, column2, ...
FROM table1
FULL JOIN table2
ON table1.column = table2.column;
示例:

查询所有员工及其所属部门,以及所有部门及其员工:

SELECT e.employee_id, e.first_name, e.last_name, d.department_name
FROM employees e
FULL JOIN departments d
ON e.department_id = d.department_id;

结果:

employee_id first_name last_name department_name
1 Alice Smith Sales
2 Bob Johnson Marketing
3 Charlie Brown NULL
NULL NULL NULL NULL

总结

通过使用不同的链接类型,可以实现不同的数据组合方式:

  • INNER JOIN:返回两个表中匹配的记录。
  • LEFT JOIN:返回左表中的所有记录,右表中没有匹配的记录则为 NULL
  • RIGHT JOIN:返回右表中的所有记录,左表中没有匹配的记录则为 NULL
  • FULL JOIN:返回两个表中的所有记录,不匹配的记录则为 NULL
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务