目录

脑图

查询数据

选择语句

Select语句结构

select 表达式或列名或函数

行过滤where

分组规范group by

分组过滤having

排序order by

  子查询

  组合查询

1. 组合查询结果

2.组合表查询

视图

操作数据

操作表

管理用户

进阶

存储过程

 游标

 触发器

 事务处理


脑图

oracle PL-SQL基础知识

 

查询数据

选择语句

Select语句结构

子句

描述

是否必需

select

返回的列或表达式

from

要检索的表

在oracle是,其他不一定

where

行过滤

group by

分组规范

仅当分组计算聚会值时是必需的

having

分组过滤

order by

排序,desc,asc

 

        

select 表达式或列名或函数

筛选 distinct;

连接字段 ||

>select  [列名1]||[列名2] from [表1]   >列名1列名2

>select  [列名1]||',('||[列名2]||')'' from [表1]  >列名1,(列名2)

数字计算 + - * /

函数

参考 Oracle学习笔记——常用函数总结

文本函数 Length() Lower() Upper() LPad() LTrim() Soundex() SubString()

数值函数 Abs Cos Exp Mod Sin Sqrt Tan

日期函数 Add_Month() Last_Day() Months_Between() Next_day() Sysdate() ; To_Date(sysdate,'YYYY-MM-DD HH24:mi:ss');Extact( ? from sysdate) ?=day|month|year

系统函数

聚合函数 AVG() COUNT() MAX() MIN() SUM()

 别名 as

行过滤where

过滤条件:

  1. 常用:值 =;<;>;<=;>=;<>;!=;is null

where [列名1] between [范围开头] and [范围结尾] --值范围

where [列名1] <> [值]; -- 不等于 

where [列名1] != [值];   --不等于 

where [列名1] IS NULL;  --没有值

 

  1. 范围 between and;in;not in;

where [列名] IN ( [有效值1],[有效值2])  --IN运算符,清晰,效率高,推荐使用;()可以包含另一个select语句;

where [列名] NOT IN ( [有效值1],[有效值2])

 

  1. 模糊 like % _

where [列名] LIKE 'jet%'     --LIKE 模糊匹配,%通配符,%匹配n个字符

where [列名] LIKE 'jet_'       --LIKE 模糊匹配,_通配符,%匹配单个字符

 

  1. 多重条件       

where [条件1] AND [条件2];  --多重条件,且,同时

where [条件1] OR [条件2];   --多重条件,或,任一条

where ([条件1] OR [条件2]) AND [条件3]; --多重条件,显性组合();隐形默认处理顺序为and 优于 or;

 

  1. 匹配文本的特殊语言--正则表达式

where regexp_like() --返回满足条件的字段

……regexp_instr() --返回满足条件的字符或字符串的位置

……regexp_replace() --返回替换后的字符串

……regexp_substr() --返回满足条件的字符或字符串

/*正则表达式*/

--模糊匹配字符值;.是正则表达式的_运算符,意味匹配任意单个字符

WHERE REGEXP_LIKE( [列名], '值') 

input> WHERE REGEXP_LIKE( v_id, '.000') ;

output> 所有含?000 的列,包括1000/2000/;

--匹配多个字符值;|是正则表达式的or运算符

WHERE REGEXP_LIKE( [列名], '值1|值2|值n') 

--匹配特殊单一字符;[]内定义一组字符,[123]表示匹配 1ton或2ton或3ton;

WHERE REGEXP_LIKE( [列名], '[值1|值2|值n]ton')    

可以写作WHERE REGEXP_LIKE( [列名], '[1|2|3]ton');更容易理解

--匹配特殊单一字符;^表示取反,[^123]定义一组字符,表示匹配除 1ton或2ton或3ton以为的其他字符,并且返回他们;

WHERE REGEXP_LIKE( [列名], '[^值1|值2|值n]ton')    

--匹配范围字符;-定义一个范围

WHERE REGEXP_LIKE( [列名], '[值1-值n]')  

特殊字符,用\作前缀;即转义字符,"\."  即.;"\_"  即_

匹配字符类别;匹配多个实例;  参考:Oracle 正则表达式 - Oracle - 博客园

 

分组规范group by

 --根据[列1]分组统计[列2]的总数,也可以用其他聚会函数

select [列1],COUNT([列2]) from [表1] GROUP BY [列1];

 

分组过滤having

--根据[列1]分组统计[列2]的总数,也可以用其他聚会函数  

select [列1],COUNT([列2]) from [表1]  

GROUP BY [列1]

HAVING COUNT([列2]) >2;

 

排序order by

        desc;asc

  子查询

  1. 子查询过滤,在where子句加入select语句

select  [l1] 

from [b1]

where [l2] in (select [l2] from [b2] where [l3]=值);

--等于联表查询,查询符合表2中指定列3对应的列2名称,在表1中查询列2名称对应的列1名称;

--可以多重嵌套,最多255个层级,但性能会退化;

 

  1. 子查询计算,在select子句加上select语句

select  [l1] ,(select count([l2]) from [b2] where [l3]=值) as 别名

from [b1];

  1. 内联视图,在from中加入select语句

  组合查询

1. 组合查询结果

  union;union all

--组合SQL查询语句,把他们的结果组合成单个结果集。

select 语句1

union

select 语句2;

--union会自动删除查询结果集中任何重复的行。union all,返回所有行。

select 语句1

union all

select 语句2;

2.组合表查询

外键(Foreign)

一个表中的一列,其中包含另一个表中的主键(Primary Key),因此定义了两个表之间的关系(relation)

连接方式

                等值连接,from A,B where 条件

                内连接,from A inner join B on 条件

                外连接,from A right/left outer join B on 条件

where做连接条件;

    select 列名1,列名2,列名3

    from 表名1,表名2

    where 表名1.列名1 等于表名2.列名1

内连接,即等值连接

    select 列名1,列名2,列名3

    from 表名1

    inner join 表名2

    on 表名1.列名1 等于表名2.列名1;

外连接

    select 列名1,列名2,列名3

    from 表名1

    right/left outer join 表名2

    on 表名1.列名1 等于表名2.列名1;

视图

视图,是虚拟表,包含查询(select语句);可以复用,但要考虑性能

create view

create view 视图名 as 

select 语句;

之后可以多次引用虚拟表(视图名),就当做是一个表来处理。

 

操作数据

更新update

    update 表名1 set 列名2=‘新值’where 列名1=‘指定行';

删除delect

delect from 表名1 where 列名1=‘指定行';

插入Insert

1.直接插入

insert into 表名(列名1,列名2,列名n)

                values(值1,值2,值n);

2.从表导入

insert select

insert into 表名(列名1,列名2,列名n)

                select 列名1,列名2,列名n from 表名2;  --select 语句也可以加入过滤条件

操作表

创建新表

create tables 表名

(列名 字符类型 not null,

 列名 字符类型 null,                        --允许空值

 列名 字符类型 default 1 not null) --空值时,默认1

定义主键

alter table 表名 add constraint pk_表名 Primary Key(列名);

定义外键

alter table 表名1 add constraint fk_表名1_表名2 Foreign Key(列名) references 表名2(列名);

 

更新表

update tables 表名

add 列名 字符类型;

删除表

drop table 表名;

重命名表

alter table 新表名新  rename to 表名;
 

管理用户

用户账户

查询

select * from dba_users; create user 用户账户 identified by “密码”; drop user 用户账户

修改

alter user 用户账户 indentified by “新密码”replace“旧密码”

用户权限

查询

select privilege from sys.dba_sys_privs --存储用户权限的表 where grantee='用户账户'

授权

grant select on 表名 to 用户账户 grant select,insert,update on 表名 to 用户账户

撤销

revoke……

进阶

存储过程

    创建

        create or replace procedure 存储过程名 is\as 可选的变量声明 begin 【过程的主体】 end;

    执行

        execute 存储过程1;

    删除

        drop procedure 存储过程1;

 

存储过程例子

declare

--declare variables定义变量名

v_vend_id vendors.vend_id%type;

v_vend_name vendors.vend_name%type;

--declare cursor定义游标名

cursor c_vendors is

select vend_id,vend_name

from vendors;

begin

open cursor

--loop through cursor遍巡游标,依次把把游标中的记录放入指定变量中,知道when条件满足。

loop

    fetch c_vendors into v_vend_id,v_vend_name;

    exit when c_vendors%notfound;

end loop;

    close c_vendors;

end;

 

declare

变量名 表名.列名%type;

cursor 游标名 is

select 语句;

begin 

open cursor

loop    

    【循环操作】

    exit when 退出条件

end loop

    close c_vendors;

 游标

定义: 游标cursor是一个存储在oracle服务器上的数据库查询,是由select语句检索的结果集

操作

        declare cursor 游标名 is select 语句;

        open 游标名; close 游标名;

 触发器

定义:用来跟踪表的更改;做记录

操作

        create or replace trigger 触发器名 after 操作 on 表名 begin 触发动作 end;

        drop trigger 触发器名;

insert触发器--用来跟踪表的更改;

 

触发器例子:

create or replace trigger order_after_insert

after insert  on orders

for each row

begin 

insert into orders_log(change_on,change_type,order_num)

                    values(sysdate,'A',NEW.order_num)

end;

 

create or replace trigger 触发器名称

after insert  on 表名 | before delect on 表名|before update on 表名

for each row

begin 

insert into orders_log(change_on,change_type,order_num)

                    values(sysdate,'A',NEW.order_num)

end;

    

 

 事务处理

    定义: 事务处理transaction processing是一种机制,用于管理必须成批执行的SQL操作集。

    操作

        savepoint 保存点名;

        rollback

        rollback to savepoint 保存点名;

        Commit

end;

 

相关文章: