`
steven2011
  • 浏览: 31757 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

Oracle语法汇整表

 
阅读更多

 

 
DML Data manipulation language
SELECT SELECT [DISTINCT] *|列xx [AS] "别名xx"[,列xx "别名xx"...] 字符串连接符 ||, 字符或日期类型的字符串用单引号’’, 列别名用双引号“”。如果别名中有空格、特殊字符或者要求区分大小写,必须用双引号。默认情况下列标题为大写,字符和日期标题靠左,数字靠右
列别名可以用在order by中,但不能用在where和group by里
SQL不区分大小写,关键字不能简写或分行写,语句结束用;
ROWID,ROWNUM行标号,虚拟列
DISTINCT消除重复列
  FROM 表xx 表别名xx[,表xx 表别名xx...]  
  WHERE 条件 is NOT Null,is Null,NULL是不确定的未知的值
+ - * /
> >= = <= < <> !=
and, or, not
[not] between .. and
In, not In
Like, not like (%任意长度,_一个长度)
Like 'a/%' Escape '/' = like 'a%', escape 定义转义字符/,也可以用其他字符
优先规则:算术》连字》比较》[not] null,like,in》[not] between》not》and》or
  GROUP BY 分组列 HAVING 分组条件 分组函数只在分组中使用(select,having),不允许在where中,要指定条件用having。
Select关键字之后列出的每个统计函数之外的字段,都要出现在group by之后
用Where条件进行分组前的过滤,having进行分组后的过滤,即指定哪些分组结果被显示
  ORDER BY 排序字段 ASC|DESC order by后可以是字段或者字段运算后的表达式,默认Asc
order by可以用列别名,select中的列序号,也可以是不在select中的列
多表查询SQL:1999 select * from emp CROSS JOIN dept 交叉连接:会产生笛卡尔积
  select * from emp Netural JOIN dept 自然连接:自动关联两个表中有相同名字和数据类型的列
  select * from emp JOIN dept USING(deptno) Using子句:直接关联列
  select * from emp e JOIN dept d ON(e.deptno=d.deptno) On子句:用户自己编写关联条件,可以用多个join..on连接多个表
  select * from emp e RIGHT OUTER JOIN dept d ON(e.deptno=d.deptno) 右外连接:相当于where e.deptno(+)=d.deptno
(+)放在连接的缺少信息的一侧的列名后面,如显示没有员工的部门,将+放在员工表后面;显示没有部门的员工,将+放在部门表后面
  select * from emp e LEFT OUTER JOIN dept d ON(e.deptno=d.deptno) 左外连接:相当于 where e.deptno=d.deptno(+)
左连接就是添加回内连接从第一个表中删除的所有行
  select * from emp e FULL OUTER JOIN dept d ON(e.deptno=d.deptno)  
集合操作 Select a,b from tb1
Union
Select a,b from tb2
Select的数据类型必须兼容,每个结果集中列的数量和顺序必须一致
返回并集,删除重复行。
  Select a,b from tb1
Union All
Select a,b from tb3
返回并集,不删除重复行
  Select a,b from tb1
INTERSECT
Select a,b from tb2
返回相同部分
  Select a,b from tb1
MINUS
Select a,b from tb3
返回两个结果的差集
子查询 Select * from emp 用在父查询where条件中,或者是父查询中的一列。子查询根据返回值分单列子查询,单行子查询和多行子查询。用In,Any,All指定查询的范围
  Where sal IN (select min(sal) from emp group by deptno)  
  Where sal =ANY (select min(sal) from emp group by deptno) IN一样
  Where sal >ANY (select min(sal) from emp group by deptno) > ANY: 比里面最小的值要大 (大于最小值)
  Where sal <ANY (select min(sal) from emp group by deptno) < ANY: 比最大的值要小 (小于最大值)
  Where sal >ALL (select min(sal) from emp group by deptno) > ALL: 比最大的值要大 (大于所有值,即要大于最大值)
  Where sal <ALL (select min(sal) from emp group by deptno) <ALL: 比最小的值要小 (小于所有值,即要小于最小值)
INSERT INSERT INTO 表xx(列xx,列xx,列xx) VALUES(值xx,值xx,值xx)  
  INSERT INTO 表xx(列xx,列xx,列xx) SELECT …  
  INSERT INTO 表xx(列xx,列xx,列xx) VALUES(&列xx,&列xx,&列xx) 用&xxx作为插入值时会出现交互输入界面,当输入字符时也要用''
UPDATE UPDATE 表xxxx SET 列xx=xx... WHERE ....  
DELETE DELETE FROM 表xxx WHERE 条件;  
MERGE MERGE INTO table_name table_alias
USING (table|view|sub_query) alias
ON (join condition)
WHEN MATCHED THEN
UPDATE SET
col1 = col_val1,
col2 = col2_val
WHEN NOT MATCHED THEN
INSERT (column_list)
VALUES (column_values);
将using后的表中数据插入到表table_name,如果满足条件join condition,执行update set操作,不满足则insert
select for update select xxx from xxx FOR UPDATE; 在PL/SQL Developer中可以用for update打开查询表进行DML增删改操作,还可以从其他表格中拷贝数据
DDL Data definition language
CREATE CREATE TABLE 表xx AS SELECT xxx 只在Oracle中有,如果where 1=2则只复制结构
  CREATE TABLE [schema.]表xx
(列xx 类型 [DEFAULT 默认值],
列xx 类型 [DEFAULT 默认值],
….)
 
  分区表  
  CREATE [UNIQUE] INDEX 索引名 ON 表名
(列名1 [ASC|DESC]
[,列名2 [ASC|DESC]…]) [NOLOGGING] TABLESPACE 表空间名
1.根据索引的逻辑结构分单列、复合和函数索引。索引一般不对列关键字的值是否允许重复加以限制,若要加则是唯一性索引unique
2. 在线重定义index?
3.建议index/table<=4,特别是对DML常用表,有index会使更新速度变慢
4.用哪个index由oracle决定,分CBO(cost-based)和RBO(rule),9i之前用RBO多,9i两种都有,>=10g以CBO为主,CBO会分析数据分布,取I/O,CPU最小的方法
5.Oracle的B树索引:更新成本低,适合OLTP;位图索引,可列举的有限项,若新增项则更新量较大,全更新完才能用,更新成本高,适合数据仓库
6.PL/SQL Developer的explain plan(F5)查看语句执行是否用到了索引,用到了哪些索引
  CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW 视图xxx[(col1,col2...)]
AS 子查询
[WITH CHECK OPTION [CONSTRAINT 约束名]];
1.视图就是封装了一个查询语句
2.FORCE:强制创建一个视图,不管基表是否存在或者创建者对基表是否有select权限。但是只有在基表存在时才可用
3.NOFORCE:只在基表存在的情况下创建视图,默认值
4.子查询:不能用order by,可以有列别名
5.with check option:限制在试图上进行的修改insert update都要符合子查询中定义的限制条件
6.如果子查询中有1)group by,2)rownum,3)distinct,4)组函数,5)表达式列,6)基表中not null的列不在视图中。1-4)不能通过视图delete,1-5)不能update,1-6)不能insert
  CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW 视图xxx
AS SELECT xxx
[WITH READ ONLY [CONSTRAINT 约束名]];
with readonly只读
  oracle物化视图 数据仓库中,将结果放某空间,定期刷新,供多人查询,加快效率
  CREATE SYNONYM 同义词xx FOR 用户xx.表xx  
  CREATE SEQUENCE 序列名
[increment by n][start with n]
[{maxvalue n|nomaxvalue}]
[{minvalue n|nominvalue}]
[{cycle|nocycle}]
[{cache n|nocache}];
取值:
序列名.NEXTVALL
序列名.CURRVAL
多个进程在查序列号,可能丢号,所以关键数据尽量不用
ALTER ALTER TABLE 表xx ADD(列xx 类型 [NOT NULL] [DEFAULT 默认值]…)  
  ALTER TABLE 表xx MODIFY(列xx 类型 [NOT NULL] [DEFAULT 默认值]…)  
  ALTER TABLE 表xx DROP COLUMN 列xxx  
  ALTER TABLE 表xx RENAME COLUMN 列xx TO 列xxx  
  ALTER INDEX 索引xxx REBUILD|ONLINE  
  ALTER INDEX 索引xxx MONITORING USAGE  
CONSTRAINT 数据完整性指数据的一致性和准确性,分行完整性(主键约束),引用完整性(外键),和列完整性  
  列xx 类型 PRIMARY KEY 主键约束PRIMARY KEY,表示唯一的标识,不能为空。一个表只能有一个主键约束
  CONSTRAINT 约束名pk_表xx_列xx PRIMARY KEY(列xx)  
  列xx 类型 CONSTRAINT 约束名 PRIMARY KEY  
  列xx 类型 [NOT NULL] 非空约束NOT NULL
  列xx 类型 UNIQUE 唯一约束UNIQUE,该列或列的组合不允许重复
  CONSTRAINT 约束名uk_表xx_列xx UNIQUE(列xx)  
  列xx 类型 CHECK(列需满足的条件) 检查约束CHECK:检查列值的合法性
  CONSTRAINT 约束名ck_表xx_列xx CHECK(条件)  
  CONSTRAINT 约束名fk_父表xx_子表xx_列xx FOREIGN KEY(列) REFERENCES 父表xx(列xx) 主外键约束FOREIGN KEY:子表中设置的外键必须是父表中的主键(必须存在对应的记录)
  CONSTRAINT 约束名fk_父表xx_子表xx_列xx FOREIGN KEY(列) REFERENCES 父表xx(列xx) ON DELETE CASCADE 级联删除:希望删除一个数据时,自动删除对应的子表记录
  DROP TABLE 子表xx CASCADE CONSTRAINT 有外键,删除时必须先删除子表,再删除父表,或者用强制删除
  ALTER TABLE 表xx ADD [CONSTRAINT 约束名] 约束类型(列或条件) 添加约束
  ALTER TABLE 表xx DROP CONSTRAINT 约束名 [cascade] 删除约束
  ALTER TABLE 表xx DROP PRIMARY KEY|UNIQUE(col)  
  ALTER TABLE 表xx DISABLE CONSTRAINT 约束名 禁用约束
  ALTER TABLE 表xx ENABLE CONSTRAINT 约束名 启用约束
DROP DROP TABLE 表xx  
  DROP INDEX 索引xx  
  DROP VIEW 视图xx  
  DROP SYNONYM 同义词xx 只在Oracle中
  DROP SEQUENCE 序列名  
RENAME RENAME 表/视图/序列/同义词xx TO 新名xx 只在Oracle中
TRUNCATE TRUNCATE TABLE 表xx Truncate删数据,释放磁盘空间,不删表结构,不能回滚
Delete 删数据,不释放磁盘空间,不删表结构和索引,能回滚
Drop 删数据,删表结构及上面的索引
如果是引用完整性的父表,不能用truncate table
Transaction control
COMMIT   保证数据操作的完整性,所有操作要么成功,要么同时失败
ROLLBACK rollback或者rollback to save_point  
SAVEPOINT    
DCL Data control language
GRANT GRANT 权限xx… TO 用户 权限:create session, connect, resources,select, delete…
  GRANT select,delete ON 用户xx.表xx TO 用户  
REVOKE REVOKE 权限xx ON 用户xx.表xx FROM 用户  
  CREATE USER 用户名 IDENTIFIED BY 密码  
  ALTER USER 用户名 IDENTIFIED BY 密码  
  ALTER USER 用户名 PASSWORD EXPIRE 密码失效
  ALTER USER 用户名 ACCOUNT LOCK 锁住用户
  ALTER USER 用户名 ACCOUNT UNLOCK 解锁
PL/SQL Programming
  DECLARE
deptno dept.dept_id%type;intuserid int;...
error_handle EXCEPTION;
BEGIN

intuserid :=1;
select col1 INTO var1,... from tb where condition;
dbms_output.put_line(intuserid);
execute immediate xxx;
FOR i IN lowid .. hiid LOOP
...
END LOOP;
IF ... THEN...END IF;
RAISE error_handle;
EXCEPTION
when error_handle then ...
when others then
rollback;outvarmsg:=sqlerrm;
END;
 
游标cursor CURSOR cur_name IS SELECT col1,col2 xxxx;
OPEN cur_name;
WHILE cur_name %FOUND LOOP
FETCH cur_name INTO var1,var2

END LOOP
FOR cur IN cur_name LOOP
cur.col1=…
END LOOP;
CLOSE cur_name;
有时需要对查询结果进行批量处理,这时Oracle将分配一片内存区域用以保存结果集,而游标就是一个指向此类内存区域的指针。通过使用游标并建立循环结构,可以依次处理结果集中的各行数据。游标使用一般分四步:声明游标,打开游标,提取数据,关闭游标
Procedure CREATE [OR REPLACE] PROCEDURE pro_name(var1 type,var2 type...)
AS
BEGIN
……;
END pro_name;
/
调用:
1. PL/SQL Developer的test window
2. PL/SQL Developer的command window: execute immediate sql
3. begin … pro_name(var1,var2);… end
function CREATE [OR REPLACE] FUNCTION fun_name(var1 type,var2 type...) RETURN datatype
AS
BEGIN
……;
END fun_name;
/
 
Trigger create trigger trigger_test
before insert on student
begin
null;
end;
/
在特定事件出现时自动执行的程序代码块。启用触发器可以限制对表的修改,制作自增字段,强制实现数据的一致性以及启用复杂的业务逻辑。触发事件包括插入删除更新列。还可以设定“逐行触发”
     
SQL Plus命令
  SQL PLUS中,输入的sql语句将存储在一个叫sql buffer的内存区域,保存在sql buffer中的sql语句可以使用sql plus命令调出修改和执行。也可以使用sql plus命令执行一个sql脚本文件  
  startup 启动数据库
  shutdown 关闭数据库
  connect/conn 用户名/密码 [as sysdba|sysoper] 连接数据库,默认scott/tiger, sys/change_on_install, system/manager
  disconnect 断开连接
  set 设置SQL PLUS的系统变量与环境变量
  set linesize xxx  
  set pagesize xxx  
  spool 将窗口上显示的内容输出到文件
  edit 对内存区域中的SQL语句加以编辑修改,内存区域仅保留上一个语句的第一行
  ed 文件名 编辑文件
  run 执行内存区域中的SQL语句
  / 执行上一次运行的SQL语句
  start 执行一个SQL脚本文件
  @文件名 执行文件
  col 格式化列的显示形式
  clear 清除缓冲区或屏幕内容
  edit 退出SQL PLUS
     
  show user 显示当前用户
  describe 表名/视图名 查看表结构
 

selecttable_name,table_type from all_tab_comments

where owner='SCOTT';

查看当前用户的所有表,注意条件值

必须大写

http://www.cnoug.org/    
关闭数据库   /admin/xxx/bdump/alert_xxx警告日志
shutdown normal 应用关闭选项后,不允许有新的连接,所有与数据库连接的用户必须在关闭数据库之前断开连接 1. 数据库被关闭后不允许新用户建立连接
2. 数据库被卸载后所有已经连接的用户可以继续工作,等待全部断开连接
3. 关闭数据库,卸载例程,释放内存,关闭例程
shutdown immediate 立即关闭,当前的客户机SQL语句立即终止 1. 不允许新用户建立连接
2. 立即关闭所有已经连接的用户
3. 回滚没有完成的事务
4. 关闭数据库,卸载例程,释放内存,关闭例程
shutdown abord 中止正在被Oracle数据库服务器处理的当前客户机SQL语句 1. 中止所有正在执行的SQL语句
2. 断开所有已经连接的用户
3. 立即中止例程
4. 不回滚未提交的事务。如果数据库在中止关闭后启动,oracle必须使用联机重做日志文件回滚未提交的事务。
shutdown transactional 提供一个指定的时间长度,关闭数据库前在该时间内完成事务处理,直到最后一个事务处理完成后才关闭数据库 1. 不允许新用户建立连接
2. 不允许数据库有新事务,如果用户企图开始新的事务,将自动断开会话
3. 等待用户回滚或者提交未完成的事务
4. 关闭数据库,卸载例程,把所有事务完成后关闭例程
启动数据库    
startup 正常启动 1. 按照配置的参数分配内存、分配系统进程
2. 装载数据库
3. 打开数据库,正常启动后,用户可以连接数据库进行访问
startup nomount 不装载启动 使用配置的参数来分配内存空间和进程,未打开数据库。当DBA需要重新创建控制文件或数据库时必须将数据库切换到未装载状态
startup mount 装载启动 启动例程并装载数据库,但不打开数据库。用于更改数据库的归档状态或者执行恢复操作
startup force 强制启动 用于在其他方法无法正常打开数据库时,尝试启动数据库
     
归档模式    
select member from v$logfile; 查看log文件位置  
archive log list;    
shutdown immediate;    
startup mount;    
alter database archivelog; 改为归档模式  
alter database open;    
archive log start; 启用归档  
alter system switch logfile;    
备份和恢复    
  recover datafile 'xxx.dbf';  
1.物理备份:    
1)冷备份 直接拷贝数据文件,重做日志文件和控制文件  
2)rman备份 recovery manager 在线增量备份  
3)热备份-联机备份    
2.逻辑备份    
1)exp,imp    
2) spool导出文本文件    
3) sqlldr SQL Loader导入文本文件    
分享到:
评论

相关推荐

    Sql语法转换为Oracle语法

    1. 数据库对象命名:在SQL Server中,表和列名通常用方括号包围(如 `[TableName]` 和 `[ColumnName]`),而在Oracle中,它们用双引号包围(如 `"TableName"` 和 `"ColumnName"`)。 2. 语句开头:SQL Server通常以...

    Oracle语法指南.zip

    本"Oracle语法指南"提供了全面的Oracle SQL语法参考和实例解析,旨在帮助用户更好地理解和掌握Oracle数据库的操作。 首先,"oracle语法.txt"可能包含了Oracle SQL的基础到高级语法,例如: 1. **数据类型**:...

    Oracle语法oracle的基础知识

    Oracle语法,有关于oracle的基础知识。

    oracle语法大全 个人整理

    以下是一些关于Oracle语法和个人学习整理的关键知识点: 1. **初始口令**:Oracle安装完成后,预设了一些默认的系统用户及其口令,例如: - internal/oracle - sys/change_on_install - system/manager - scott...

    oracle语法详细介绍

    oracle语法详细介绍,简单易懂,很实用

    pg与oracle语法差异

    ### pg与oracle语法差异知识点详解 #### 一、空值处理 **PostgreSQL** 和 **Oracle** 在处理空值(`null`)方面存在显著差异: - **PostgreSQL**: `null` 和空字符串(`''`)被视为不同的值。这意味着在进行比较或...

    UltraEdit/UEStudio Oracle 语法高亮/语法着色文件

    UltraEdit/UEStudio Oracle 语法高亮/语法着色文件

    Oracle语法整理(较全)

    本篇文章将深入探讨Oracle语法的一些关键点,包括序列、DUAL表的使用以及如何查看系统数据。 首先,我们来看序列(Sequences)。序列在Oracle中用于生成唯一的整数,通常用于主键或者唯一标识符。创建序列后,可以...

    Oracle语法大全

    Oracle语法大全涵盖了从基本的SQL查询到复杂的数据库管理技术,旨在帮助用户全面理解和掌握Oracle数据库的操作。 一、SQL基础 Oracle SQL是用于与Oracle数据库交互的语言,包括数据查询、插入、更新和删除等操作。...

    Oracle语法实例讲解chm

    Oracle数据库系统是全球广泛使用的大型关系数据库管理系统,它在企业级数据存储、管理和处理方面具有卓越性能。Oracle的客户端/服务器架构...《Oracle语法实例讲解》这样的资源可以帮助你进一步提升Oracle技能。

    Oracle基本语法全集

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统之一,它的语法丰富多样,涵盖了数据查询、数据操纵、数据控制和数据定义等多个方面。以下是对"Oracle基本语法全集"的详细解析: 1. 数据查询(SQL Select...

    oracle语法

    Oracle语法是数据库管理中至关重要的组成部分,特别是在大型企业级应用中,Oracle数据库系统因其稳定性、高效性和安全性而被广泛使用。这篇文档将深入探讨Oracle SQL语法的基础和高级特性,包括数据查询、数据操作、...

    oracle语法大全

    对于初学者而言,掌握Oracle语法是迈向数据库管理专业之路的关键步骤。本资料集《Oracle语法大全》旨在提供全面而深入的Oracle语言知识,涵盖了从基础查询到高级特性的各个方面。 一、查询语句(SQL查询) 在Oracle...

    Oracle和SqlServer语法区别

    Oracle和SqlServer语法区别 Oracle和SqlServer是两种流行的关系型数据库管理系统,它们之间存在着一些语法区别。了解这些区别对于开发者来说非常重要,因为它可以帮助他们更好地迁移到新的数据库管理系统。下面将...

    ORACLE和SQL Server的语法区别

    ### ORACLE和SQL Server的语法区别 #### 一、概述 本文主要介绍Oracle与SQL Server在SQL语言层面的异同之处,重点在于Transact-SQL(T-SQL)与PL/SQL之间的区别,并提供了一些迁移策略。对于希望将现有的Oracle...

    ORACLE和SQL语法区别归纳

    ### ORACLE和SQL语法区别归纳 #### 概述 本文旨在为初学者提供关于Oracle与SQL Server在数据类型、函数及日期操作等方面的语法差异总结,帮助读者更好地理解这两种数据库管理系统的特点,并能够在实际应用中灵活...

    Oracle语法详解视频教程(下)part1

    Oracle语法详解视频教程(二)part1,一共6个部分,需6个全部下载才能解压。 该视频内容为:介绍Oracle语句的条件查询和排序操作。

Global site tag (gtag.js) - Google Analytics