SELECT 语句是一种查询形式。
调用
此语句可以在使用 DB2 CLI 函数的应用程序中使用,也可以通过 CLP 发出。
语法
.-,--------------. V | >>-SELECT--+----------+----| selectItem |-+--FROM---------------> '-DISTINCT-' .-,----------------------------------------. V | >----table-name--+--------------------------+-+-----------------> '-+----+--correlation-name-' '-AS-' >--+-----------------------------+------------------------------> '-WHERE--| search_condition |-' >--+----------------------------------------------+-------------> | .-,------------------------------. | | V | | '-GROUP BY----+---------------+--column-name-+-' '-table-name--.-' >--+----------------------------------------------------------------+--> | .-,--------------. | | V | | '-ORDER BY--+---simple-integer-+-------------------------------+-' | .-,--------------------------------------------. | | V | | '---+---------------+--column-name--+----------+-+-' '-table-name--.-' '-+-ASC--+-' '-DESC-' >--+-----------------------+----------------------------------->< '-LIMIT--simple-integer-' selectItem: |--+-*----------------------------------------+-----------------| +-COUNT--(--+-| expression |-+--)----------+ | '-*--------------' | +-AVG--(----| expression |----)------------+ +-SUM--(----| expression |----)------------+ +-MIN--(----| expression |----)------------+ +-MAX--(----| expression |----)------------+ +-MOD--(-| expression |-,-| expression |-)-+ +-LENGTH--(--| expression |--)-------------+ +-RTRIM--(--| expression |--)--------------+ +-LCASE--(--| expression |--)--------------+ '-UCASE--(--| expression |--)--------------' search_condition: .------------------------------------------------. V | |----+--------------------------------------------+-+-----------| '-+-AND-+--+-----+--+-| predicate |--------+-' '-OR--' '-NOT-' '-| search_condition |-' predicate: (1) |--+-| basic predicate |-+--------------------------------------| +-| IN predicate |----+ +-| LIKE predicate |--+ '-| NULL predicate |--' basic predicate: |--| expression |--+-=---+--| expression |----------------------| +- <>-+ +- <--+ +->---+ +- <=-+ +- >=-+ '-||--' IN predicate: .-,--------------. V | |--| expression |--+-----+--IN----| expression |-+--------------| '-NOT-' LIKE predicate: |--| expression |--+-----+--LIKE--| expression |----------------| '-NOT-' NULL predicate: |--| expression |--IS--+-----+--NULL----------------------------| '-NOT-' expression: .-operator-----------------------------------. V | |----+----+--+-literal------------------------+-+---------------| +- +-+ +-+---------------+--column-name-+ '- --' | '-table-name--.-' | +-special register---------------+ '-function-----------------------' operator: |--+- /-+-------------------------------------------------------| +- *-+ +- +-+ '- --'
记录:
描述
不支持对 CHAR、VARCHAR、BLOB(n)、DATE、TIME 和 TIMESTAMP 数据类型执行算术运算。
第一个和第二个自变量可以是 SMALLINT 或 INTEGER。
如果两个自变量都是 SMALLINT,则此函数的结果是 SMALLINT;否则,它是 INTEGER。结果可以为空;如果任何自变量为空,则结果是空值。
函数的结果是字符串。其长度是两个自变量的长度的和。如果自变量可以为空,则结果可以为空;如果自变量为空,则结果为空值。
LENGTH(expression) 函数返回值的长度。
自变量可以是返回下列内置数据类型的值的表达式:
该函数的结果是整数。如果自变量可以为空,则结果可以为空;如果自变量为空,则结果为空值。
结果是自变量的长度。变长字符串的长度是实际长度,而不是最大长度。
BLOB 的长度是用来表示值的字节数。
考虑称为 ADDRESS 的 VARCHAR(50) 列,其值为 '895 Don Mills Road'。LENGTH(ADDRESS) 返回值 18。
RTRIM(expression) 函数从字符串末尾除去空格。
自变量可以是 CHAR 或 VARCHAR 数据类型。
该函数的结果数据类型始终是 VARCHAR。
所返回的类型的长度参数与自变量数据类型的长度参数相同。
字符串的结果的实际长度是字符串表达式的长度减去为空白字符除去的字节数。图形字符串的实际长度是字符串表达式的长度(以双字节字符数计)减去已除去的双字节空白字符数。如果所有字符都被除去了,则结果为空白变长字符串(长度为零)。
如果自变量可以为空,则结果可以为空;如果自变量为空,则结果为空值。
考虑称为 NAME 的 CHAR(50) 列, 其值为 'Cliff '。RTRIM(NAME) 返回 'Cliff'。LENGTH(RTRIM(NAME)) 返回 5。
LCASE 或 LOWER 函数返回一个字符串,其中所有 SBCS 字符都已转换为小写字符。即,字符 A 至 Z 将转换为字符 a 至 z,而带有区分标记的字符将转换为其小写等效项(如果它们存在的话)。
自变量必须是其值为 CHAR 或 VARCHAR 数据类型的表达式。
该函数的结果的数据类型和长度属性与自变量的数据类型和长度属性相同。如果自变量可以为空,则结果可以为空;如果自变量为空,则结果为空值。
确保 EMPLOYEE 表中的列 JOB 的值中的字符将以小写字符的形式返回。例如:
SELECT LCASE(JOB) FROM EMPLOYEE WHERE EMPNO = '000020';
如果指定一个表引用,则中间结果表就是那个表引用的结果。如果指定了多个表引用,则中间结果表由指定表引用的行的所有可能组合组成(笛卡尔乘积)。每一结果行都是第一个表引用中的一行与第二个表引用中的一行的并置,接着与第三个表引用中的一行并置,依此类推。结果中的行数是所有独立的表引用中的行数的乘积。最多可以在 FROM 子句中指定 20 个表。
search_condition 的结果通过对每个指定谓词的结果应用指定的逻辑运算符(AND、OR 或 NOT)而导出。谓词对两个值作比较。如果未指定逻辑运算符,则搜索条件的结果就是指定的谓词的结果。
首先对圆括号内的搜索条件求值。如果圆括号未指定求值顺序,则 NOT 优先于 AND,而 AND 优先于 OR。同一优先级别的运算符的求值顺序未定义,这样可以优化搜索条件。
将对每一表行应用 search_condition,而所选择的行就是 search_condition 的结果为真的那些行。
搜索条件中的每个 column-name 都必须标识一个表列。
不支持对 CHAR、VARCHAR、BLOB(n)、DATE、TIME 和 TIMESTAMP 数据类型执行算术运算。
示例:
SELECT lname, fname FROM emp WHERE state IN ('CA', 'AZ', 'OR');
SELECT c1 FROM t1 WHERE c1*5-6 IN (mod(c2,2)+5,c3+4/2);
示例:
SELECT empid FROM emp WHERE city NOT IN ('San Jose', 'Morgan Hill', 'Santa Clara');
规则
BLOB 数据类型列不能用于 GROUP BY、ORDER BY 和 DISTINCT 子句。
注意事项
SELECT EMPNO, FIRSTNAME FROM EMPLOYEE ORDER BY LASTNAME以下查询有效:
SELECT LASTNAME, EMPNO, FIRSTNAME FROM EMPLOYEE ORDER BY LASTNAME
示例
示例 1:从 EMPLOYEE 表中选择在 01/01/1980 后聘用的雇员(EMPNO 和 LASTNAME),并按他们的姓(LASTNAME)的顺序排列他们。
SELECT EMPNO, LASTNAME FROM EMPLOYEE WHERE HIREDATE > '01/01/1980' ORDER BY LASTNAME
示例 2:计算 EMPLOYEE 表中每个部门的平均薪水。
SELECT DEPT, AVG(SALARY) FROM EMPLOYEE GROUP BY DEPT
示例 3:计算每个销售区域的最大销售量,按区域从最高到最低销售量显示结果。
SELECT REGION, MAX(SALES_VOL) FROM SALES GROUP BY REGION ORDER BY 2 DESC
相关参考