SQL 查询详解:连接查询、子查询和聚合函数

数据库
本文详细介绍了 SQL 中的连接查询、子查询以及聚合函数的使用方法和应用场景。

作为 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 中的连接查询、子查询以及聚合函数的使用方法和应用场景。通过这些知识,您可以更有效地查询和管理数据库数据。在实际应用中,合理使用和优化这些查询方法,可以大大提高数据库操作的性能和效率。

责任编辑:赵宁宁 来源: 源话编程
相关推荐

2021-05-11 11:05:43

SAL子查询

2010-09-26 14:04:00

SQL连接查询

2023-12-16 13:14:00

SQL子查询技术

2013-03-06 09:49:16

SQL Server

2020-11-11 14:36:57

ExcelSQL函数

2010-11-04 15:56:13

DB2内连接查询

2011-07-18 14:38:44

子查询外部查询

2021-04-02 07:46:52

SQL Server数据库知识笔记

2010-07-21 09:50:12

SQL Server子

2009-09-18 14:33:37

LINQ to SQLSQL命令

2021-02-06 13:45:59

SQL子查询数据库

2010-11-08 14:40:46

SQL Server连

2009-03-17 13:25:13

查询迁移SQL Server

2009-04-29 10:00:25

SQL逻辑查询优化

2011-04-28 09:49:56

SQLwith子查询

2010-09-10 08:54:02

2010-09-26 15:29:13

sql查询分页

2010-06-30 15:24:49

SQL Server子

2010-10-27 13:25:33

Oracle查询

2010-10-21 10:28:13

SQL Server查
点赞
收藏

51CTO技术栈公众号