作为 SQL 数据库的核心功能,连接查询、子查询以及聚合函数在实际开发中有着广泛的应用。本文将详细介绍这些查询方式,并通过具体的示例帮助读者更好地理解和应用。
连接查询
连接查询是从多个表中选择数据的方式,通常使用外键来关联表。常见的连接方式有 INNER JOIN、LEFT JOIN、RIGHT JOIN 和 FULL OUTER JOIN。
1.INNER JOIN (内连接)
INNER JOIN 返回两个表中满足连接条件的所有行。如果没有匹配的行,则不会返回结果。
示例代码:
SELECT employees.name, departments.name
FROM employees
INNER JOIN departments
ON employees.department_id = departments.id;
在上述例子中,我们从employees表和departments表中选择名称,并使用department_id进行连接。
2.LEFT JOIN (左外连接)
LEFT JOIN 返回左表中的所有行,即使右表中没有匹配的记录。如果右表中没有匹配的记录,会以 NULL 值表示。
示例代码:
SELECT employees.name, departments.name
FROM employees
LEFT JOIN departments
ON employees.department_id = departments.id;
该查询返回所有员工及其对应的部门,如果某个员工没有部门,则部门名称会显示为 NULL。
3.RIGHT JOIN (右外连接)
RIGHT JOIN 返回右表中的所有行,即使左表中没有匹配的记录。如果左表中没有匹配的记录,会以 NULL 值表示。
示例代码:
SELECT employees.name, departments.name
FROM employees
RIGHT JOIN departments
ON employees.department_id = departments.id;
这个查询返回所有部门及其对应的员工,如果某个部门没有员工,则员工名称会显示为 NULL。
4.FULL OUTER JOIN (全外连接)
FULL OUTER JOIN 返回两个表中的所有行,不论是否有匹配记录。如果没有匹配的记录,会以 NULL 值表示。
示例代码:
SELECT employees.name, departments.name
FROM employees
FULL OUTER JOIN departments
ON employees.department_id = departments.id;
该查询返回所有员工及所有部门,即使没有匹配的记录。
子查询
子查询是嵌套在其它查询中的查询,分为嵌套查询和相关子查询。
1.嵌套查询
将一个查询的结果作为另一个查询的条件,子查询作为外部查询的一部分并先于外部查询执行。
示例代码:
SELECT name
FROM employees
WHERE department_id IN (
SELECT id
FROM departments
WHERE name = 'Sales'
);
上述查询选择所有在"Sales"部门工作的员工。
2.相关子查询
子查询中的条件引用了外层查询的列,相关子查询依赖于外部查询,每次执行外部查询时都会执行一次子查询。
示例代码:
SELECT name, salary
FROM employees e
WHERE salary > (
SELECT AVG(salary)
FROM employees
WHERE department_id = e.department_id
);
这条查询选择所有薪资高于其部门平均薪资的员工。
3.子查询的优化
- 使用适当的索引:确保在相关列上有适当的索引。
- 简化子查询:将复杂的子查询简化为视图或临时表。
- 避免SELECT:只选择必须的列以减少数据传输量。
聚合函数
聚合函数用于对结果集中的值进行计算,如 COUNT、SUM、AVG、MAX 和 MIN。
1.COUNT
COUNT 函数返回结果集中的行数。
示例代码:
SELECT COUNT(*)
FROM employees;
这条查询返回员工表中的总行数。
2.SUM
SUM 函数返回数值列的总和。
示例代码:
SELECT SUM(salary)
FROM employees;
这条查询返回所有员工薪资的总和。
3.AVG
AVG 函数返回数值列的平均值。
示例代码:
SELECT AVG(salary)
FROM employees;
这条查询返回所有员工薪资的平均值。
4.MAX
MAX 函数返回数值列的最大值。
示例代码:
SELECT MAX(salary)
FROM employees;
这条查询返回员工中的最高薪资。
5.MIN
MIN 函数返回数值列的最小值。
示例代码:
SELECT MIN(salary)
FROM employees;
这条查询返回员工中的最低薪资。
6.GROUP BY
GROUP BY 语句用于根据一个或多个列对结果集进行分组,并对每个分组应用聚合函数。
示例代码:
SELECT department_id, COUNT(*)
FROM employees
GROUP BY department_id;
这条查询返回每个部门的员工人数。
结语
本文详细介绍了 SQL 中的连接查询、子查询以及聚合函数的使用方法和应用场景。通过这些知识,您可以更有效地查询和管理数据库数据。在实际应用中,合理使用和优化这些查询方法,可以大大提高数据库操作的性能和效率。