oracle基础2

来源:互联网 发布:淘宝平铺拍摄灯光布置 编辑:程序博客网 时间:2024/05/31 19:31
============高级查询--------------------------
------子查询---------
select * from 子表名 where 外键=(select 外键 from 表名 where 字段 like '%值%')

----rownum 伪列---
是oracle数据库从数据文件或缓冲区中读取数据的顺序。它是从1开始的,物理上并不真正存在,动态生成的。
select id,name,rownum rn from 表名;----固化rownum
----------分页-----rownum:虚拟表
分页就是对rownum的一种固化,把rownum固化成 rn 来实现分页效果
例:select id,name from (selcet id,name rownum rn from 表名) a
    where a.rn>=5 and a.rn<=8
----------连接查询------------------
连接查询与子查询的区别
子查询并不要求两个表有相关字段,只要得到子查询的结果集就行,用于父查询。
而连接查询则必须要求两个表有相关字段。当查询的列来自多个表时,可以使用表连接查询。

语法:select 要查询的字段 from 表1,表2.... where 连接条件

------内连接---------------
========1.等值连接:在连接条件中使用(=)运算符比较被连接的值,也就是通过相等的列值连接起来的查询。
=======2.非等值连接:在连接条件中使用除=外的其他比较运算符,如:<、>、>=、<=、!=(<>) 、like、in、betweem等
语法:select * from 表1 inner join 表2 on 表1.id=表2.id
-------外连接--------
外连接:当某些不满足条件的列也需要显示出来。也就是说,只限制其中一个表的行,而不限制另外一个表的行时。
----oralce 中可以使用(+)来表示外连接 
---标准sql:left outer join、righr outer join、full outer join;

======左外连接:以左表的每条记录为基准循环的匹配右表每条记录,匹配不上以null填充;
语法1:select 多表中要查询的列 from 左表.列 left [outer] join 右表.列 on 多表连接的条件
语法2:select 多表中要查询的列 from 左表,右表 where 左表.列=右表.列(+)
----+号在右边,以左边为准,右边补齐

======右外连接:以右表的每条记录为基准循环的匹配左表每条记录,匹配不上以null填充;
语法1:select 多表中要查询的列 from 左表.列 right[outer] join 右表.列 on 多表连接的条件
语法2:select 多表中要查询的列 from 左表,右表 where 左表.列(+)=右表.列

*****当在from子句中使用子查询时,子查询将被作为虚拟表(视图)对待,该虚拟表接下来需要使用时,必须给该字表查询指定别名

---union 合并查询:里面的数据都是不重复的
---union all: 全部都查询出来

-----------------集合查询------------------------------------
集合查询:将多个查询组合到一个查询中去
1、交集:返回两个查询共有记录关键字:intersect
2、并集:返回各个查询的所有记录关键字:union\union all
 ---union和union all都可以使用在集合查询的“并集”操作,不过union all比    union效率高,因为union查询出的内容剔除重复行,同时默认按第1个查询的       第1列升序排列。而union all不做这些在业务需求允许时,最好使用有效率高     的union all。
 ---union在做重复行检查时,不忽略空值(null),如果有重复空行,则保留一个空    行。interset以及minus查询也无重复行,按第1个查询的第1列升序排列。
 ---使用union\union all\interset\minus连接的两个select语句中,查询数列    和列的类型数据要一致。
3、补集:返回第一个查询检索出的记录减去第二个查询检索出的记录之后剩余的记录关键字:minus
注意:分完组以后筛选使用having关键字,而不能使用where

使用触发器实现主键自增 ---首先需要创建序列
create trigger tri_表名
before insert or update -表的操作,插入,更新,删除
on 表
for each row ---每行
begin
--select 序列.下一个值 into:new.字段名 from dual;
end

select ....into...   ----查询到某张表的东西,插入的那张表中去

creale ro replace trigger 触发器名    更新或者覆盖 触发器
触发器的组成部分:
1、触发器语句:触发器语句就是那些可以导致触发器的事件,即在表或视图上执行的insert、delete和update之类的DML语句,在模式对象上执行的DDL语句或数据库事件。
2、触发器的限制:触发器限制条件包含一个布尔表达式的值,该值必须为“真”才能激活触发器,如果该值为“假”和“未知”,将不运行触发器。

3、触发器操作:触发器操作时触发器的主体,包含一些SQL语句和代码,这些代码在执行触发器语句且触发器限制条件的值为“真”时运行,行级触发器允许触发器操作中的语句访问行的列值。


触发器的类型:
行级触发器 用old.字段名:旧值new.字段名:新值
语句触发器:对每个DML语句执行一次
instead of触发器
模式触发器
数据库触发器
0 0
原创粉丝点击