高级查询(多表连接查询):

等值连接    select s.sname,e.cno,e.degree from student s,score e where s.sno=e.sno;

左外连接 left join ...on   左外连接on后面的等值连接表,左边的表全显示,右边的如果没记录用空补全

select * from t_student t left join t_stu_cour ts on s.sno=sc.sno;

右外连接 right join ...on  右外连接on后面的等值连接表,以右边的表为主全显示

select * from t_student t right join t_stu_cour ts on s.sno=sc.sno;

(+)修饰符的使用(将内连接变为外连接,以某一个表为标准显示所有结果)

select s.sname,e.cno,e.degree from student s,score e where s.sno=e.sno(+);

数据字典的使用   设置个查询范围的表,再用等值查询嵌套两个查询(用于把某些代码翻译成汉字)

selece t.*,(select ds.name from dic_sex ds where ds.code=t.sex)from z_student t;

自连接(自己骗一下自己)  用自己的子列=父列,有关联关系才可以:

select d1.id,d1.dis_name,d2.id,d2.dis_name from district_all d1,dustrict_all d2 where d1.id=d2.parentid;

 

connect by prior 连接条件 start with 开始条件

select * from district_all d connect by prior d.id=d.parentid start with d.dis_name like ‘%山东%’

伪列:level,rownum

层次查询 level

select f.*,level from food f connect by prior f.code=f.pcode start with f.name like '%饮料%';

select f.*,level from food f connect by f.code= prior f.pcode start with f.name like '%馒头%';

分页查询 rownum

select * from (select f.*,rownum ru from food f where rownum <=13) fd where fd.ru > 7;

随机数:

dbms_random.random         随意输出任意数字,无大小限制

dbms_random.value          0-1之间随机数

update t_student s set s.sbirthday=sysdate-(365*s.sage+dbms_random.value);

dbms_random.value(m1,m2)   m1-m2定义之间的随机数

update t_student s set s.sage=round(dbms_random.value(20,30));

 

trigger 触发器

      触发器是一种存储过程, 当用户进行增删改的操作的时候(没有select !!!)oracle数据库会自动启动触发器中的程序

creat or replace trigger test

posted on 2017-06-25 20:06  汐风雪夜  阅读(1223)  评论(0编辑  收藏  举报