SELECT 语句是 SQL 中最常用的语句之一,用于从数据库表中检索数据。通过使用 SELECT 语句,你可以指定要返回的数据列和行。
SELECT 语句的基本语法
基本的 SELECT 语句由以下部分组成:
SELECT
:关键字,指示 SQL 查询要返回哪些数据。- 列名或星号(*):指定要返回的具体列名,或者使用星号表示所有列。
FROM
:关键字,指示查询的数据来源。- 表名:指定包含所需数据的表。
示例:
SELECT column_name FROM table_name;
示例(选择所有列):
SELECT * FROM table_name;
WHERE 子句
WHERE 子句允许你在查询中添加条件来过滤结果。它通常与 SELECT 语句一起使用,以返回满足特定条件的行。
基本语法
SELECT column_name(s) FROM table_name WHERE condition;
示例
假设有一个名为 employees
的表,你想获取所有工资大于 5000 的员工信息:
SELECT * FROM employees WHERE salary > 5000;
比较运算符
运算符 | 描述 |
---|---|
= | 等于 |
<> 或 != | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于或等于 |
<= | 小于或等于 |
逻辑运算符
运算符 | 描述 |
---|---|
AND | 返回 TRUE 如果所有条件都为真 |
OR | 返回 TRUE 如果至少一个条件为真 |
NOT | 反转条件的结果 |
示例:结合使用 AND 和 OR
SELECT * FROM employees WHERE department = '销售' AND (salary > 5000 OR bonus > 1000);
IN 运算符
IN 运算符允许你在 WHERE 子句中指定多个可能的值。
示例
SELECT * FROM employees WHERE department IN ('销售', '市场');
BETWEEN 运算符
BETWEEN 运算符允许你选择一个范围内的值,包括开始和结束值。
示例
SELECT * FROM employees WHERE salary BETWEEN 5000 AND 10000;
ORDER BY 子句
ORDER BY 子句用于根据一个或多个列对结果集进行排序。默认情况下,排序是升序(ASC),但可以显式指定为降序(DESC)。
基本语法
SELECT column_name(s) FROM table_name ORDER BY column_name ASC|DESC;
示例
SELECT * FROM employees ORDER BY salary DESC;
多列排序
SELECT * FROM employees ORDER BY department ASC, salary DESC;
LIMIT 子句
LIMIT 子句用于限制返回的行数。它在不同的数据库系统中有不同的实现方式,例如 MySQL 和 PostgreSQL 使用 LIMIT,而 SQL Server 使用 TOP。
示例
MySQL 和 PostgreSQL
SELECT * FROM employees LIMIT 10;
SQL Server
SELECT TOP 10 * FROM employees;
聚合函数
聚合函数用于执行计算,如求总和、平均值等,并返回单个值。常见的聚合函数有 COUNT(), SUM(), AVG(), MAX() 和 MIN()。
COUNT()
COUNT() 函数返回行数。
示例
SELECT COUNT(*) AS employee_count FROM employees;
SUM()
SUM() 函数返回数值列的总和。
示例
SELECT SUM(salary) AS total_salary FROM employees;
AVG()
AVG() 函数返回数值列的平均值。
示例
SELECT AVG(salary) AS average_salary FROM employees;
MAX() 和 MIN()
MAX() 函数返回一列中的最大值,MIN() 函数返回最小值。
示例
SELECT MAX(salary) AS highest_salary, MIN(salary) AS lowest_salary FROM employees;
GROUP BY 子句
GROUP BY 子句用于将具有相同值的行分组到一起。通常与聚合函数一起使用。
基本语法
SELECT column_name, aggregate_function(column_name) FROM table_name GROUP BY column_name;
示例
SELECT department, COUNT(*) AS employee_count FROM employees GROUP BY department;
HAVING 子句
HAVING 子句类似于 WHERE 子句,但它应用于 GROUP BY 结果集。HAVING 子句只能在包含 GROUP BY 子句的 SELECT 语句中使用。
基本语法
SELECT column_name, aggregate_function(column_name) FROM table_name GROUP BY column_name HAVING condition;
示例
SELECT department, COUNT(*) AS employee_count FROM employees GROUP BY department HAVING COUNT(*) > 10;
DISTINCT 关键字
DISTINCT 关键字用于返回唯一不同的值。它常用于消除重复值。
示例
SELECT DISTINCT department FROM employees;
AS 关键字
AS 关键字用于给输出列或表取别名。
示例
SELECT department AS 部门名称 FROM employees;
JOIN 操作
JOIN 操作用于合并两个或多个表中的行,基于这些表之间的相关列。
INNER JOIN
INNER JOIN 返回两个表中匹配的行。
示例
SELECT employees.name, departments.department_name FROM employees INNER JOIN departments ON employees.department_id = departments.id;
LEFT JOIN
LEFT JOIN 返回左表中的所有行,以及右表中匹配的行。如果右表中没有匹配,则结果集中右表的列会包含 NULL 值。
示例
SELECT employees.name, departments.department_name FROM employees LEFT JOIN departments ON employees.department_id = departments.id;
RIGHT JOIN
RIGHT JOIN 返回右表中的所有行,以及左表中匹配的行。如果左表中没有匹配,则结果集中左表的列会包含 NULL 值。
示例
SELECT employees.name, departments.department_name FROM employees RIGHT JOIN departments ON employees.department_id = departments.id;
FULL OUTER JOIN
FULL OUTER JOIN 返回左表和右表中所有的行。当某一边的表中没有匹配时,结果集中另一侧的列会包含 NULL 值。
示例
SELECT employees.name, departments.department_name FROM employees FULL OUTER JOIN departments ON employees.department_id = departments.id;
子查询
子查询是在另一个查询内部嵌套的查询。它们可以出现在 SELECT、INSERT、UPDATE 或 DELETE 语句中。
示例
SELECT name FROM employees WHERE department_id IN ( SELECT id FROM departments WHERE department_name = '研发' );
UNION 操作
UNION 操作用于组合两个或更多 SELECT 语句的结果集。结果集中不会出现重复项。
基本语法
(SELECT column_name(s) FROM table_name1) UNION (SELECT column_name(s) FROM table_name2);
示例
(SELECT name FROM employees) UNION (SELECT name FROM contractors);
结论
SELECT 语句及其相关子句和操作是 SQL 中非常重要的部分。理解并掌握这些概念,可以帮助你更有效地从数据库中检索和操作数据。