子查询: 语法: 0select col from table where expr operator (0select col from table). 子查询在主查询执行前执行一次。 子查询的结果被用于主查询。 使用规则: 在WHERE 和 HAVING 子句中都可以使用子查询。 *、子查询必须用括号扩起。 *、子查询应该在比较条件的右边。 *、在子查询中的ORDER BY 子句不需要,除非执行TOP-N分析。 TOP-N分析:(在一些表里求出最怎么怎么怎么样(最好、做多...)的几个人)。 *、对单行子查询使用单行比较操作符,多行子查询使用多行比较操作符。 可以在子查询中使用组函数。 子查询的分类:
单行单列子查询 单行操作符:>,<,=,>=,<=,<> 一定返回一行
多行单列子查询
单行多列子查询 返回零行或多行 多行操作符: in 等于列表中的任何值。(不能用NOT IN) ANY 与子查询返回的每个值进行比较。(小于是小于最大的,大于是大于最小的)
0select employee_id,last_name,job_id,salary from smployees where salary < any(0select salary from employees where job_id= IT_PROG ) and job_id <> IT_PROG . ALL(小于是小于最小的,大于是大于最大的)
0select e.employee_id,e.last_name,e.salary from employees e, (0select department_id,min(salary) m from employees group by department_id )d where e.department_id=d.department_id and e.salary=d.m; 查询每个部门薪水最少的员工的资料。
多行多列子查询
替换变量: 临时存储值: &. (生命周期):单次引用中,不需要声明。如果替换字符或日期类型,最好用单引号扩起。 使用范围: where order by 列表达式 表名 整个SELECT 语句中。
CLE[AR]:清除列的格式 HEA[DING] TEXT:设置列标题 FOR[MAT] FORMAT:格式化显示列的值,对字符和数字有效,对日期无效。 column salary justify left format $999,999.00 justify left:左对齐。 col manager_id format 999999999 限制字符串的长度有A 数字限制 限制数字的长度有9,有几为9就限制成几位。
NOPRINT/PRINT NOPRINT:把一个字段从输出上屏蔽掉(返回但不显示)。 col 字段名 noprint/print.
NULL如果有NULL值,显示什么。 col name null on employee TTITLE[text/off/on]设置报表的表头 BTITLE[text/off/on]设置报表的表尾 做报表的时候要先想好PAGESIZE的大小。 BREAK ON [REPORT_ELEMENT] 压制重复值的显示。只能跟一个字段名才有效。 例: 0select department_id,last_name from employees where rownum<30 order by 1,2. break on department_id