--Oracle数据库重要知识点整理 2017-01-24 soulsjie

目录

--一、创建及维护表... 2

--1.1 创建... 2

--1.2 维护表... 2

--二、临时表的分类、创建、使用... 3

--三、删除及截断表... 3

--1.删除表 delete 只是删除表的数据不释放表数据在内存中占用的空间... 3

--2.DROP table 删除表结构和数据... 3

--3.截断表... 4

--四、显示查看表信息... 4

--五、ORACLE常用数据类型... 4

--六、伪列ROWID和ROWNUM介绍以及使用... 5

--七、Oracle常用运算符和操作符的使用... 5

--八、简单查询... 6

--8.1日期列使用... 6

--8.2DISTINCT的使用... 6

--8.3处理NULL. 6

--8.4连接字符串... 6

--8.5WHERE语句... 6

--8.6ORDER BY子句|ASC|DESC. 6

--8.7多列排序... 6

--九、复杂查询... 7

--9.1分组查询以及HAVING子句的使用,HAVING子句可以对结果进项筛选... 7

--9.2分组函数MAX|MIN|AVG|SUM|COUNT使用... 7

--9.3连接查询语句... 7

--9.4相等连接查询... 8

--9.5不等连接查询... 8

--9.6自连接查... 8

--9.7内连接和外连接区别及使用... 8

--9.8子查询或嵌套查询的使用... 8

--9.9集合操作符的使用... 8

--十、常见内置函数... 8

--10.1 INSTR|LOWER|UPPER|LTRIM|RTRIM|TRIM|SUBSTR|REPLACE使用... 8

--10.2 LTRIM去除字符串左边的空格... 9

--10.3 RTRIM去除字符串右边的空格... 9

--10.4 TRIM去除字符串两边的空格... 9

--10.5 SYSDATE|ADD_MONTHS|LAST_DAY(d)|MONTHS_BETWEEN(d1,d2)|NEXT_DAY使用     9

--10.6 TO_CHAR|TO_DATE|TO_NUMBER使用 字符转换... 9

--十一、数据操作语句... 10

--11.1 INSERT语句使用... 10

--11.2 UPDATE语句使用... 10

--11.3 DELETE语句使用... 10

--十二、事务和约束... 10

--12.1 事务介绍... 11

--12.2 数据约束类型... 11

--十三、视图索引序列... 11

--13.1 创建维护以及使用视图... 12

--13.2 视图的使用... 12

--13.3 创建索引... 12

--十四、PL/SQL语句... 12

--14.1 PL/SQL语句块介绍以及基本语法... 12

--14.2 定义及使用变量... 13

--14.3 IF语句使用... 13

--14.4 CASE语句使用... 13

--14.5 基本循环语句使用... 14

--14.6 WHILE循环语句使用... 14

--14.7 FOR循环语句使用... 14

--14.8 游标定义及使用... 15

--十五、函数和过程... 16

--15.1创建函数... 16

--15.2创建过程... 16

--15.3调用函数... 17

--15.4调用过程... 17

--15.5异常处理以及异常抛出... 17

--附录、连接查询时用到的辅助表... 17

/*数据查询语句介绍

数据定义语句介绍

数据控制语句介绍

数据操纵语句介绍*/

-------------------------------

--一、创建及维护表

-------------------------------

--1.1 创建

CREATE TABLE ZYJ_GONGZI(

Id integer not null,

gongzi number,

fafang_date date,

us_name varchar(256)

);

--1.2 维护表

--1.2.1增加一个字段

ALTER TABLE ZYJ_GONGZI ADD marsk VARCHAR(256);

--1.2.2 修改一个字段

ALTER TABLE ZYJ_GONGZI MODIFY marsk VARCHAR(150);

--1.2.3删除表中的某个字段

ALTER TABLE ZYJ_GONGZI DROP COLUMN marsk;

--1.2.4将表重命名

ALTER TABLE ZYJ_GONGZI RENAME TO ZYJ_RICE;

ALTER TABLE ZYJ_RICE RENAME TO ZYJ_GONGZI;

--1.2.5修改表中的字段名

ALTER TABLE ZYJ_GONGZI RENAME COLUMN fafang_date TO fafang_riqi;

ALTER TABLE ZYJ_GONGZI RENAME COLUMN fafang_riqi TO fafang_date;

--1.2.6 给表添加注释

COMMENT ON TABLE ZYJ_GONGZI IS 'soulsjie 练习SQL创建的工资表';

--1.2.7 给字段添加注释

COMMENT ON COLUMN ZYJ_GONGZI.ID IS '工资表序号';

--------------------------------------

--二、临时表的分类、创建、使用

--------------------------------------

--------------------------------------

--三、删除及截断表

--------------------------------------

--1.删除表 delete 只是删除表的数据不释放表数据在内存中占用的空间

DELETE TABLE ZYJ_GONGZI;

--2.DROP table 删除表结构和数据

DROP TABLE ZYJ_GONGZI;

--3.截断表

TRUNCATE TABLE ZYJ_GONGZI;

--------------------------------------

--四、显示查看表信息

SELECT table_name FROM USER_TABLES;

--------------------------------------

--------------------------------------

--五、ORACLE常用数据类型

--------------------------------------

/*

Text 用于文本或文本与数字的组合。最多 255个字符。

Memo Memo 用于更大数量的文本。最多存储 65,536个字符。

注释:无法对 memo 字段进行排序。不过它们是可搜索的。

Byte 允许 0 到 255 的数字。 1 字节

Integer 允许介于 -32,768 到 32,767 之间的数字。2 字节

Long 允许介于 -2,147,483,648 与 2,147,483,647 之间的全部数字 4 字节

Single 单精度浮点。处理大多数小数。 4 字节

Double 双精度浮点。处理大多数小数。 8 字节

Currency 用于货币。支持 15 位的元,外加 4 位小数。

提示:您可以选择使用哪个国家的货币。8 字节

AutoNumber AutoNumber 字段自动为每条记录分配数字,通常从 1 开始。 4 字节

Date/Time 用于日期和时间 8 字节

Yes/No 逻辑字段,可以显示为 Yes/No、True/False 或 On/Off 。在代码中,使用常量 True 和 False (等价于 1 和 0)注释:Yes/No 字段中不允许 Null 值,1 比特

Ole Object 可以存储图片、音频、视频或其他 BLOBs (Binary Large OBjects) 最多 1GB

Hyperlink 包含指向其他文件的链接,包括网页。

Lookup Wizard 允许你创建一个可从下列列表中进行选择的选项列表。4 字节

*/

--------------------------------------

--六、伪列ROWID和ROWNUM介绍以及使用

--------------------------------------

--------------------------------------

--七、Oracle常用运算符和操作符的使用

--------------------------------------

SELECT 1+2 FROM DUAL;  --'+'

SELECT 2-3 FROM DUAL;  --'-'

SELECT 2*3 FROM DUAL;  --'*'

SELECT 2/3 FROM DUAL;  --'/'

SELECT MOD(3,2) FROM DUAL;--取余

DECLARE

BEGIN

DBMS_OUTPUT.put_line('ss'||'aa');--连接字符

END;

--------------------------------------

--八、简单查询

--------------------------------------

--8.1日期列使用

SELECT fafang_date FROM ZYJ_GONGZI;

--8.2DISTINCT的使用

SELECT DISTINCT identi FROM ZYJ_GONGZI;

--8.3处理NULL

--8.4连接字符串

SELECT 'A'||'B' FROM DUAL;

--8.5WHERE语句

SELECT* FROM ZYJ_GONGZI WHERE GONGZI>9000;

--8.6ORDER BY子句|ASC|DESC

SELECT us_name FROM ZYJ_GONGZI ORDER BY ID DESC;

SELECT us_name FROM ZYJ_GONGZI ORDER BY ID asc;

--8.7多列排序

SELECT * FROM ZYJ_GONGZI ORDER BY fafang_date,id DESC;--按发放时间排序,如果时间一样按序号大小排序

--------------------------------------

--九、复杂查询

--------------------------------------

--9.1分组查询以及HAVING子句的使用,HAVING子句可以对结果进项筛选

SELECT AVG(GONGZI) AS 平均工资 FROM ZYJ_GONGZI GROUP BY identi;--计算每类员工的平均工资

--9.2分组函数MAX|MIN|AVG|SUM|COUNT使用

--9.3连接查询语句

SELECT G.US_NAME,B.IDENTI_NAME FROM ZYJ_GONGZI G,ZYJ_BUMEN B WHERE G.IDENTI=B.IDENTI;

--9.4相等连接查询

--9.5不等连接查询

--9.6自连接查

--9.7内连接和外连接区别及使用

--9.8子查询或嵌套查询的使用

--9.9集合操作符的使用

SELECT * FROM (SELECT ID FROM ZYJ_GONGZI UNION SELECT ID FROM ZYJ_BUMEN);--并集组合所有结果,并删除重复记录

SELECT * FROM (SELECT ID FROM ZYJ_GONGZI INTERSECT SELECT ID FROM ZYJ_BUMEN);--交集 显示相同的数据结果

SELECT * FROM (SELECT ID FROM ZYJ_GONGZI MINUS SELECT ID FROM ZYJ_BUMEN);--差集  A MINUS B 相当于 A-B

--------------------------------------

--十、常见内置函数

--------------------------------------

--10.1 INSTR|LOWER|UPPER|LTRIM|RTRIM|TRIM|SUBSTR|REPLACE使用

SELECT INSTR('HELLO','H') FROM DUAL;--INSTR(字符串1,字符串2) 返回字符串2在字符串1的出现位置,字符串位置从1开始计

SELECT LOWER('HELLO')FROM DUAL; --返回指定字符串的全小写字符串

SELECT UPPER('hello') FROM DUALL;--返回指点字符串的全大写字符

--10.2 LTRIM去除字符串左边的空格

--10.3 RTRIM去除字符串右边的空格

--10.4 TRIM去除字符串两边的空格

SELECT SUBSTR('ZHESHIZIFUCHUAN',10,5) FROM DUAL;--从字符串的第10个字符开始截取5个字符

SELECT REPLACE('HAHAJIEJIE','JIE','QIAN') FROM DUAL;--在字符串中将所有的jie替换成qian

--10.5 SYSDATE|ADD_MONTHS|LAST_DAY(d)|MONTHS_BETWEEN(d1,d2)|NEXT_DAY使用

SELECT SYSDATE FROM DUAL;

SELECT ADD_MONTHS(SYSDATE,1) FROM DUAL;

--10.6 TO_CHAR|TO_DATE|TO_NUMBER使用 字符转换

SELECT TO_NUMBER('152')-2 FROM DUAL;

SELECT TO_DATE('2018/12/26','YYYY/MM/DD') FROM DUAL;

--------------------------------------

--十一、数据操作语句

--------------------------------------

--11.1 INSERT语句使用

INSERT ALL

INTO ZYJ_GONGZI(ID,GONGZI,FAFANG_DATE,US_NAME)

VALUES (1,6300,to_date('2017-02-16','yyyy-mm-dd'),'Jie')

INTO ZYJ_GONGZI(ID,GONGZI,FAFANG_DATE,US_NAME)

VALUES (2,6322,to_date('2017-03-16','yyyy-mm-dd'),'Jies')

INTO ZYJ_GONGZI(ID,GONGZI,FAFANG_DATE,US_NAME)

VALUES (3,4855,to_date('2017-04-16','yyyy-mm-dd'),'Tom')

INTO ZYJ_GONGZI(ID,GONGZI,FAFANG_DATE,US_NAME)

VALUES (4,4698,to_date('2017-03-16','yyyy-mm-dd'),'bob')

SELECT 1 FROM DUAL;

--11.2 UPDATE语句使用

UPDATE ZYJ_GONGZI SET fafang_date=to_date('2018-02-16','yyyy-mm-dd') WHERE ID=1;

--11.3 DELETE语句使用

DELETE FROM ZYJ_GONGZI WHERE ID=4;

--------------------------------------

--十二、事务和约束

--------------------------------------

--12.1 事务介绍

--事务:当前会话对数据的处理只能在当前会话有效必须提交事务,这部分数据才能被其他会话访问

--提交及回滚事务使用

SELECT * FROM ZYJ_GONGZI;

DELETE FROM ZYJ_GONGZI WHERE ID=4;--对数据进行删除操作

ROLLBACK;--回滚删除的操作

--提交事务使用:COMMIT;即可

--事务和锁

--12.2 数据约束类型

--PRIMARY KEY 主键约束

--CONSTRAINT fk_waijian FOREIGN KEY(ID) REFERENCE ZYJ_BUMEN(ID);

--CONSTRAINT un_weiyi UNIQUE (ID);

--CONSTRAINT ck_jiancha CHECK(ID>10);

--数据约束的定义及维护

--ALTER TABLE ZYJ_GONGZI ADD CONSTRAINT pkS_zhujian UNIQUE(us_name);添加新的约束

--ALTER TABLE ZYJ_GONGZI MODIFY CONSTRAINT pkS_zhujian CHECK(ID>10);修改约束

--ALTER TABLE ZYJ_GONGZI DROP CONSTRAINT pkS_zhujian;--删除约束

--------------------------------------

--十三、视图索引序列

--------------------------------------

--13.1 创建维护以及使用视图

--创建个人部门归属的视图

CREATE VIEW gerenguishu AS SELECT G.US_NAME,B.IDENTI_NAME FROM ZYJ_GONGZI G,ZYJ_BUMEN B WHERE G.IDENTI=B.IDENTI;

--13.2 视图的使用

SELECT * FROM gerenguishu;

--13.3 创建索引

CREATE INDEX chazhaoxinxi ON ZYJ_BUMEN(ID,IDENTI_NAME);

--序列创建以及使用

--同义词创建

--------------------------------------

--十四、PL/SQL语句

--------------------------------------

--14.1 PL/SQL语句块介绍以及基本语法

DECLARE

[变量声明]

BEGIN --开始

{函数体}

EXCEPTION

[异常处理]

END;--结束

--14.2 定义及使用变量

DECLARE

AA INTEGER:=12;

BB VARCHAR(20):='JIE';

BEGIN

DBMS_OUTPUT.put_line('AA的值是:'||AA);

DBMS_OUTPUT.put_line('BB的值是:'||BB);

END;

--14.3 IF语句使用

DECLARE

AA INTEGER:=1;

BEGIN

IF AA=1 THEN

DBMS_OUTPUT.put_line('数值为1');

ELSIF AA=2 THEN

DBMS_OUTPUT.put_line('数值为2');

ELSE

DBMS_OUTPUT.put_line('其他数值');

END IF;

END;

--14.4 CASE语句使用

DECLARE

AA INTEGER:=5;

BEGIN

CASE AA

WHEN 1 THEN DBMS_OUTPUT.put_line('数值为1');

WHEN 2 THEN DBMS_OUTPUT.put_line('数值为2');

ELSE DBMS_OUTPUT.put_line('其他数值');

END CASE;

END;

--14.5 基本循环语句使用

DECLARE

AA INTEGER:=0;

BEGIN

LOOP

EXIT WHEN AA>10;

AA:=AA+1;

DBMS_OUTPUT.put_line(AA);

END LOOP;

END;

--14.6 WHILE循环语句使用

DECLARE

AA INTEGER:=0;

BEGIN

WHILE AA<10 LOOP

DBMS_OUTPUT.put_line(AA);

AA:=AA+1;

END LOOP;

END;

--14.7 FOR循环语句使用

DECLARE

AA INTEGER:=0;

BEGIN

FOR AA IN 1..10 LOOP

DBMS_OUTPUT.put_line(AA);

END LOOP;

END;

--14.8 游标定义及使用

DECLARE

CURSOR YB IS SELECT g.id,g.gongzi FROM ZYJ_GONGZI g;

temp YB%ROWTYPE;--创建辅助行级变量

BEGIN

IF NOT YB%ISOPEN THEN

OPEN YB;--打开游标

DBMS_OUTPUT.put_line(TO_DATE(sysdate)||'open success!');

END IF;

LOOP --循环读取数据

FETCH YB INTO temp;

DBMS_OUTPUT.put_line('员工编号:'||temp.id||'的工资是:'||temp.gongzi);

EXIT WHEN YB%NOTFOUND;

END LOOP;

CLOSE YB;--关闭游标

DBMS_OUTPUT.put_line(sysdate||'close success!');

END;

--------------------------------------

--十五、函数和过程

--------------------------------------

--函数及存储过程创建

--15.1创建函数

CREATE OR REPLACE FUNCTION F_JIE(AA INTEGER) RETURN INTEGER IS

temp INTEGER;

BEGIN

temp:=AA;

DBMS_OUTPUT.put_line('你输入的数字是'||temp);

RETURN AA;

END F_JIE;

--15.2创建过程

CREATE OR REPLACE PROCEDURE p_JIE IS

CURSOR YB IS SELECT US_NAME FROM ZYJ_GONGZI;--创建游标

temp YB%ROWTYPE;--创建行级变量

BEGIN

IF NOT YB%ISOPEN THEN OPEN YB;

END IF;

LOOP

EXIT WHEN YB%NOTFOUND;

FETCH YB INTO temp;--游标遍历表格

DBMS_OUTPUT.put_line(temp.us_name);

END LOOP;

END P_JIE;

--15.3调用函数

SELECT F_JIE(&ad) FROM DUAL;--函数调用

--15.4调用过程

BEGIN

P_JIE;

END;

--15.5异常处理以及异常抛出

DECLARE

temp INTEGER:=1;

temp2 INTEGER:=1;

err_info EXCEPTION;--自定义异常

BEGIN

IF temp=temp2 THEN

RAISE err_info;

END IF;

EXCEPTION WHEN err_info THEN

DBMS_OUTPUT.put_line('警告两个id重复!');

END;

--------------------------------------

--附录、连接查询时用到的辅助表

--------------------------------------

CREATE TABLE ZYJ_BUMEN(

id INTEGER PRIMARY KEY,--主键

identi VARCHAR(20),--部门标识

identi_name VARCHAR(20)--部门名

);

COMMENT ON TABLE ZYJ_BUMEN IS 'soulsjie 练习SQL创建的部门表';

--插入数据

INSERT ALL INTO ZYJ_BUMEN VALUES(1,'laoban','老板部')

INTO ZYJ_BUMEN VALUES(2,'jingli','经理部')

INTO ZYJ_BUMEN VALUES(3,'yuangong','员工部')

SELECT 1 FROM DUAL;

SELECT * FROM ZYJ_BUMEN;

七、整合SQL基础和PL-SQL基础的更多相关文章

  1. 在SQL中使用PL/SQL函数存在的问题

    -----------------------------Cryking原创------------------------------ -----------------------转载请注明出处, ...

  2. sql plus 和 pl/sql无法连接远程oracle数据库

    前言:安装完oracle客户端后,可能会出现sql plus 和 pl/sql无法连接远程oracle数据库的情况,可能是以下原因: 针对sql plus连接不上: 1 可能原因:之前安装过oracl ...

  3. Oracle SQL Developer,Oracle 开发工具之toad、SQL Developer、PL/SQL Developer等比较

    参考: oracle 的几个开发工具比较 因Oracle几乎是中大型商业企业数据的首选,所以比较一下常用与Oracle的工具. Oracle SQL Developer 免费,一般开发使用足矣,常用. ...

  4. SQL语句、PL/SQL块和SQL*Plus命令之间的区别

    SQL语句.PL/SQL块和SQL*Plus命令之间的区别   原文链接:https://blog.csdn.net/liuzhushiqiang/article/details/12320941 在 ...

  5. pl/sql基础知识—pl/sql块介绍

    n  介绍 块(block)是pl/sql的基本成型单元,编写pl/sql程序实际上就是编写pl/sql块.要完成相对简单的应用功能,可能只需要编写一个pl/sql块:但是如果要想实现复杂的功能,可能 ...

  6. 七、dbms_rowid(用于在PL/SQL程序和SQL语句中取得行标识符)

    1.概述 作用:用于在PL/SQL程序和SQL语句中取得行标识符(rowid)的信息并建立ROWID,通过该包可以取得行所在的文件号,行所在文件的数据块号,行所在数据块的行号,以及数据库对象号等消息. ...

  7. Oracle 11g系列:SQL Plus与PL/SQL

    SQL Plus是Oracle提供的一种用户接口,是数据库与用户之间进行交互的工具. PL/SQL是Oracle的过程化编程语言. 1.登录SQL Plus 利用Windows的[开始]|[运行]命令 ...

  8. 同样的一句SQL语句在pl/sql 代码块中count 没有数据,但是直接用SQl 执行却可以count 得到结果

    pl/sql 代码块: SELECT count(distinct t2.so_nbr) INTO v_count2 FROM KFGL_YW_STEP_qd t2 WHERE t2.partitio ...

  9. Working with Numbers in PL/SQL(在PL/SQL中使用数字)

    This article gives you all the information you need in order to begin working with numbers in your P ...

  10. SQL Plus和PL/SQL

    一.SQL Plus是oracle提供的一种用户接口.类似于操作系统的命令行.用户可以通过在SQL Plus中输入命令来向数据库发            送命令,数据库也将处理结果通过SQL Plus ...

随机推荐

  1. Hibernate的一级缓存:快照区

    参考来源:http://blog.sina.com.cn/s/blog_981ee5d80102w85f.html

  2. 前端打印console

    很多时候,我们都想知道,是否已经选中或得到数据时,我们可以利用console 打印出来.console有几种方式使用.具体有: console.log($scope.getParkId); conso ...

  3. Ubuntu16下查看CPU、内存和磁盘相关信息

    1.内存 查看内存#free -m total used free shared buff/cache available Mem: Swap: 2.CPU 查看逻辑cpu个数: #cat /proc ...

  4. Scala基础篇-05求值策略

    Scala的求值策略有2种: call by value call by name 如何区分? 例子: def bar(x:Int,y: => Int) = def loop(): Int=lo ...

  5. CentOS下JRE环境变量配置

    很多时候,我们需要在CentOS上部署tomcat,从而搭建web服务器,然JDK/JRE环境是前提,这里就记录一下,在后面的时候直接使用. 下载jre-7u80-linux-x64.tar.gz,并 ...

  6. PMP项目管理学习笔记(4)——项目整合管理

    六个整合管理过程. 1.制定项目章程 一个新项目要完成的第一件事,就是项目章程的制定.这是授权你开展工作的文档.不过并不总是需要你介入,通常情况下会由赞助人交给你.如果没有项目章程,你就没有权利告诉你 ...

  7. 获取父页面的dom元素

    $("li.jericho_tabs", window.top.document); 上面的代码意思是获取父页面的li元素,class为jericho_tabs的所有元素.

  8. 数据库管理系统X

    大部分DBMS提供数据定义语言DDL(Data Definition Language)和数据操作语言DML(Data Manipulation Language),供用户定义数据库的模式结构与权限约 ...

  9. MVVM没你想象的那么的好

    我写过很多有关于让View Controller 更易于理解的文章,其中一种比较常见的模式就是Model-View-ViewModel(MVVM). 我认为MVVM 是一种非常容易让人混淆的 anti ...

  10. java 面试题整理

    java面试题 1.接口和抽象类的区别 抽象类 接口 抽象类中可以有默认方法 在java8之前,不能有默认方法 extends implements 抽象类中可以有构造器 接口中不能有构造器 抽象类中 ...