oracle怎么查看是否安装sdg,Oracle入门学习四

本文详细介绍了Oracle数据库中的各种表连接方式,包括内连接、外连接(左连接、右连接)以及自连接,并强调了多表查询时关联条件的重要性。此外,还讲解了如何进行有效的分页查询,利用`rownum`伪列实现数据筛选。最后,提到了日期的添加与转换操作,为数据库查询提供了实用技巧。
摘要由CSDN通过智能技术生成

Oracle表连接:内连接、外连接。外连接分左连接、右连接。

多表查询时,如果表之间没有条件关联,则会把所有匹配的结果查找出来,例如A表6条数据,B表7条数据,查出来就是42条。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

--笛卡尔积:返回两张表中所有匹配的结果,没有意义。所以多表查询,必须写关联条件。

select * from staff,department where staff.id=department.staff_id;

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至少有一列在自己的表里是唯一值。

非等值表连接:

select ename,sal fromemp e,salgrade gwhere 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

自连接:自己关联自己,但是作为不同表的定义,自连接一般可以使用子查询替代,使用子查询会更加清晰。

--自连接,将emp看做是两张不同的表,e是员工表,m是领导表

select distinctm.empno, m.ename, m.salfromemp e, emp mwhere e.mgr =m.empno--自连接用的情况不多,可以使用子查询实现

select * from emp m where m.empno in (select distinct mgr from emp)

外连接:主表中的数据全部选出,从表只选匹配的数据,不匹配的数据会用null替代。

外连接中的左外连接,左边是主表,右边是从表。外连接中的右外连接,右边是主表,左边是从表。

create tabletesta(

idnumber(3),

namevarchar2(10),

agenumber(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 tabletestb(

idnumber(3),

salarynumber(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”伪列进行分页查询。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

--分页查询,每页五条,查询第二页数据6-10--使用伪列,不真正的存在表里

select rownum fromemp ;select a.*,rownum fromemp a;select * from (select a.*,rownum r from emp a) x where x.r>5 and x.r<=10;

View Code

最内层:即将被分页的全部数据,可能会被排序,定义成x表。select * fromemp;

中间层:启动行编号伪列,定义成y表select x.*,rownum r fromx;

最外层:数据过滤,分页开始select * from y where y.r >0 and r<=10

日期添加与转换:

--查询系统日期

select sysdate fromdual;--向前走一天 明天

select sysdate+1 fromdual;--向后走一天 昨天

select sysdate-1 fromdual;--下个月的今天

select add_months(sysdate,1) fromdual;--上个月的今天

select add_months(sysdate,-1) fromdual;--加1小时,1分,1秒

select sysdate+1/24+1/(24*60) + 1/(24*60*60) from dual

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值