# 基础 SELECT 查询

URL: https://caijiao.org/postgresql/basic/sql-query/select
Source: docs/postgresql/basic/sql-query/select.md
Description: 介绍 PostgreSQL 中基础的 'SELECT' 查询操作，讲解基本查询、过滤、排序、分组等常用功能。

## 基本查询

`SELECT` 是 SQL 中最常用的操作，用于从一个或多个表中检索数据。

### 查询所有字段

```sql
SELECT * FROM employees;
````

### 查询指定字段

```sql
SELECT name, salary FROM employees;
```

## 过滤数据

使用 `WHERE` 子句对查询结果进行过滤。

### 过滤单个条件

```sql
SELECT * FROM employees WHERE salary > 50000;
```

### 过滤多个条件

使用 `AND` 和 `OR` 组合多个条件。

```sql
SELECT * FROM employees WHERE salary > 50000 AND hired_at > '2024-01-01';
```

### 范围查询

使用 `BETWEEN` 关键字筛选某个范围内的数据。

```sql
SELECT * FROM employees WHERE salary BETWEEN 40000 AND 60000;
```

### 模糊查询

使用 `LIKE` 进行模糊匹配。

```sql
SELECT * FROM employees WHERE name LIKE 'J%';
```

### 空值判断

使用 `IS NULL` 判断是否为 `NULL`。

```sql
SELECT * FROM employees WHERE hired_at IS NULL;
```

## 排序数据

使用 `ORDER BY` 子句对查询结果进行排序。

### 升序排序

```sql
SELECT * FROM employees ORDER BY salary ASC;
```

### 降序排序

```sql
SELECT * FROM employees ORDER BY salary DESC;
```

### 多列排序

```sql
SELECT * FROM employees ORDER BY department, salary DESC;
```

## 分组数据

使用 `GROUP BY` 子句对数据进行分组，通常与聚合函数配合使用。

### 按部门分组计算平均薪资

```sql
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department;
```

### 按多列分组

```sql
SELECT department, hired_at, COUNT(*) AS total_employees
FROM employees
GROUP BY department, hired_at;
```

## 限制查询结果

使用 `LIMIT` 限制查询返回的记录数量。

### 获取前 5 条记录

```sql
SELECT * FROM employees LIMIT 5;
```

### 配合 `OFFSET` 实现分页查询

```sql
SELECT * FROM employees ORDER BY salary DESC LIMIT 10 OFFSET 20;
```

## 小结

基础的 `SELECT` 查询包括选择字段、过滤、排序、分组等操作，帮助用户高效从 PostgreSQL 数据库中提取、整理和显示数据。这些操作是所有数据检索任务的基础。
