oracle99语法

本文详细介绍了Oracle数据库的查询技巧,包括链表查询、rowid与rownum的使用,以及视图与索引的创建和管理。通过实例演示了如何进行内连接、外连接操作,以及如何利用rowid进行数据去重。此外,还讲解了视图的逻辑与物理视图,以及索引在提升查询效率中的作用。最后,文章提到了表设计的基本原则和DDL数据定义语言的应用,如创建、删除表和约束。
摘要由CSDN通过智能技术生成

一、链表查询

–99链表查询
–笛卡尔积 cross join
select * from emp e,dept d; --92
select deptno from emp e cross join dept d; --99
–查询30部门的员工信息
select * from emp where deptno = 30;
–查询30部门的部门信息
select * from dept where deptno = 30;
–连接之前过滤
select * from (select * from emp where deptno = 30) cross join (select * from dept where deptno = 30);

–连接条件

–等值连接
–自然连接 natural join 自动根据同名字段,主外键关联关系 字段做等值连接
select deptno from emp e natural join dept d;
–注意: 在自然连接中同名字段不能指明出处

   --join using(自动做等值连接的同名字段)...
   select deptno from emp e inner join dept d using(deptno);
   --注意: 在join using中同名字段不能指明出处

–非等值连接
–数据源1 join 数据源2 on 表连接条件 可以做等值,可以做非等值
select e.deptno from emp e join dept d on e.deptno = d.deptno;

   --查询员工信息以及员工工资等级信息
   select * from emp e inner join salgrade s on e.sal between s.losal and s.hisal;
   
   --查询员工信息以及所在部门信息以及员工工资等级信息,以及上级经理人信息
   select *
     from emp e
     join dept d
       on e.deptno = d.deptno
     join salgrade s
       on e.sal between s.losal and s.hisal
     join emp e2
       on e.mgr = e2.empno
       where deptno in (10,30);



–内连接 : 满足连接条件才能显示 (inner) join
–外连接 : 有的表中的数据不满足连接条件也显示
​ --主表: 不满足连接条件也显示
​ --左连接 : left join
​ --右连接 : right join
​ --全连接 : full join 两张表都作为主表

  select * from emp e1 full join emp e2 on e1.mgr=e2.empno; 


– 给20部门的所有员工都涨薪10%,显示出员工的名称, 原来的薪水, 所属部门编号, 涨薪后的薪水
select ename,deptno,sal,sal1.1 涨薪后 from emp where deptno = 20;
– 10部门涨薪10%, 20涨薪20%,30降薪1% , 40部门翻倍3倍
select ename,deptno,sal,decode(deptno,10,sal
1.1,20,sal1.2,30,sal0.99,40,sal3) 薪水变化后 from emp;

select ename,deptno,sal,(case deptno when 10 then sal
1.1
​ when 20 then sal1.2
​ when 30 then sal
0.99
​ when 40 then sal*3
​ end) 薪水变化后
​ from emp;

二、rowid 与 rownum

–rowid 与 rownum
–都做伪列存在
–rowid : 行记录的地址,行的唯一标识,数据插入到表中的是决定

–可以实现去重: 对没有主键|唯一字段的表中多条完全重复的数据,根据rowid实现去重
–去重: 如果表中存在主键或者唯一字段,直接 根据主键或者唯一字段去重

select rowid,rownum from dept;
/*
insert into tb_student values(1,‘张三’,‘语文’,81);
insert into tb_student values(2,‘张三’,‘数学’,75);
insert into tb_student values(3,‘李四’,‘语文’,81);
insert into tb_student values(8,‘李四’,‘英语’,90);
insert into tb_student values(4,‘李四’,‘数学’,90);
insert into tb_student values(5,‘王五’,‘语文’,81);
insert into tb_student values(6,‘王五’,‘数学’,100);
insert into tb_student values(7,‘王五’,‘英语’,90);
commit;
*/
select id,name,course,score from tb_student;

–查询到要保留的数据
select max(rowid) from tb_student group by id,name

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值