oracle 判断子查询,ORACLE中的子查询

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 ......

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值