SQL SELECT 语句
SQL SELECT
语句用于从数据库表中查询数据,是 SQL 最常用的语句之一。它允许你指定要检索的列、表、条件等,以获取所需的数据。
基本语法
SELECT column1, column2, ...
FROM table_name
[WHERE condition]
[GROUP BY column]
[HAVING condition]
[ORDER BY column [ASC | DESC]];
核心组成部分
- SELECT: 指定要查询的列(或使用
*
选择所有列)。 - FROM: 指定数据来源的表。
- WHERE: 过滤数据,满足条件的行才会被返回。
- GROUP BY: 将数据分组,常用于聚合函数(如
COUNT
,SUM
)。 - HAVING: 过滤分组后的数据。
- ORDER BY: 对结果排序,
ASC
(升序,默认)或DESC
(降序)。
示例
假设有一个表 employees
:
id | name | department | salary |
---|---|---|---|
1 | Alice | HR | 50000 |
2 | Bob | IT | 60000 |
3 | Charlie | HR | 55000 |
1. 基本查询
SELECT name, salary
FROM employees;
结果:
name | salary |
---|---|
Alice | 50000 |
Bob | 60000 |
Charlie | 55000 |
2. 查询所有列
SELECT *
FROM employees;
结果:返回表中所有列和行。
3. 使用 WHERE 条件
SELECT name, salary
FROM employees
WHERE department = 'HR';
结果:
name | salary |
---|---|
Alice | 50000 |
Charlie | 55000 |
4. 使用聚合函数和 GROUP BY
SELECT department, COUNT(*) as emp_count
FROM employees
GROUP BY department;
结果:
department | emp_count |
---|---|
HR | 2 |
IT | 1 |
5. 使用 HAVING
SELECT department, AVG(salary) as avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 55000;
结果:
department | avg_salary |
---|---|
IT | 60000 |
6. 使用 ORDER BY
SELECT name, salary
FROM employees
ORDER BY salary DESC;
结果:
name | salary |
---|---|
Bob | 60000 |
Charlie | 55000 |
Alice | 50000 |
其他常见用法
- DISTINCT: 去除重复行。
SELECT DISTINCT department
FROM employees;
结果: HR
, IT
- LIMIT: 限制返回的行数(常用于 MySQL/PostgreSQL)。
SELECT name
FROM employees
LIMIT 2;
结果: Alice
, Bob
- JOIN: 结合多个表的数据。
SELECT e.name, d.dept_name
FROM employees e
JOIN departments d ON e.department = d.dept_id;
- LIKE: 模糊查询。
SELECT name
FROM employees
WHERE name LIKE 'A%';
结果: Alice
- IN: 匹配多个值。
SELECT name
FROM employees
WHERE department IN ('HR', 'IT');
注意事项
- 性能:避免在大型表上使用
SELECT *
,明确指定需要的列。 - 大小写:SQL 关键字对大小写不敏感,但表名和列名可能因数据库而异。
- 安全性:使用参数化查询防止 SQL 注入。
- 数据库差异:某些功能(如
LIMIT
)在不同数据库(如 SQL Server 使用TOP
)中语法不同。
如果需要更复杂的查询示例、特定数据库的用法(如 MySQL、PostgreSQL、SQL Server),或结合实际场景的 SQL 语句,请告诉我!