断点

每天进步一点点!
posts - 174, comments - 56, trackbacks - 0, articles - 21

复杂的SELECT语句

Posted on 2010-01-14 22:07 断点 阅读(261) 评论(0)  编辑  收藏 所属分类: SQL

1.集合操作:

     Union 用第二个查询结果合并第一个查询结果,同时不显示重复的行

     Union all 检索出所有的行,包括重复的行

     intersect 返回两个查询所检索出的共有行。

     minus 返回将第二个查询检索出的行从第一个查询检索出的行中减去之后剩余的行。

select ename,dname,job
from dept t,emp p
where t.deptno=p.deptno and t.dname='SALES'
union/intersect/minus
select ename,dname,job
from dept t,emp p
where t.deptno=p.deptno and p.job='MANAGER';

2.子查询:

可以在一个select语句中嵌入另一个完整的select语句,但此句的子查询的返回结果只能有一个,如想返回多个可用 in

select ename,dname,job
from dept t,emp p
where t.deptno=p.deptno and t.dname=
(
select dname
from dept t,emp p
where t.deptno=p.deptno and p.sal=1600.00
);

select  ename,dname,job
from dept t,emp p
where t.deptno=p.deptno and t.dname in
(
select dname
from dept t,emp p
where t.deptno=p.deptno and p.sal>3000.00
);

3.表的连接:

select t.dname

from emp p,dept t
where p.deptno=t.deptno and p.ename='SMITH';

由于实施了关系连接的两表是任何连接的,所有需要在where子句中设置主关键字等于外部关键字的条件,否则查询结果不对。

4.case语句:

*简单case语句,使用表达式确定返回值,但case后的变量只有一个

select t.dname,t.loc,t.deptno,
case t.deptno
when 10 then 'ACCOUNTING'
when 20 then 'RESEARCH'
when 30 then 'SALES'
else 'T'
end
from dept t;

*搜索case语句,使用条件确定返回值,但when后面可以跟多个条件

select t.dname,t.loc,t.deptno,
case
when t.deptno=10 and t.loc='CHICAGO' then 'ACCOUNTING'
when t.deptno=20 then 'RESEARCH'
when t.deptno=30 then 'SALES'
else 'T'
end
from dept t;

5.decode函数:

decode(value,search_value,result,default_value)

如果value和search_value相等,则返回result,否则返回default_value。

select t.dname,t.loc,t.deptno,
decode(t.deptno,
10,'ACCOUNTING',
20,'RESEARCH',
30,'SALES',
'T'
)
from dept t;


posted @ 2009-01-13 17:15 断点 阅读(240) | 评论 (0)

只有注册用户登录后才能发表评论。


网站导航: