高级查询(多表连接查询):
等值连接 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