SQL单表查询
- [1. `SELECT` 语句的基本结构](#1.
SELECT
语句的基本结构) - [2. 查询所有列和指定列](#2. 查询所有列和指定列)
- [3. `WHERE` 条件筛选](#3.
WHERE
条件筛选) -
- 比较运算符
- [多条件查询:使用 `AND` 和 `OR`](#多条件查询:使用
AND
和OR
) - [`NOT` 操作符](#
NOT
操作符)
- [4. `ORDER BY` 进行排序](#4.
ORDER BY
进行排序) - [5. `LIMIT` 限制返回行数](#5.
LIMIT
限制返回行数) -
- 只获取前N行数据
- [使用 `LIMIT` 和 `OFFSET` 进行分页查询](#使用
LIMIT
和OFFSET
进行分页查询)
- [6. 常见的SQL函数操作](#6. 常见的SQL函数操作)
- [7. 使用别名 `AS`](#7. 使用别名
AS
) - [8. 使用 `DISTINCT` 去重](#8. 使用
DISTINCT
去重) - 综合实例
1. SELECT
语句的基本结构
单表查询的最基本语句结构是:
sql
SELECT 列1, 列2, ...
FROM 表名
WHERE 条件
ORDER BY 列名 ASC|DESC
LIMIT 数量;
关键要素说明:
SELECT
:选择列。可以指定多个列,也可以使用通配符(*
)选择所有列。FROM
:指定查询的数据来源,即数据表的名称。WHERE
:条件筛选,设置过滤条件,只返回符合条件的行。ORDER BY
:排序,对结果集按指定列进行升序或降序排列。LIMIT
:限制结果行数,适合分页或只取前几条数据。
2. 查询所有列和指定列
查询所有列
如果希望一次性查询表中的所有列,可以用星号*
代替列名。
示例 :查询employees
表的所有数据。
sql
SELECT * FROM employees;
此时返回整个表的内容,非常适合快速查看一个表的所有数据。
查询特定列
在很多实际情况下,我们并不需要所有列的数据。我们可以指定要查询的列名,以减少数据传输量。
示例:查询员工姓名和工资
sql
SELECT name, salary FROM employees;
这种方法尤其适合数据量较大时的查询操作,因为只获取所需列的数据能够显著提升查询效率。
3. WHERE
条件筛选
WHERE
子句允许我们对数据进行条件过滤。只有符合条件的记录才会被返回。WHERE
子句支持多种比较运算符和逻辑运算符。
比较运算符
=
:等于<>
:不等于>
:大于<
:小于>=
:大于等于<=
:小于等于
示例:查询工资大于8000的员工
sql
SELECT * FROM employees WHERE salary > 8000;
返回结果中只有工资高于8000的员工数据。
多条件查询:使用 AND
和 OR
可以使用AND
和OR
运算符组合多个条件。
AND
:只有所有条件都为真时,结果才会返回。OR
:只要有一个条件为真,结果就会返回。
示例 :查询IT
部门且工资大于8000的员工
sql
SELECT * FROM employees WHERE department = 'IT' AND salary > 8000;
只有同时满足两个条件的记录才会返回。
示例 :查询IT
部门或工资大于8000的员工
sql
SELECT * FROM employees WHERE department = 'IT' OR salary > 8000;
只要满足其中一个条件的记录都会被返回。
NOT
操作符
NOT
运算符用于否定条件,返回不符合该条件的记录。
示例 :查询非IT
部门的员工
sql
SELECT * FROM employees WHERE NOT department = 'IT';
4. ORDER BY
进行排序
ORDER BY
子句用于对结果进行排序,可以指定升序(ASC)或降序(DESC)。
- ASC(升序):从小到大排列(默认)。
- DESC(降序):从大到小排列。
示例:按工资升序排列
sql
SELECT * FROM employees ORDER BY salary ASC;
示例:按年龄降序排列
sql
SELECT * FROM employees ORDER BY age DESC;
多列排序
可以根据多列进行排序。首先按第一列排序,如果第一列相同,则按第二列排序,以此类推。
示例:先按部门排序,再按工资降序排序
sql
SELECT * FROM employees ORDER BY department, salary DESC;
返回结果会先按部门分组排序,然后在每个部门内按工资降序排列。
5. LIMIT
限制返回行数
LIMIT
子句用于限制查询结果返回的行数,特别适用于分页查询和获取前几条记录。
只获取前N行数据
示例:获取工资最高的两位员工
sql
SELECT * FROM employees ORDER BY salary DESC LIMIT 2;
此查询首先按工资降序排序,然后仅返回前两条记录。
使用 LIMIT
和 OFFSET
进行分页查询
分页查询时,我们可以配合LIMIT
和OFFSET
使用,OFFSET
表示从第几行开始返回数据。
示例:从第3行开始返回两条数据
sql
SELECT * FROM employees LIMIT 2 OFFSET 2;
此查询会跳过前两行,从第三行开始返回两条记录。
6. 常见的SQL函数操作
在单表查询中,SQL提供了一些常用的函数来对数据进行处理:
- COUNT():计算记录行数。
- SUM():计算数值列的总和。
- AVG():计算数值列的平均值。
- MAX():返回数值列中的最大值。
- MIN():返回数值列中的最小值。
示例:统计员工总数
sql
SELECT COUNT(*) AS total_employees FROM employees;
示例:计算所有员工的平均工资
sql
SELECT AVG(salary) AS avg_salary FROM employees;
示例 :查询部门为IT
的员工最高工资
sql
SELECT MAX(salary) AS max_salary FROM employees WHERE department = 'IT';
7. 使用别名 AS
别名AS
用于给列或表起一个临时名称。别名不会改变列或表的真实名称,但可以使查询结果更加易读。
示例 :查询员工姓名和工资,并给工资列起别名为employee_salary
sql
SELECT name, salary AS employee_salary FROM employees;
在查询结果中,列名会显示为employee_salary
而不是salary
,这在需要重新命名列名时非常方便。
8. 使用 DISTINCT
去重
DISTINCT
关键字用于消除结果中的重复值。
示例:查询所有不同的部门名称
sql
SELECT DISTINCT department FROM employees;
返回结果中,每个部门只会出现一次。
综合实例
假设我们想要查询以下信息:
- 所有部门中工资最高的员工姓名及其工资。
- 只返回
IT
和财务
部门,并按工资降序排列。
综合使用多种SQL关键字的查询语句如下:
sql
SELECT name, department, MAX(salary) AS highest_salary
FROM employees
WHERE department IN ('IT', '财务')
GROUP BY department
ORDER BY highest_salary DESC;
通过熟练掌握以上内容,可以灵活应用单表查询从数据中获取所需信息。