ORACLE中的子查询
“子查询”就是查询中嵌套着另一个查询,也即通过SELECT语句的嵌套使用形成子查询。当我们不知道特定的查询条件时,可以用子查询来为父查询提供查询条件以获得查询结果。
ORACLE中常见的子查询有下面几类:
A、单行子查询(Single-row subqueries)。
B、多行子查询(Multirow subqueries)。
C、内部视图型子查询(Inline views)。
D、多列子查询(Multiple-column subqueries)。
在我们继续详细讨论子查询之前,先看看写子查询的一些特别要注意的地方:
A、子查询必须放在括号内。
B、子查询也必须放在比较操作符号的右边。
C、子查询最多可以嵌套到255级。
子查询中不能使用ORDER BY子句,即ORDER BY必须位于查询的最外层。
一、单行子查询(Single-Row Subqueries)
单行子查询并不是最后输出的结果只能返回一行,而是指子查询只能返回一行。
有一条规则我们必须记住:
当我们用“等于”比较操作符把子查询和父查询嵌套在一起时,父查询期望从子查询那里只得到一行返回值。
例一:
SELECT ename,deptno,sal from EMP
WHERE deptno=(SELECT deptno from dept
WHERE loc=’New York’);
在这个例子中,如果子查询“SELECT deptno from dept WHERE loc=’New York’”只返回一行,则这个例子能正确运行,否则将出错。原因见前面规则。
其它一些表明是单行子查询的比较操作符有“>,>=,”。
二、多行子查询(Multirow Subqueries)
多行子查询,意味着子查询返回的结果子集可以是多行。因此,我们通常用集合比较操作符(如:IN, NOT IN)把父查询和子查询连接起来。
例二:
SELECT ename,job,sal from EMP
WHERE deptno in ( SELECT deptno from dept
WHERE dname LIKE ‘A%’);
三、多列子查询(Multiple-Column Subqueries):
前面两个例子中,主查询的WHERE子句中都只有一列。然而,有时需要主查询处理多列。例如,为了得到每个部门工资最高的员工信息,可以使用下面的例子。
例三:
SELECT deptno,ename,job,sal from EMP
WHERE (deptno,sal) IN (SELECT deptno,MAX(sal) from EMP
相关文档:
mysql 大对象存取:
类型一般应该用mediumblod,
blob只能存2的16次方个byte,
mediumblod是24次方,
一般来说够用了.longblob是32次方有些大.
MYSQL默认配置只能存1M大小的文件,要修改配置,WIN版本的在mysql.ini文件中
修改max_allowed_packet,net_buffer_length等几个参数,或直接SET GLOBAL va ......
Oracle 10g statistic数据统计,Oracle会根据这些统计信息来决定是走RBO(Rule-BasedOptimization),还是走CBO(Cost-BasedOptimization),会去选择哪种执行计划更划算,影响是否走相关的索引等.如果是CBO的话,它依靠准确的(或者说比较准确的)统计信息来产生优化的执行路径,如果没有做过统计,CBO也就没有做cost评估的依据 ......
CASE表达式可以在SQL中实现if-then-else型的逻辑,而不必使用PL/SQL。CASE的工作方式与DECODE()类似,但应该使用CASE,因为它与ANSI兼容。
CASE有两种表达式:
1. 简单CASE表达式,使用表达式确定返回值.
语法:
CASE search_expression
WHEN expression1 THEN result1
WHEN expression2 THEN ......
select * from (select t.*,rownum rn from (select * from emp) t where rownum<=10) where rn>=6;
创建分页结果集的游标
create or replace package fenyepackage as
type testcursor is ref cursor;
end fenyepackage;
创建分页存储过程
create or replace procedure fenye3(
tableName varchar2, --表名 ......
先构造一个表:
create table emp2(
id number(2),
name varchar(10),
currdate date,
action varchar2(1)
)
创建触发器:
create or replace trigger d_i_u_emp2
after insert or update or delete on mysort
begin
if inserting then
insert into emp2 values (12,'dog',sysdate,'i');
elsif deleting then ......