第六十九章 SQL命令 SELECT(一)

2021-11-08  本文已影响0人  Cache技术分享

第六十九章 SQL命令 SELECT(一)

从数据库中的一个或多个表中检索行。

大纲

[(] SELECT [%keyword]
    [DISTINCT [BY (item {,item2})] | ALL] 
    [TOP {int | ALL}]
    select-item {,select-item, ...}
    [INTO host-variable-list]
    [FROM [optimize-option] table-ref [[AS] t-alias]
      {,table-ref [[AS] t-alias]} ]
    [WHERE condition-expression [{AND | OR condition-expression] ]
    [GROUP BY scalar-expression]
    [HAVING condition-expression [{AND | OR condition-expression] ]
    [ORDER BY item-order-list [ASC | DESC] ]
[)]

select-item ::= 
  [t-alias.]*   |
  [t-alias.]scalar-expression [[AS] c-alias]

参数

描述

SELECT语句执行从IRIS数据库检索数据的查询。
在其最简单的形式中,它从单个表的一个或多个列(字段)中检索数据。
列由select-item列表指定,表由FROM table-ref子句指定,WHERE子句可选地提供一个或多个限制条件,选择哪些行返回它们的列值。

在更复杂的查询中,SELECT可以检索列、聚合和非列数据,可以使用连接从多个表检索数据,也可以使用视图检索数据。

SELECT还可以用于从SQL函数、宿主变量或字面量返回值。
SELECT查询可以将返回这些非数据库值与从表或视图检索值结合起来。
SELECT仅用于返回此类非数据库值时,FROM子句是可选的。

SELECT查询返回的值称为结果集。
在动态SQL中,SELECT将值检索到%SQL中。
声明类。

IRIS设置一个状态变量SQLCODE,它指示SELECT的成功或失败。
此外,SELECT操作将%ROWCOUNT局部变量设置为选定的行数。
成功完成SELECT操作通常会将SQLCODE=0%ROWCOUNT设置为选中的行数。
在包含简单SELECT的嵌入式SQL的情况下,将选择(最多)一行的数据,因此SQLCODE=0%ROWCOUNT设置为01
但是,对于声明游标并从多行获取数据的嵌入式SQL SELECT,当游标被推进到数据末尾时(SQLCODE=100),操作就完成了;
此时,%ROWCOUNT被设置为选中的行总数。

Uses of SELECT

可以在以下上下文中使用SELECT语句:

可以用一组或多组括号将整个SELECT语句括起来,如下所示:

指定可选括号会为添加的每组括号生成一个单独的缓存查询。

权限

要在一个或多个表上执行SELECT查询,必须对所有指定的选择项列具有列级SELECT权限,或者对指定的表引用表或视图具有表级SELECT权限。
使用表别名(如t.Name“MyAlias”. name)指定的选择项列只需要列级的SELECT特权,而不需要表级的SELECT特权。

当使用SELECT *时,请注意列级权限覆盖GRANT语句中命名的所有表列;
表级权限涵盖所有表列,包括分配权限后添加的列。

没有必要的特权将导致SQLCODE -99错误(特权违反)。
可以通过调用%CHECKPRIV命令来确定当前用户是否具有SELECT权限。
通过调用$SYSTEM.SQL.Security.CheckPrivilege()方法,可以确定指定的用户是否具有表级的SELECT权限。

注意:对表具有表级SELECT特权并不能充分测试该表是否实际存在。
如果指定的用户具有%All角色,则CheckPrivilege()返回1,即使指定的表或视图不存在。

没有FROM子句的SELECT查询不需要任何SELECT特权。
包含FROM子句的SELECT查询需要SELECT特权,即使查询没有访问任何列数据。

必需子句

下面是所有SELECT语句的必需子句:

可选子句

以下可选子句对FROM子句返回的虚表进行操作。
所有都是可选的,但是,如果使用,必须按照指定的顺序出现:

以错误的顺序指定SELECT子句将产生SQLCODE -25错误。

SELECT语法顺序与SELECT子句语义处理顺序不同。

%Keyword 参数

要使用Keyword字参数,必须拥有当前名称空间相应的admin-privilege

指定Keyword字参数对处理的影响如下:

可以以任何顺序指定多个%Keyword参数。
多个参数由空格分隔。

DISTINCT子句

DISTINCT关键字子句将消除冗余字段值。
它有两种形式:

SELECT DISTINCT Home_State,Age FROM Sample.Person

SELECT DISTINCT BY (item):为每个项目值的唯一组合返回一行。
可以指定单个项目,也可以指定以逗号分隔的项目列表。
选择项列表可以(但不是必须)包含指定的项。
例如,下面的查询返回一行,其中包含Home_StateAge值的每个唯一组合的NameAge值:

SELECT DISTINCT BY (Home_State,Age) Name,Age FROM Sample.Person

项可以是任何有效的选择项值,星号除外。
它不能是列名别名。

任何类型的DISTINCT子句都可以指定多个项来测试唯一性。
列出一个以上的项将检索两个项组合中不同的所有行。
DISTINCT认为NULL是唯一的值。

TOP子句

TOP关键字子句指定SELECT语句只返回指定的行数。
它返回出现在返回的虚拟表的“顶部”的指定行数。
默认情况下,哪些行是表的“顶部”行是不可预测的。
但是, IRIS在选择TOP行之前应用DISTINCTORDER BY子句(如果指定了)。

上一篇下一篇

猜你喜欢

热点阅读