PL/SQL

PL/SQL 知识量:16 - 57 - 244

5.1 查询语句><

查询语句的语法- 5.1.1 -

查询就是让数据库服务器根据客户端的要求搜寻出用户所需要的信息资料,并按用户规定的格式进行整理后返回给客户端。

查询语句SELECT在任何一种SQL语言中,都是使用频率最高的语句。SELECT语句由一系列灵活的子句组成,这些子句共同确定检索哪些数据。使用SELECT语句,用户除了可以查看普通数据库中的表和视图的信息外,还可以查看Oracle的系统信息。

SELECT语句语法结构如下:

SELECT
[DISTINCT|ALL]
select_list
FROM table_list
[ where_clause ]
[ group_by_clause ]
[ HAVING condition ]
[ order_by_clause ]

简要说明:

  • SELECT:查询动作关键词,查询语句的第一个单词。

  • [DISTINCT|ALL]:描述列中的数据是否去除重复记录。

  • select_list:需要查询的列,也可以说是占位符。可以是一个字段,也可以是多个字段。

  • FROM:关键词,表示数据的来源。

  • table_list:数据来源列表,允许有一个或多个;可以是表名,也可以是视图,还可以是别名。

  • [ where_clause ]:查询条件部分。

  • [ group_by_clause ]:GROUP BY子句部分。

  • [ HAVING condition ]:HAVING子句部分。

  • [ order_by_clause ]:排序部分。

关键词的顺序及功能- 5.1.2 -

SELECT语句中的子句顺序非常重要。可以省略可选子句,但这些子句在使用时必须按适当的顺序出现。各子句在SELECT查询语句中的排列顺序及主要作用如下所示:

顺序序号子句关键词子句功能
1SELECT从指定表中取出指定列的数据
2FROM指定要查询操作的表
3WHERE设定查询的标准
4GROUP BY对结果集进行分组,一般与聚合函数一起使用
5HAVING返回选取的结果集中行的数目
6ORDER BY指定排序方向

查询语句的执行顺序- 5.1.3 -

当执行SELECT语句时,数据库管理系统的执行步骤如下:

  1. 首先执行FROM子句,组装来自不同数据源的数据,即根据FROM子句中的一个或多个表创建工作表。如果在FROM子句中有两个或多个表,数据库管理系统将执行CROSS JOIN运算对表进行交叉连接,作为工作表。

  2. 如果有WHERE子句,实现基于指定的条件对记录行进行筛选,即数据库管理系统将WHERE子句列出的搜索条件作用于第1步中生成的工作表。数据库管理系统将保留那些满足搜索条件的行,删除那些不满足搜索条件的行。

  3. 如果有GROUP BY子句,它将把数据划分为多个分组。数据库管理系统将第2步生成的结果表中的行分成多个组,每个组中所有行的group_by_expression字段具有相同的值。接着,数据库管理系统将每组减少到单行,而后将其添加到新的结果表中,用以代替第1步的工作表。

  4. 如果有HAVING子句,它将筛选分组。数据库管理系统将HAVING子句列出的搜索条件作用于第3步生成的“组合”表中的每一行。数据库管理系统将保留那些满足搜索条件的行,删除那些不满足搜索条件的行。

  5. 将SELECT子句作用于结果表,删除结果表中不包含在select_list中的列。如果SELECT子句包含DISTINCT关键词,数据库管理系统将从结果中删除重复的行。

  6. 如果有ORDER BY子句,则按指定的排序规则对结果进行排序。

  7. 对于交互式的SELECT语句,在屏幕上显示结果;对于嵌入式的SQL,使用游标将结果传递给宿主程序。