大家好,我是考100分的小小码 ,祝大家学习进步,加薪顺利呀。今天说一说Oracle入门学习四,希望您对编程的造诣更进一步.
上一篇:Oracle入门学习三
学习视频:https://www.bilibili.com/video/BV1tJ411r7EC?p=35
Oracle表连接:内连接、外连接。外连接分左连接、右连接。
多表查询时,如果表之间没有条件关联,则会把所有匹配的结果查找出来,例如A表6条数据,B表7条数据,查出来就是42条。
--笛卡尔积:返回两张表中所有匹配的结果,没有意义。所以多表查询,必须写关联条件。 select * from staff,department where staff.id=department.staff_id;
代码100分
View Code
内连接的表如果多于两个,则每个表必须要直接或者间接的关联。例如查A、B、C表,条件A.某列=B.某列 and A.某列=C.某列,则B表和C表有间接的关联。
多表关联时,其中某列必须唯一,例如查表A、B、C,A.Column1 = B.Column2 and A.Column3=C.Column4,其中Column1和Column2至少有一列在自己的表里是唯一值,
Column3和Column4至少有一列在自己的表里是唯一值。
非等值表连接:
代码100分select ename,sal from emp e,salgrade g where e.sal between g.losal and g.hisal
--这个losal到hisal的区间范围是唯一的
grade losal hisal 1 700 1200 2 1201 1400 3 1401 2000 4 2001 3000 5 3001 9999
自连接:自己关联自己,但是作为不同表的定义,自连接一般可以使用子查询替代,使用子查询会更加清晰。
代码100分--自连接,将emp看做是两张不同的表,e是员工表,m是领导表 select distinct m.empno, m.ename, m.sal from emp e, emp m where e.mgr = m.empno --自连接用的情况不多,可以使用子查询实现 select * from emp m where m.empno in (select distinct mgr from emp)
外连接:主表中的数据全部选出,从表只选匹配的数据,不匹配的数据会用null替代。
外连接中的左外连接,左边是主表,右边是从表。外连接中的右外连接,右边是主表,左边是从表。
create table testa( id number(3), name varchar2(10), age number(2) ); insert into testa values(1,"a",23); insert into testa values(2,"b",24); insert into testa values(3,"c",25); insert into testa values(4,"d",26); create table testb( id number(3), salary number(8,2) ); insert into testb values(1,9000); insert into testb values(2,9000); insert into testb values(3,9000); select * from testa left join testb on testa.id=testb.id;
select * from testa right join testb on testa.id=testb.id;
分页查询:借助“rownum”伪列进行分页查询。
--分页查询,每页五条,查询第二页数据6-10 --使用伪列,不真正的存在表里 select rownum from emp ; select a.*,rownum from emp a; select * from (select a.*,rownum r from emp a) x where x.r>5 and x.r<=10;
View Code
最内层:即将被分页的全部数据,可能会被排序,定义成x表。select * from emp;中间层:启动行编号伪列,定义成y表select x.*,rownum r from x;最外层:数据过滤,分页开始select * from y where y.r >0 and r<=10
日期添加与转换:
--查询系统日期 select sysdate from dual; --向前走一天 明天 select sysdate+1 from dual; --向后走一天 昨天 select sysdate-1 from dual; --下个月的今天 select add_months(sysdate,1) from dual; --上个月的今天 select add_months(sysdate,-1) from dual; -- 加1小时,1分,1秒 select sysdate+1/24+1/(24*60) + 1/(24*60*60) from dual
日期截取:
select trunc(sysdate) from dual; --默认精确到天 select trunc(sysdate,"dd") from dual; --精确到天 select trunc(sysdate,"mm") from dual;--精确到月 select trunc(sysdate,"yyyy") from dual;--精确到年 select trunc(sysdate,"hh") from dual;--精确到时 select trunc(sysdate,"mi") from dual;--精确到分
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/8674.html