复杂的SELECT语句

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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值