--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;

最新文章

  1. 《CSS权威指南》读书笔记
  2. Web Api 2 接口API文档美化
  3. AIX系统的环境变量设置
  4. exec命令
  5. 关于mysql的基础知识
  6. poj 1475 uva 589 - Pushing Boxes
  7. java调用FFmpeg及mencoder转换视频为FLV并截图
  8. SecureCRT 终端仿真程序 v7.0.0.326 中文绿色便携破解版
  9. Oracle日志文件常用操作
  10. asp.net web api帮助文档的说明
  11. 关于JavaScript组件化的探索
  12. 【LR9】【LOJ561】CommonAnts 的调和数 数论 筛法
  13. Solr坏境搭建
  14. D. Cutting Out 二分
  15. java后台解析前端传来的json
  16. Android FileUtils 文件操作类
  17. Python开发【笔记】:PEP 8 编码规范
  18. HandBrake 开源视频转码器、编码转换器、格式转换器
  19. [PY3]——时间处理——datetime | calendar
  20. Vue学习笔记:Ref的使用

热门文章

  1. 洛谷P3379lca,HDU2586,洛谷P1967货车运输,倍增lca,树上倍增
  2. pyinstaller 打包.exe文件记录遇到的问题
  3. P2667 超级质数
  4. AJPFX的内存管理小结
  5. UVa OJ 494
  6. 【学习笔记】深入理解js原型和闭包(10)——this
  7. java (给出年月日,计算该日是该年的第n天 )
  8. 纯手写的css3正方体旋转效果
  9. HashMap Hashtable TreeMap LinkedHashMap 分析
  10. activiti 表名称的解释