Oracle DB对数据进行限制和排序
• 对通过查询检索的行进行限制
• 对通过查询检索的行进行排序
• 在运行时使用& 替代变量对输出进行限制和排序
• 使用以下项对行进行限制:
– WHERE 子句
– 使用=、<=、BETWEEN、IN、LIKE 和NULL 条件的比较条件
– 使用AND 、OR和NOT 运算符的逻辑条件
• 表达式中运算符的优先级规则
• 使用ORDER BY 子句对行进行排序
• 替代变量
• DEFINE 和VERIFY 命令
对所选行进行限制
• 使用WHERE子句可以限制返回的行:
• WHERE子句在FROM 子句之后。
SELECT *|{[DISTINCT] column|expression [alias ],...}
FROM table
[WHERE condition(s)];
使用WHERE 子句
SELECT employee_id, last_name, job_id, department_id
FROM employees
WHERE department_id = 90 ;
字符串和日期
• 字符串和日期值应放在单引号内。
• 字符值区分大小写,日期值区分格式。
• 默认的日期显示格式为DD-MON-RR。
SELECT last_name, job_id, department_id FROM employees
WHERE last_name = 'Whalen' ;
SELECT last_name FROM employees
WHERE hire_date = '17-FEB-96' ;
比较运算符
使用比较运算符
SELECT last_name, salary FROM employees
WHERE salary <= 3000 ;
使用BETWEEN运算符的范围条件
使用BETWEEN运算符可基于值范围显示行:
SELECT last_name, salary FROM employees
WHERE salary BETWEEN 2500 AND 3500 ;
使用IN运算符的成员条件
使用IN运算符可测试列表中的值:
SELECT employee_id, last_name, salary, manager_id FROM employees
WHERE manager_id IN (100, 101, 201) ;
使用LIKE 运算符执行模式匹配
• 使用LIKE 运算符可执行通配符搜索,查找有效搜索字符串值。
• 搜索条件可包含文字字符或数字:
– % 表示零个或多个字符。
– _ 表示一个字符。
SELECT first_name FROM employees
WHERE first_name LIKE 'S%' ;
组合通配符字符
• 为执行模式匹配,可将两个通配符(%, _) 与文字字符组合使用:
• 可使用ESCAPE 标识符来搜索实际的% 和_ 符号。
SELECT last_name FROM employees
WHERE last_name LIKE '_o%' ;
使用NULL 条件
使用IS NULL运算符可测试空值。
SELECT last_name, manager_id FROM employees
WHERE manager_id IS NULL ;
使用逻辑运算符定义条件
使用AND 运算符
AND 要求两个条件都为真:
SELECT employee_id, last_name, job_id, salary FROM employees
WHERE salary >= 10000 AND job_id LIKE '%MAN%' ;
使用OR运算符
OR要求其中一个条件为真:
SELECT employee_id, last_name, job_id, salary FROM employees
WHERE salary >= 10000 OR job_id LIKE '%MAN%' ;
使用NOT 运算符
SELECT last_name, job_id FROM employees WHERE job_id
NOT IN ('IT_PROG', 'ST_CLERK', 'SA_REP') ;
优先级规则
可以使用括号更改优先级规则。
使用ORDER BY 子句
• 使用ORDER BY 子句可对检索行进行排序:
– ASC :升序,默认顺序
– DESC:降序
• ORDER BY 子句位于SELECT 语句的最后:
SELECT last_name, job_id, department_id, hire_date FROM employees
ORDER BY hire_date ;
排序
• 按降序排序:
SELECT last_name, job_id, department_id, hire_date
FROM employees
ORDER BY hire_date DESC ;
• 按列别名排序:
SELECT employee_id, last_name, salary*12 annsal
FROM employees
ORDER BY annsal ;
• 使用列的数字位置进行排序:
SELECT last_name, job_id, department_id, hire_date FROM employees
ORDER BY 3;
• 按多个列进行排序:
SELECT last_name, department_id, salary FROM employees
ORDER BY department_id, salary DESC;
替代变量
• 使用替代变量:
– 使用单与号 (&) 及双与号 (&&) 替代变量可临时存储值
• 可将替代变量作为以下项的补充:
– WHERE 条件
– ORDER BY 子句
– 列表达式
– 表名
– 整个SELECT 语句
使用单与号替代变量
使用以与号( & ) 为前缀的变量可提示用户输入一个值:
SELECT employee_id, last_name, salary, department_id FROM employees
WHERE employee_id = &employee_num ;
使用替代变量指定字符值和日期值
对日期值和字符值使用单引号:
SELECT last_name, department_id, salary*12 FROM employees
WHERE job_id = '&job_title' ;
指定列名、表达式和文本
SELECT employee_id, last_name, job_id,&column_name FROM employees
WHERE &condition
ORDER BY &order_column ;
使用双与号替代变量
如果要重复使用变量值而不每次都显示提示,请使用双与号( &&):
SELECT employee_id, last_name, job_id, &&column_name
FROM employees
ORDER BY &column_name ;
使用DEFINE 命令
• 使用DEFINE 命令可创建变量并为其赋值。
• 使用UNDEFINE 命令可删除变量。
DEFINE employee_num = 200
SELECT employee_id, last_name, salary, department_id FROM employees
WHERE employee_id = &employee_num ;
UNDEFINE employee_num
使用VERIFY 命令
在SQL Developer 使用值替换替代变量前后,使用VERIFY 命令可切换替代变量的显示:
SET VERIFY ON
SELECT employee_id, last_name, salary
FROM employees
WHERE employee_id = &employee_num;
小结
• 使用WHERE子句来限制输出行:
– 使用比较条件
– 使用BETWEEN、IN、LIKE 和NULL 运算符
– 应用AND 、OR和NOT 逻辑运算符
• 使用ORDER BY 子句对输出行进行排序:
SELECT *|{[DISTINCT] column|expression [alias ],...}
FROM table
[WHERE condition(s)]
[ORDER BY {column, expr, alias} [ASC|DESC]] ;
• 在运行时使用& 替代变量对输出进行限制和排序