---
title: "单表查询 | OceanBase 文档中心"
description: "单表查询 单表查询是指仅涉及一个表的查询。 单表查询语法 单表查询的语法如下： SELECT [ALL | DISTINCT] select_list FROM table_name [ WHERE query_condition ] [ GROUP BY group_by_expression ] [ HAVING…"
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.0.0 企业版

# 单表查询

更新时间：2026-06-30 17:05:17

单表查询是指仅涉及一个表的查询。

## 单表查询语法

单表查询的语法如下：

```sql
SELECT [ALL | DISTINCT] select_list FROM table_name
              [ WHERE query_condition ]
              [ GROUP BY group_by_expression ]
              [ HAVING group_condition ]
              [ ORDER BY column_list ][ASC | DESC]
              [ LIMIT limit_clause ]

column_list：
 column_name[,column_name...]

```

当 `WHERE`、`GROUP BY`、`HAVING`、`ORDER BY`、`LIMIT` 这些关键字一起使用时，先后顺序有明确的限制。关键字执行顺序如下：

1. 执行 `FROM` 找到表。
 2. 执行 `WHERE` 指定约束条件。
 3. 执行 `GROUP BY` 将取出的每条记录进行分组（聚合）。如果没有 `GROUP BY`，则整体作为一组。
 4. 执行 `HAVING` 将分组的结果进行筛选。
 5. 执行 `SELECT`。
 6. 执行 `DISTINCT` 去重。
 7. 执行 `ORDER BY` 将结果按条件升序或降序排序。
 8. 执行 `LIMIT` 限制结果的条数。

`WHERE` 和 `HAVING` 的区别是，`WHERE` 是在分组前对数据进行筛选，而 `HAVING` 是在分组后的结果里进行筛选，最后返回整个 SQL 的查询结果。

## SELECT 查询基础

创建示例表 `emp` 和 `dept`，并插入数据。

```sql
CREATE TABLE dept(  
    deptno           NUMBER(2,0),  
    dname            VARCHAR(14),  
    location         VARCHAR(13),
    CONSTRAINT pk_dept PRIMARY KEY(deptno)  
);

CREATE TABLE emp(  
    empno         NUMBER(4,0),  
    empname       VARCHAR(10),  
    job           VARCHAR(9),  
    mgr           NUMBER(4,0),  
    hiredate      DATE,  
    sal           NUMBER(7,2),  
    comm          NUMBER(7,2),
    deptno        NUMBER(2,0),
    CONSTRAINT PK_emp PRIMARY KEY (empno),
    CONSTRAINT FK_deptno  FOREIGN KEY (deptno)  REFERENCES dept (deptno)  
);

INSERT INTO dept VALUES (20,'ACCOUNTING','Los Angeles');
INSERT INTO dept VALUES (30,'OPERATIONS','CHICAGO');
INSERT INTO dept VALUES (40,'SALES','NEW YORK');

INSERT INTO emp VALUES (1698,'BLAKE','MANAGER',1839,'1981-5-1',2850,null,30);
INSERT INTO emp VALUES (1566,'JONES','MANAGER',1839, '1981-4-2',2975,null,40);
INSERT INTO emp VALUES (1788,'SCOTT','ANALYST',1566, '1987-7-15',3000,null,20);
INSERT INTO emp VALUES (1902,'FORD','ANALYST',1566, '1981-12-5',3000,null,40);
INSERT INTO emp VALUES (1369,'SMITH','CLERK',1902, '1980-12-17',800,null,20);
INSERT INTO emp VALUES (1499,'ALLEN','SALESMAN',1698, '1981-2-20',1600,300,30);

```

### 查询全部列

`*` 表示返回表中所有字段。示例如下：

```sql
obclient> SELECT * FROM emp;
+-------+---------+----------+------+------------+---------+--------+--------+
| empno | empname | job      | mgr  | hiredate   | sal     | comm   | deptno |
+-------+---------+----------+------+------------+---------+--------+--------+
|  1369 | SMITH   | CLERK    | 1902 | 1980-12-17 |  800.00 |   NULL |     20 |
|  1499 | ALLEN   | SALESMAN | 1698 | 1981-02-20 | 1600.00 | 300.00 |     30 |
|  1566 | JONES   | MANAGER  | 1839 | 1981-04-02 | 2975.00 |   NULL |     40 |
|  1698 | BLAKE   | MANAGER  | 1839 | 1981-05-01 | 2850.00 |   NULL |     30 |
|  1788 | SCOTT   | ANALYST  | 1566 | 1987-07-15 | 3000.00 |   NULL |     20 |
|  1902 | FORD    | ANALYST  | 1566 | 1981-12-05 | 3000.00 |   NULL |     40 |
+-------+---------+----------+------+------------+---------+--------+--------+
6 rows in set

```

等价于：

```sql
obclient> SELECT empname, empno, job, mgr, hiredate, sal,comm, deptno FROM emp;

```

### 查询指定列

```sql
obclient> SELECT empname, deptno FROM emp;
+---------+--------+
| empname | deptno |
+---------+--------+
| SMITH   |     20 |
| ALLEN   |     30 |
| JONES   |     40 |
| BLAKE   |     30 |
| SCOTT   |     20 |
| FORD    |     40 |
+---------+--------+
6 rows in set

```

在查询时可以为列设置别名。示例如下：

```sql
obclient> SELECT empname AS 员工名称, deptno AS 部门编号 FROM emp;
+--------------+--------------+
| 员工名称     | 部门编号     |
+--------------+--------------+
| SMITH        |           20 |
| ALLEN        |           30 |
| JONES        |           40 |
| BLAKE        |           30 |
| SCOTT        |           20 |
| FORD         |           40 |
+--------------+--------------+
6 rows in set

```

在查询时可以对结果进行去重。示例如下：

```sql
obclient> SELECT deptno FROM emp;
+---------+
| deptno |
+---------+
|     20 |
|     30 |
|     40 |
|     30 |
|     20 |
|     40 |
+--------+
6 rows in set

obclient> SELECT DISTINCT deptno FROM emp;
+---------+
| deptno |
+---------+
|     20 |
|     30 |
|     40 |
+---------+
3 rows in set

```

在查询时可以使用 `LIMIT` 用来限制返回的行数，常用于分页等操作。示例如下：

```sql
obclient> SELECT empname, deptno FROM emp LIMIT 3;
+---------+--------+
| empname | deptno |
+---------+--------+
| SMITH   |     20 |
| ALLEN   |     30 |
| JONES   |     40 |
+---------+--------+
3 rows in set

```

### 查询经过计算的值

```sql
obclient> SELECT empname, sal-100, deptno FROM emp;
+---------+---------+--------+
| empname | sal-100 | deptno |
+---------+---------+--------+
| SMITH   |  700.00 |     20 |
| ALLEN   | 1500.00 |     30 |
| JONES   | 2875.00 |     40 |
| BLAKE   | 2750.00 |     30 |
| SCOTT   | 2900.00 |     20 |
| FORD    | 2900.00 |     40 |
+---------+---------+--------+
6 rows in set

```

在查询中可以对指定列进行函数处理，如下示例将 `empname` 结果列展示为小写字母。

```sql
obclient> SELECT LOWER(empname), sal, deptno FROM emp;
+---------+---------+--------+
| empname | sal-100 | deptno |
+---------+---------+--------+
| smith   |  800.00 |     20 |
| allen   | 1600.00 |     30 |
| jones   | 2975.00 |     40 |
| blake   | 2850.00 |     30 |
| scott   | 3000.00 |     20 |
| ford    | 3000.00 |     40 |
+---------+---------+--------+
6 rows in set

```

此外，指定列的查询还支持 `WHERE` 条件查询，请参见 [条件查询](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000881381)。

更多用法请参见 [在查询中使用操作符和函数](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000886070)。

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
