sql学习笔记

本文介绍了使用Oracle SQL解决特殊业务需求的方法,包括递归查询员工结构、不使用Rank函数实现排名、计算员工工作时长及创建带With Check Option的视图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近看到一些比较特殊的业务逻辑,用sql实现,顺便收集整理一下

 

1、oracle中递归查询
任务:查询某一经理下的所有员工信息,用start with ... connect by ......实现。

示例:

create table RC(eid int , mid int)--eid:empoyee ID , mid:manager ID

insert into rc
select 2,1 from dual
union
select 3,1 from dual
union
select 4,1 from dual
union
select 5,2 from dual
union
select 6,3 from dual
union
select 7,5 from dual

select eid,mid from rc start with mid=1 connect by prior eid=mid

 

2、实现排名,但不要用rank函数

通过rownum实现,分组后取得最小rownum后作为此组的名次。

select t1.sales,t2.rank_num
from employee t1,
        (select sales,min(rownum) as rank_num from
               (select sales from employee order by sales desc)
        group by sales
) t2 where t1.sales=t2.sales(+) order by t1.sales desc

create table EMPSALES
(
  ID       NUMBER,
  NAME     VARCHAR2(20),
  IN_DATE  DATE,
  OUT_DATE DATE
)

 

3、上班时间计算:

用自连接实现。
select min(name) , min(tt.traffictime), tt.in_date from (
select name ,
floor((t.in_date-t.out_date)*60*24) as traffictime
,t.in_date ,t.out_date
from (
select t1.id,t1.name,t1.in_date,t2.out_date from empsales t1,(
select name, out_date from empsales)t2
where t1.name=t2.name and t1.out_date!=t2.out_date order by t1.in_date) t
) tt where tt.traffictime>0 group by tt.in_date

table定义:
create table EMPLOYEE
(
  ID    NUMBER,
  SALES NUMBER
)

 

4、带with check option选项的视图

语法:create or replace view V_Student as
select  id , name   from Student t where t.id=11 or t.id=10  with check option;

with check option选项的视图,在进行更新,添加操作时必须能在操作后的视图中包含相应修改的记录;如果是删除记录则必须是在现有视图中的记录,否则都会出现check不符合错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值