oracle数据库的⾼级查询⽅法多表联合查询
oracle查询
⼀,简单查询
sql left join 多表连接 order by 1,2
select t.sno, t.sname, t.ssex from STUDENT t order by 1,2,3
group by 增强版
a, p.ptype, SUM(p.lastcou) FROM product p GROUP BY a, p.ptype)
⼆,⾼级查询(多表连接查询)
笛卡尔积的概念:
所谓笛卡尔积,通俗点说就是指包含两个集合中任意取出两个元素构成的组合的集合。假设R中有元组M个,S中有元组N 个,则R和S的笛卡
尔积中包含的元组数量就是M*N。这个规则可以向多个关系扩展。
分类:
内连接:select s.sname, ro,r.degree from student s, score r where s.sno=r.sno
等值连接------⽤=的连接
不等值连接
外连接(啥也不写就是内连接, 直接写两个表名)---左外连接, 右外连接
select * from student s left outer join course c on s.sno=co
(+)修饰符的使⽤
select s.sname, ro,r.degree from student s, score r where s.sno=r.sno(+)----等同于外连接的结果
数据字典的使⽤
⾃连接(⾃⼰骗⼀下⾃⼰): select * from z_course c1, z_course c2 ur_code=c2.p_cour_code
层次查询
CONNECT BY PRIOR 连接条件 START WITH 开始条件
select * from Z_COURSE t connect by ur_code=t.p_cour_code start ur_name like '%国际%'
伪列:
level: 加上⼀列显⽰级别
select t.*, level from Z_COURSE t connect by ur_code=t.p_cour_code start ur_name like '%国际%'
rownum:加上⼀列⾏号
select s.*, rownum from student s
使⽤rownum分页
select * from (select s.*, rownum rn from student s where rownum<=10) t >5
⼦查询(sql语句的执⾏顺序)
单⾏⼦查询: 可以⽤=号
多⾏⼦查询:不可以⽤=号,可以⽤ in
exists关键字的使⽤:是否存在
select * from student t where exists(select 1 from student t1 where t1.sno=105)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论