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