SQL数据检索基础指南
立即解锁
发布时间: 2025-08-20 01:15:45 阅读量: 1 订阅数: 4 

### SQL数据检索基础指南
#### 1. SELECT命令概述
在进行数据库数据检索时,SQL语言提供了SELECT命令,使用该命令的SQL语句通常被称为查询。一个SQL语句有六个主要子句,分别是SELECT、FROM、WHERE、GROUP BY、HAVING和ORDER BY。按照ANSI/ISO SQL标准,这些子句的处理顺序为FROM、WHERE、GROUP BY、HAVING、SELECT、ORDER BY,但在查询中指定它们的顺序并非如此。
下面是这些子句的简要描述表格:
| 组件 | 描述 |
| ---- | ---- |
| FROM | 需要检索的表是哪些? |
| WHERE | 过滤行的条件是什么? |
| GROUP BY | 行应该如何分组/聚合? |
| HAVING | 过滤聚合组的条件是什么? |
| SELECT | 你希望在结果中看到哪些列? |
| ORDER BY | 你希望结果行以什么顺序显示? |
在本文中,我们将重点关注使用SELECT命令的三个子句:
- **SELECT**:用于指定查询结果中要显示的列,还可以选择指定结果表上方的列标题。
- **WHERE**:允许制定条件,只有满足这些条件的行才会被检索出来。
- **ORDER BY**:用于指定查询结果中行的排序顺序。
#### 2. SELECT子句
##### 2.1 基本查询示例
首先看一个简单的SELECT命令示例:
```sql
select * from departments;
```
这个查询使用星号(*)表示要显示DEPARTMENTS表的所有列,执行结果如下:
```
DEPTNO DNAME LOCATION MGR
-------- ---------- -------- --------
10 ACCOUNTING NEW YORK 7782
20 TRAINING DALLAS 7566
30 SALES CHICAGO 7698
40 HR BOSTON 7839
```
再看一个稍复杂的查询,它从EMPLOYEES表中选择特定列,并使用WHERE子句指定检索行的条件:
```sql
select ename, init, job, msal
from employees
where deptno = 30;
```
执行结果:
```
ENAME INIT JOB MSAL
-------- ----- -------- --------
ALLEN JAM SALESREP 1600
WARD TF SALESREP 1250
MARTIN P SALESREP 1250
BLAKE R MANAGER 2850
TURNER JJ SALESREP 1500
JONES R ADMIN 800
```
##### 2.2 语法规则
在编写SQL语句时,有很大的自由度。可以将整个SQL命令语句写在一行,也可以分散在多行,还可以使用任意数量的空格和制表符。新行、空格和制表符通常被称为空白,SQL语句中空白的数量对Oracle DBMS没有意义。不过,定义一些SQL语句布局标准并坚持使用是个好主意,这可以提高SQL语句的可读性和可维护性。
在SELECT子句中,关键字SELECT后面必须有空白。列(或列表达式)用逗号分隔,因此空白不是必需的,但逗号后面的空格可以增强可读性。关键字FROM和WHERE后面也必须有空白,额外的空白虽然不是必需的,但可以提高可读性,比如在WHERE子句中可以在等号周围使用空格。
##### 2.3 列别名
默认情况下,表的列名会显示在查询结果上方。如果不喜欢这些名称,可以在SELECT子句中指定不同的结果列标题,即列别名。例如:
```sql
select ename, init, msal salary
from employees
where deptno = 30;
```
执行结果:
```
ENAME INIT SALARY
-------- ----- --------
ALLEN JAM 1600
WARD TF 1250
MARTIN P 1250
BLAKE R 2850
TURNER JJ 1500
JONES R 800
```
在这个例子中,SALARY被用作列标题,而不是原来的MSAL。ANSI/ISO SQL标准还支持在列名和对应的列标题(列别名)之间使用可选的关键字AS,使用该关键字可以增强可读性,上述查询也可以写成:
```sql
select ename, init, msal AS salary
from employees
where deptno = 30;
```
##### 2.4 DISTINCT关键字
有时查询结果中会包含重复行,可以通过在关键字SELECT后面立即添加关键字DISTINCT来消除这些重复行。例如:
```sql
select DISTINCT job, deptno
from employees;
```
执行结果:
```
JOB DEPTNO
-------- --------
ADMIN 10
ADMIN 30
DIRECTOR 10
MANAGER 10
MANAGER 20
MANAGER 30
SALESREP 30
TRAINER 20
```
如果不添加DISTINCT关键字,这个查询会产生14行结果,因为EMPLOYEES表包含14行。需要注意的是,在SELECT子句中使用DISTINCT可能会带来一些性能开销,因为Oracle DBMS必须对结果进行排序以消除重复行。
##### 2.5 列表达式
在SELECT子句中,除了列名,还可以指定列表达式。例如,通过选择SALGRADES表中上限和下限的差值来得出工资等级的范围:
```sql
select grade, upperlimit - lowerlimit
from salgrades;
```
执行结果:
```
GRADE UPPERLIMIT-LOWERLIMIT
-------- ---------------------
1 500
2 199
3 599
4 999
5 6998
```
再看一个例子,将员工姓名和首字母连接成一个列,
0
0
复制全文
相关推荐










