• 1. 第5章 Oracle编程SQL语言基础 PL/SQL Pro*C程序
  • 2. 5.1 SQL语言基础 数据查询语言(DQL)--SELECT 数据操纵语言(DML)—INSERT,UPDATE,DELETE 数据定义语言(DDL)—CREATE,ALTER,DROP,TRUNCATE 数据控制语言(DCL)—COMMIT,ROLLBACKSQL主要包含以下4个部分
  • 3. 一、数据操纵语言(DML)5.1 SQL语言基础 INSERT语句插入单条记录插入多条记录INSERT INTO tablename [(column [, column...])] VALUES(value [, value...]);INSERT INTO tablename [(column [, column...])] 子查询;
  • 4. INSERT的注意事项: 字符串类型的字段值必须用单引号括起来 字符串中的一个单引号用两个单引号表示 例如: ' I ' 'm a student!'  = I'm a student! 日期型数据的标准格式是dd-mm月-yy或dd-mm月-yyyy,使用非标准格式时,必须用to_date进行转换 例如: 表示1997年1月2日,可用3种方法 ' 2-1月-97 '或' 02-1月-1997 ' 或to_date('1997-1-02','yyyy-mm-dd') 可用sysdate函数填写日期型字段(精确到秒) SELECT语句中可用to_char改变日期的显示格式 select empno,ename,to_char(hiredate, 'yyyy-mm-dd') from emp;5.1 SQL语言基础
  • 5. 修改Oracle的默认日期格式 修改当前会话的默认日期格式 SQL> alter session set nls_date_format='yyyy-mm-dd'; 这种方法只能改掉在当前会话里的日期显示格式, 当重新建立一个会话的时候,必须重新执行该命令 修改系统的默认日期格式 在注册表regedit的KEY_LOCAL_MACHINE- > SOFTWARE->ORACLE->HOME0 添加字串值NLS_DATE_FORMAT 将其值设为YYYY-MM-DD-HH24:MI:SS5.1 SQL语言基础
  • 6. 5.1 SQL语言基础 操作示例create table emp as select empno,ename,hiredate from scott.emp where 1=2; insert into emp select empno, ename, hiredate from scott.emp; insert into emp values('7988','zyk','10-5月-07'); insert into emp values('7899','tom',to_date('2007-05-10','yyyy-mm-dd'));
  • 7. 5.1 SQL语言基础 insert into emp values('7899','tom''',to_date('2007-05-10','yyyy-mm-dd')); --注意字符数据中的单引号 insert into emp values('7988','zyk',sysdate); --使用sysdate函数填写日期数据 Select ename,to_char(hiredate,'yyyy-mm-dd') from emp; --使用to_char改变日期的显示格式 alter session set nls_date_format='yyyy-mm-dd'; --修改当前会话的默认日期格式 insert into emp values('8888','zhang','2007-05-10');
  • 8. 5.1 SQL语言基础 DELETE语句DELETE [FROM] table [WHERE condition];注意:truncate, delete, drop区别相同点: Truncate table emp; Delete from emp; Drop table emp; 都能删除整表数据
  • 9. 5.1 SQL语言基础 不同点: truncate和 delete只删除数据不删除表的结构,drop语句将删除表的结构、约束、触发器、索引; 依赖于该表的存储过程/函数将保留,但是变为invalid状态 delete语句是DML语句,事务提交之后才生效;能恢复;如果有相应的trigger,执行的时候将被触发; truncate,drop是DDL语句, 操作立即生效;不能恢复;操作不触发trigger. 
  • 10. 5.1 SQL语言基础 delete语句不影响表所占用的磁盘空间,drop语句将表所占用的空间全部释放,truncate语句将空间释放到 minextents个 extent 速度上,一般来说: drop> truncate > delete 安全性:小心使用drop 和truncate,尤其没有备份的时候
  • 11. 具体使用时注意: 想删除部分数据行用delete,注意带上where子句 想删除表结构, 用drop 想保留表而将所有数据删除,用truncate 如果想触发trigger,还是用delete5.1 SQL语言基础
  • 12. 5.1 SQL语言基础 UPDATE语句UPDATE table SET column = value[,column=value,...] [WHERE condition];
  • 13. 5.1 SQL语言基础 使用INSERT、UPDATE和DELETE语句时注意 在运行INSERT、UPDATE和DELETE语句前 最好估算一下可能操作的记录范围,应该把它限定 在较小的范围内(一万条记录),否则Oracle在执行 处理时会用到很大的回滚段,程序响应慢甚至失去 响应。如果记录数达到十万条以上,则可以把这些 SQL语句分段分次完成。
  • 14. 二、数据查询语言(DQL)5.1 SQL语言基础 SELECT 列名1,列名2,列名3… FROM 表名 ;基本查询SELECT中常用的子句FROM WHERE *和DISTINCT ORDER BYGROUP BY HAVING BETWEEN AND LIKE
  • 15. 复合查询5.1 SQL语言基础 连接查询内连接:等值连接、不等连接、自然连接 外连接:左外连接、右外连接、全外连接 交叉连接(迪卡尔积)联合查询(UNION)集合函数
  • 16. 操作示例5.1 SQL语言基础 col1col21 2 3 4aa abc de ffcol1col31 2 5aa abc yy表:t1 表:t2一般的相等连接,例如: select t1.col1,t1.col2,t2.col3 from t1,t2 where t1.col1=t2.col1;
  • 17. 操作示例5.1 SQL语言基础 col1col21 2 3 4aa abc de ffcol1col31 2 5aa abc yy表:t1 表:t2左外联: select t1.col1, t1.col2, t2.col1, t2.col3 from t1 left outer join t2 on t1.col1=t2.col1;t1.col1t1.col2t2.col1t2.col31 2 3 4aa abc de ff1 2 aa abc左外联查询结果
  • 18. 5.1 SQL语言基础 左外联: select t1.col1, t1.col2, t2.col1, t2.col3 from t1,t2 where t1.col1=t2.col1(+); 左外联: select t1.col1, t1.col2, t2.col1, t2.col3 from t1 left outer join t2 on t1.col1=t2.col1;
  • 19. 操作示例5.1 SQL语言基础 col1col21 2 3 4aa abc de ffcol1col31 2 5aa abc yy表:t1 表:t2右外联: select t1.col1, t1.col2, t2.col1, t2.col3 from t1 right outer join t2 on t1.col1=t2.col1;t1.col1t1.col2t2.col1t2.col31 2 aa abc 1 2 5aa abc yy右外联查询结果
  • 20. 5.1 SQL语言基础 右外联: select t1.col1, t1.col2, t2.col1, t2.col3 from t1,t2 where t1.col1(+)=t2.col1; 右外联: select t1.col1, t1.col2, t2.col1, t2.col3 from t1 right outer join t2 on t1.col1=t2.col1;
  • 21. 操作示例5.1 SQL语言基础 col1col21 2 3 4aa abc de ffcol1col31 2 5aa abc yy表:t1 表:t2全外联: select t1.col1, t1.col2, t2.col1, t2.col3 from t1 full outer join t2 on t1.col1=t2.col1;t1.col1t1.col2t2.col1t2.col31 2 3 4 1aa abc de ff 11 2 5aa abc yy全外联查询结果
  • 22. 5.1 SQL语言基础 全外连: Select t1.col1, t1.col2, t2.col1, t2.col3 from t1,t2 where t1.col1(+)=t2.col1(+);交叉连接 select t1.col1,t1.col2,t2.col1,t2.col3 from t1,t2;×
  • 23. 5.1 SQL语言基础 左外联 select e.empno,e.ename,d.deptno,d.dname from emp e left outer join dept d on e.deptno=d.deptno order by d.deptno; select e.empno,e.ename,d.deptno,d.dname from emp e,dept d where e.deptno=d.deptno(+) order by d.deptno;上机可使用scott的emp和dept表练习外连接
  • 24. 5.1 SQL语言基础 右外联 select e.empno,e.ename,d.deptno,d.dname from emp e right outer join dept d on e.deptno=d.deptno order by d.deptno; select e.empno,e.ename,d.deptno,d.dname from emp e,dept d where e.deptno(+)=d.deptno order by d.deptno;
  • 25. 5.1 SQL语言基础 全外连 select empno,ename,d.deptno,d.deptno from emp e full outer join dept d on e.deptno=d.deptno order by d.deptno;
  • 26. 5.1 SQL语言基础 三、数据定义语言(DDL)数据定义语言用来创建、删除、更改一个数据模式对象的结构CREATE 语句 ALTER语句 DROP语句 TRUNCATE语句
  • 27. 四、数据控制语言(DCL)5.1 SQL语言基础 GRANT语句 REVOKE语句 COMMIT语句 显示提交: commit 隐式提交: create,alter, drop,truncate, grant,revoke, connect,disconnect , exit,quit 自动提交: set autocommit on ROLLBACK语句
  • 28. 5.2 PL/SQL一、 PL/SQL简介SQL 并不能完成一个过程语言所能完成的所有任务 PL/SQL 代表 Procedural Language/SQL 它是对 SQL 的扩展 PL/SQL 的出现将 SQL 的强大功能和过程语言的灵活性结合在了一起 此语言消除了数据库技术和过程编程语言之间的障碍 允许使用诸如循环和选择等控制语句来处理数据
  • 29. 5.2 PL/SQL二、PL/SQL块块结构PL/SQL是一种块结构的语言,组成PL/SQL程序的单元是逻辑块,每个块都可以划分为三个部分 块的三个部分 声明部分(Declaration section) 执行部分(Executable section) 异常处理部分(Exception section)
  • 30. 5.2 PL/SQLPL/SQL块语法 PL/SQL块语法结构如下: [DECLARE declaration statements ] BEGIN executable statements [EXCEPTION exception statements ] END; PL/SQL块中的每一条语句都必须以分号结束,SQL语句可以多行,分号表示该语句的结束。 注释: --(单行) 或/* */ (多行)
  • 31. DECLARE i_percent number; BEGIN i_percent:=10; update emp set comm = sal * i_percent where deptno=10; END; 5.2 PL/SQLPL/SQL块示例