SQL查询包括多种类型,常见的有选择查询、插入查询、更新查询、删除查询、联合查询、子查询等。
SQL 查询类型详解
一、
SQL(Structured Query Language)是用于管理和操作关系型数据库的标准语言,SQL 查询是从数据库中检索数据的核心操作,它可以根据不同的需求和条件来获取所需的信息。

二、主要查询类型
(一)基本查询
| 查询类型 | 描述 | 示例 |
SELECT 语句 |
从数据库的一个或多个表中获取数据,这是最基本的查询操作,可以指定要查询的列以及数据来源的表。 | SELECT * FROM employees;(查询 employees 表中的所有列数据) |
带条件的SELECT 语句 |
使用WHERE 子句添加条件,只检索满足特定条件的记录。 |
SELECT * FROM employees WHERE department = 'Sales';(查询部门为销售部的员工信息) |
| 排序查询 | 使用ORDER BY 子句对查询结果进行排序,可以是升序(ASC)或降序(DESC)。 |
SELECT * FROM employees ORDER BY salary DESC;(按工资降序查询员工信息) |
(二)聚合查询
| 聚合函数 | 描述 | 示例 |
| COUNT() | 计算行数,可以用来统计表中满足条件的记录数量。 | SELECT COUNT(*) FROM employees;(统计员工总数) |
| SUM() | 计算数值列的总和。 | SELECT SUM(salary) FROM employees;(计算员工工资总和) |
| AVG() | 计算数值列的平均值。 | SELECT AVG(salary) FROM employees;(计算员工平均工资) |
| MAX() | 获取数值列中的最大值。 | SELECT MAX(salary) FROM employees;(查询员工最高工资) |
| MIN() | 获取数值列中的最小值。 | SELECT MIN(salary) FROM employees;(查询员工最低工资) |
(三)连接查询
| 连接类型 | 描述 | 示例 |
| 内连接(INNER JOIN) | 返回两个表中满足连接条件的记录,只有当两个表中的匹配行都存在时才会返回结果。 | SELECT employees.name, departments.department_name FROM employees INNER JOIN departments ON employees.department_id = departments.department_id;(查询员工姓名及其所在部门名称) |
| 左连接(LEFT JOIN) | 返回左表中的所有记录,以及右表中满足连接条件的记录,如果右表中没有匹配的记录,则结果为 NULL。 | SELECT employees.name, departments.department_name FROM employees LEFT JOIN departments ON employees.department_id = departments.department_id;(查询所有员工姓名及所在部门名称,若员工无对应部门则部门名为 NULL) |
| 右连接(RIGHT JOIN) | 与左连接类似,但返回右表中的所有记录,以及左表中满足连接条件的记录。 | SELECT employees.name, departments.department_name FROM employees RIGHT JOIN departments ON employees.department_id = departments.department_id;(查询所有部门名称及该部门下员工姓名,若无员工则员工姓名为 NULL) |
| 全连接(FULL JOIN) | 返回两个表中的所有记录,当某个表中没有匹配的记录时,另一个表中对应的列为 NULL。 | SELECT employees.name, departments.department_name FROM employees FULL JOIN departments ON employees.department_id = departments.department_id;(查询所有员工姓名及部门名称,包括无对应部门的员工和无员工的部门) |
(四)子查询
子查询是一个嵌套在另一个查询中的查询,它可以作为选择条件的一部分,或者作为数据来源。
| 子查询类型 | 描述 | 示例 |
| 单行子查询 | 返回单个值的子查询,通常用于比较运算符的条件中。 | SELECT * FROM employees WHERE salary > (SELECT AVG(salary) FROM employees);(查询工资高于平均工资的员工信息) |
| 多行子查询 | 返回多行数据的子查询,常用于IN、ANY、ALL 等运算符的条件中。 |
SELECT * FROM employees WHERE department_id IN (SELECT department_id FROM departments WHERE location = 'New York');(查询部门所在地为纽约的员工信息) |
| 相关子查询 | 子查询依赖于外部查询的变量,每执行一行外部查询,子查询都会执行一次。 | SELECT employee_id, salary FROM employees WHERE salary > (SELECT AVG(salary) FROM employees WHERE department_id = e.department_id) AS e;(查询每个员工工资高于其所在部门平均工资的员工 ID 和工资) |
三、相关问题与解答

问题 1:什么是聚合查询中的分组?
答:聚合查询中的分组使用GROUP BY 子句,它是将具有相同特征的行组合在一起,然后对每个组应用聚合函数,按照部门分组计算每个部门的平均工资,可以使用SELECT department_id, AVG(salary) FROM employees GROUP BY department_id;,这样会先根据department_id 对员工记录进行分组,然后计算每个组(即每个部门)的工资平均值。
问题 2:内连接和外连接的主要区别是什么?
答:内连接只返回两个表中满足连接条件的记录,即只有当两个表中都有匹配的行时才会出现在结果集中,而外连接(包括左连接、右连接和全连接)会返回一个表中的所有记录,即使另一个表中没有与之匹配的记录也会显示出来,对于没有匹配的记录,相应的列会显示为 NULL,在一个员工表和部门表中,内连接只会显示有对应部门的员工记录,而左连接会显示所有员工记录,即使有些员工没有对应部门(此时部门相关列为 NULL)。

来源互联网整合,作者:小编,如若转载,请注明出处:https://www.aiboce.com/ask/145593.html