SQL 查询语句基础
SQL(Structured Query Language,结构化查询语言)是用于管理和操作关系数据库的标准语言,本文将详细介绍 SQL 查询语句的基础,包括基本查询、条件查询、排序、分组以及聚合函数等内容。

1. 基本查询
1.1 SELECT 语句
SELECT
语句用于从一个或多个表中检索数据,基本的SELECT
语句语法如下:
SELECT column1, column2, ... FROM table_name;
column1, column2: 要检索的列名,可以使用 表示所有列。
table_name: 要查询的表名。
从名为employees
的表中检索所有员工的姓名和职位:
SELECT first_name, last_name, job_title FROM employees;
1.2 WHERE 子句

WHERE
子句用于过滤记录,只返回满足条件的行,其基本语法如下:
SELECT column1, column2, ... FROM table_name WHERE condition;
查找工资大于 5000 的员工:
SELECT first_name, last_name, salary FROM employees WHERE salary > 5000;
1.3 ORDER BY 子句
ORDER BY
子句用于对结果集进行排序,其基本语法如下:
SELECT column1, column2, ... FROM table_name ORDER BY column1 [ASC|DESC], column2 [ASC|DESC], ...;
按工资从高到低排序员工:
SELECT first_name, last_name, salary FROM employees ORDER BY salary DESC;
2. 高级查询
2.1 聚合函数

聚合函数用于对一组值执行计算并返回单一值,常见的聚合函数包括COUNT()
,SUM()
,AVG()
,MAX()
, 和MIN()
,其基本语法如下:
SELECT aggregate_function(column) FROM table_name WHERE condition;
统计员工总数:
SELECT COUNT(*) AS total_employees FROM employees;
2.2 GROUP BY 子句
GROUP BY
子句用于将结果集按照一个或多个列进行分组,其基本语法如下:
SELECT column1, aggregate_function(column2) FROM table_name WHERE condition GROUP BY column1;
按部门统计员工数量:
SELECT department_id, COUNT(*) AS employee_count FROM employees GROUP BY department_id;
2.3 HAVING 子句
HAVING
子句用于过滤分组后的结果,其基本语法如下:
SELECT column1, aggregate_function(column2) FROM table_name WHERE condition GROUP BY column1 HAVING condition;
查找员工数量超过 10 的部门:
SELECT department_id, COUNT(*) AS employee_count FROM employees GROUP BY department_id HAVING COUNT(*) > 10;
3. 连接查询
3.1 INNER JOIN
内连接(INNER JOIN)返回两个表中满足连接条件的记录,其基本语法如下:
SELECT columns FROM table1 INNER JOIN table2 ON table1.common_column = table2.common_column;
查找每个员工及其对应的部门名称:
SELECT employees.first_name, employees.last_name, departments.department_name FROM employees INNER JOIN departments ON employees.department_id = departments.department_id;
3.2 LEFT JOIN (或 LEFT OUTER JOIN)
左连接(LEFT JOIN)返回左表中的所有记录以及右表中满足连接条件的记录,如果右表中没有匹配的记录,则结果为 NULL,其基本语法如下:
SELECT columns FROM table1 LEFT JOIN table2 ON table1.common_column = table2.common_column;
查找所有员工及其对应的部门名称,即使某些员工没有分配部门:
SELECT employees.first_name, employees.last_name, departments.department_name FROM employees LEFT JOIN departments ON employees.department_id = departments.department_id;
3.3 RIGHT JOIN (或 RIGHT OUTER JOIN)
右连接(RIGHT JOIN)返回右表中的所有记录以及左表中满足连接条件的记录,如果左表中没有匹配的记录,则结果为 NULL,其基本语法如下:
SELECT columns FROM table1 RIGHT JOIN table2 ON table1.common_column = table2.common_column;
查找所有部门及其对应的员工名称,即使某些部门没有员工:
SELECT employees.first_name, employees.last_name, departments.department_name FROM employees RIGHT JOIN departments ON employees.department_id = departments.department_id;
3.4 FULL JOIN (或 FULL OUTER JOIN)
全连接(FULL JOIN)返回两个表中的所有记录,如果其中一个表中没有匹配的记录,则结果为 NULL,其基本语法如下:
SELECT columns FROM table1 FULL JOIN table2 ON table1.common_column = table2.common_column;
查找所有员工和部门,即使某些员工没有分配部门或某些部门没有员工:
SELECT employees.first_name, employees.last_name, departments.department_name FROM employees FULL JOIN departments ON employees.department_id = departments.department_id;
4. 子查询
子查询是一个嵌套在另一个 SQL 语句中的查询,子查询可以出现在SELECT
,FROM
,WHERE
,HAVING
等子句中,其基本语法如下:
SELECT column1, column2, ... FROM table_name WHERE condition AND (subquery);
查找工资高于公司平均工资的员工:
SELECT first_name, last_name, salary FROM employees WHERE salary > (SELECT AVG(salary) FROM employees);
5. 联合查询(UNION)
联合查询用于合并两个或多个SELECT
语句的结果集,每个SELECT
语句必须具有相同数量的列,并且对应列的数据类型必须兼容,其基本语法如下:
SELECT column1, column2, ... FROM table1 UNION SELECT column1, column2, ... FROM table2;
查找所有经理和销售代表的姓名:
SELECT first_name, last_name, job_title FROM employees WHERE job_title = 'Manager' UNION SELECT first_name, last_name, job_title FROM employees WHERE job_title = 'Sales Representative';
相关问题与解答栏目
问题1:如何在 SQL 中删除重复记录?
解答:在 SQL 中删除重复记录通常需要使用子查询和删除语句,以下是一个示例,假设我们有一个名为employees
的表,其中包含重复的电子邮件地址:
DELETE FROM employees WHERE id NOT IN ( SELECT MIN(id) FROM employees GROUP BY email );
这个查询首先通过子查询找到每个电子邮件地址的最小id
,然后删除不在子查询结果集中的其他记录,这种方法假设每个重复记录可以通过id
唯一标识,如果没有id
列,可以使用其他唯一标识符。
问题2:如何在 SQL 中更新一列的值基于另一列的条件?
解答:在 SQL 中更新一列的值基于另一列的条件可以使用UPDATE
语句结合CASE
表达式,以下是一个示例,假设我们有一个名为employees
的表,我们需要根据job_title
更新salary
列:
UPDATE employees SET salary = CASE job_title WHEN 'Manager' THEN salary * 1.10 WHEN 'Sales Representative' THEN salary * 1.05 ELSE salary * 1.00 No change for other job titles END; WHERE job_title IN ('Manager', 'Sales Representative'); ``这个查询使用
CASE表达式根据
job_title的值来更新
salary列,只有当
job_title是
Manager或
Sales Representative时才会更新
salary`,否则保持不变。
来源互联网整合,作者:小编,如若转载,请注明出处:https://www.aiboce.com/ask/88566.html