Oracle学习(八)----sql语言
2016-03-30 16:54
543 查看
一 集合运算(详见PPT) 例:查询部门号是10和20的员工信息 方法一: SQL> select * from emp 2 where deptno = 10 or deptno =20; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- -------------- ---------- ---------- ---------- 1 tom_abc 8000 10 7369 SMITH CLERK 7902 17-12月-80 800 20 7566 JONES MANAGER 7839 02-4月 -81 2975 20 7782 CLARK MANAGER 7839 09-6月 -81 2450 10 7788 SCOTT ANALYST 7566 19-4月 -87 3000 20 7839 KING PRESIDENT 17-11月-81 5000 10 7876 ADAMS CLERK 7788 23-5月 -87 1100 20 7902 FORD ANALYST 7566 03-12月-81 3000 20 7934 MILLER CLERK 7782 23-1月 -82 1300 10 方法二: SQL> select * from emp 2 where deptno in(10, 20); EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- -------------- ---------- ---------- ---------- 1 tom_abc 8000 10 7369 SMITH CLERK 7902 17-12月-80 800 20 7566 JONES MANAGER 7839 02-4月 -81 2975 20 7782 CLARK MANAGER 7839 09-6月 -81 2450 10 7788 SCOTT ANALYST 7566 19-4月 -87 3000 20 7839 KING PRESIDENT 17-11月-81 5000 10 7876 ADAMS CLERK 7788 23-5月 -87 1100 20 7902 FORD ANALYST 7566 03-12月-81 3000 20 7934 MILLER CLERK 7782 23-1月 -82 1300 10 方法三:采用集合 SQL> select * from emp where deptno = 10 2 union 3 select * from emp where deptno = 20; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- -------------- ---------- ---------- ---------- 1 tom_abc 8000 10 7369 SMITH CLERK 7902 17-12月-80 800 20 7566 JONES MANAGER 7839 02-4月 -81 2975 20 7782 CLARK MANAGER 7839 09-6月 -81 2450 10 7788 SCOTT ANALYST 7566 19-4月 -87 3000 20 7839 KING PRESIDENT 17-11月-81 5000 10 7876 ADAMS CLERK 7788 23-5月 -87 1100 20 7902 FORD ANALYST 7566 03-12月-81 3000 20 7934 MILLER CLERK 7782 23-1月 -82 1300 10 二 sql语言的类型 数据语言实现数据的crud DML语句(Data Manipulation Language) 数据库操作语言 insert update delete select DDL语言data definition Lanaguage create table create view index sequence synonym同义词 truncate table DCL语言 data control language数据语言 commit rollback savetpointe OCA认证 OCP(dba)一起考, 参加oracle的培训 2w Oracle数据库管理员认证专员(OCA):Oracle Certified Associate Oracle数据库管理员认证专家(OCP): Oracle Certified Professional Oracle数据库管理员认证大师(OCM): Oracle Certified Master 三 insert语言 3.1 插入一个完整的记录,可以不用再表明后边写列名 SQL> insert into emp values(2, 'Apple', 'PRESIDENT',0000, sysdate, 10000, NULL, 20); 已创建 1 行。 3.2 插入部分记录,必须要写上列名 SQL> insert into emp(empno, ename, job, sal) values(3,'Lin', 'MANAGER', 800); 已创建 1 行。 3.3 插入空值 显示的插入空值,如3.1 隐式的插入空值,如3.2 3.4 创建脚本,取地址符& SQL> insert into emp(empno, ename, job, sal) values(&empno,&ename, 'MANAGER', 800); 输入 empno 的值: 4 输入 ename 的值: 'Qian' -----------注意:输入字符串时别忘了引号 原值 1: insert into emp(empno, ename, job, sal) values(&empno,&ename, 'MANAGER', 800) 新值 1: insert into emp(empno, ename, job, sal) values(4,'Qian', 'MANAGER', 800) 已创建 1 行。 SQL> / ---------------注意:紧接着这个符号代表继续插入,继续输入 输入 empno 的值: 5 输入 ename 的值: 'Qin' 原值 1: insert into emp(empno, ename, job, sal) values(&empno,&ename, 'MANAGER', 800) 新值 1: insert into emp(empno, ename, job, sal) values(5,'Qin', 'MANAGER', 800) 3.5 select中使用取地址符 select中使用取地址符代表检索那一列没有确定下来,需要用户输入检索的列名: SQL> select empno, ename, job, &tt from emp; 输入 tt 的值: deptno 原值 1: select empno, ename, job, &tt from emp 新值 1: select empno, ename, job, deptno from emp EMPNO ENAME JOB DEPTNO ---------- ---------- --------- ---------- 1 tom_abc 10 7369 SMITH CLERK 20 7499 ALLEN SALESMAN 30 7521 WARD SALESMAN 30 7566 JONES MANAGER 20 7698 BLAKE MANAGER 30 7782 CLARK MANAGER 10 7788 SCOTT ANALYST 20 7839 KING PRESIDENT 10 7844 TURNER SALESMAN 30 7876 ADAMS CLERK 20 7900 JAMES CLERK 30 7902 FORD ANALYST 20 7934 MILLER CLERK 10 2 Apple PRESIDENT 20 3 Lin MANAGER 4 Qian MANAGER 5 Qin MANAGER 此时紧接着输入/可以继续执行前边的内容! 3.6 回退,对于刚刚插入的数据我们还没有提交,此时可以用回退命令回复插入之前的样式 SQL> rollback; 回退已完成。 3.7 批量插入数据 例:把10号部门的员工copy到另外一个表中 (1)原先的表结构,没有表emp10 SQL> select * from tab; TNAME TABTYPE CLUSTERID ------------------------------ ------- ---------- BONUS TABLE DEPT TABLE EMP TABLE SALGRADE TABLE (2)先创建一个表emp10: SQL> create table emp10 2 as 3 select * from emp; ------------相当于子查询 表已创建。 (3)现在的表结构 SQL> select * from tab; TNAME TABTYPE CLUSTERID ------------------------------ ------- ---------- BONUS TABLE DEPT TABLE EMP TABLE EMP10 TABLE SALGRADE TABLE (4)创建一个和emp结构相同的表,但是不拷贝其内容 SQL> create table emp11 2 as 3 select * from emp where 1=2; ------因为where子句后边为假,所以没有拷贝其内容 表已创建。 (5)emp11的表结构 SQL> desc emp11; 名称 是否为空? 类型 ----------------------------------------------------------------------------------- -------- ------------------ EMPNO NUMBER(4) ENAME VARCHAR2(10) JOB VARCHAR2(9) MGR NUMBER(4) HIREDATE DATE SAL NUMBER(7,2) COMM NUMBER(7,2) DEPTNO NUMBER(2) (6)emp11的内容 SQL> select * from emp11; 未选定行 (7)把emp表中10号部门的员工信息copy到另外emp11表中 SQL> insert into emp11 2 select * from emp where deptno = 10; 已创建4行。 (8)显示 内容 SQL> select * from emp11; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- -------------- ---------- ---------- ---------- 1 tom_abc 8000 10 7782 CLARK MANAGER 7839 09-6月 -81 2450 10 7839 KING PRESIDENT 17-11月-81 5000 10 7934 MILLER CLERK 7782 23-1月 -82 1300 10 3.8 更新数据update UPDATE table SET column = value [, column = value, ...] [WHERE condition]; 例:将员工编号7782员工的部门编号更改为20 SQL> ed 已写入 file afiedt.buf 1 update emp11 2 set deptno = 20 3* where empno = 7782 SQL> / 已更新 1 行。 (*)显示信息 SQL> select * from emp11; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- -------------- ---------- ---------- ---------- 1 tom_abc 8000 10 7782 CLARK MANAGER 7839 09-6月 -81 2450 20 7839 KING PRESIDENT 17-11月-81 5000 10 7934 MILLER CLERK 7782 23-1月 -82 1300 10 四 删除数据:delete语句 语法结构: DELETE [FROM] table [WHERE condition]; 4.1 例:删除emp11表中员工编号是1的员工 SQL> delete from emp11 2 where empno = 1; 已删除 1 行。 SQL> select * from emp11; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- -------------- ---------- ---------- ---------- 7782 CLARK MANAGER 7839 09-6月 -81 2450 20 7839 KING PRESIDENT 17-11月-81 5000 10 7934 MILLER CLERK 7782 23-1月 -82 1300 10 4.2 删除一个表emp10,但是表结构在 SQL> delete from emp10; 已删除15行。 (*1)删除之后表结构还存在 SQL> desc emp10; 名称 是否为空? 类型 ----------------------------------------------------------------------------------- -------- ---------------- EMPNO NUMBER(4) ENAME VARCHAR2(10) JOB VARCHAR2(9) MGR NUMBER(4) HIREDATE DATE SAL NUMBER(7,2) COMM NUMBER(7,2) DEPTNO NUMBER(2) (*2) SQL> select * from tab; TNAME TABTYPE CLUSTERID ------------------------------ ------- ---------- BONUS TABLE DEPT TABLE EMP TABLE EMP10 TABLE EMP11 TABLE SALGRADE TABLE 4.3 delete(删除表的数据) 和truncate(表drop掉,重新建表)的区别 1 delete逐条删除 truncate先摧毁表再重建 2 delete语言是DML语言 truncate是DDL DML语言可以闪回 做错的并且提交了.可通过闪回,撤销操作 DDL语言不可以闪回 flashback 3 delete是逐条删除,会产生碎片, truncate不会产生碎片 行移动功能: 要开启闪回功能,必须要开启行移动功能 4 delete不会释放空间 truncate会 5 delete可以回滚 truncate不可以 6 oracle delete快 mysql truncate快 五 从文件中导入,以及删除表(彻底删除) 实验: 从文件中导入数据, 通过命名delete 和 truncate删除表数据 实验 从文件中导入数据 SQL> set timing off; -----查询执行这条语句的时间,现在是关闭, on是打开呢 SQL> set feedback off; -----将返回关掉, on表示打开 SQL> drop table testdelete purge; ---- 因为不知道新建的这个表格有没有,先要删除这个表格 SQL> @c:\Sql.sql; ------@执行脚本,后边紧跟着脚本名称和文件名称 SQL> SQL> set timing on; //最后删除数据表的时候,把时间打开,记录时间 SQL> delete from testdelete; ----oracle条件下这个快 已用时间: 00: 00: 00.09 从文件中导入数据 SQL> set timing off; @c:\Sql.sql; set timing off; select count(*) from testdelete; set timing on; //最后删除数据表的时候,把时间打开,记录时间 truncate table testdelete; 已用时间: 00: 00: 00.51 六 事物 6.1 基本概念 概念: 一个或者多个DML语言组成 特点: 要么都成功,要么都失败 特性: 原子性、一致性、隔离性、持久性 事物的隔离性 多个客户端同时操作数据库的时, 要隔离他们的操作 否则:脏读 不可重复读 幻读 设置不同的搁置级别来解决 -----oracle默认情况下,事务是打开的,提交之后才能被不同的客户端看到数据... 6.2 oracle中的事务 生命周期 1 事务起始标志 DML语言 (oracle默认事务打开的) 2 事务的结束标志 提交: 显示提交commit 隐式提交 1) 执行DDL语言 eg create table语言 还有I个隐式的功能 提交之前的没有提交的DML语言(insert update) 2) 正常退出 exit,隐式提交上一个没有提交的DML语言 回滚: 显示 rollback 隐式 掉电/宕机/非正常退出==系统出错了 6.3 保存点 insert into t3(tid, tname) values(1, 'aaaaa'); insert into t3(tid, tname) values(2, 'bbbbb'); savepoint a; insert into t3(tid, tname) values(3, 'cccc'); rollback to savepoint a ===数据库的隔离级别(详见PPT) 对于同时运行的多个事务, 当这些事务访问数据库中相同的数据时, 如果没有采取必要的隔离机制, 就会导致各种并发问题: 脏读: 对于两个事物 T1, T2, T1 读取了已经被 T2 更新但还没有被提交的字段. 之后, 若 T2 回滚, T1读取的内容就是临时且无效的. 不可重复读: 对于两个事物 T1, T2, T1 读取了一个字段, 然后 T2 更新了该字段. 之后, T1再次读取同一个字段, 值就不同了. 幻读: 对于两个事物 T1, T2, T1 从一个表中读取了一个字段, 然后 T2 在该表中插入了一些新的行. 之后, 如果 T1 再次读取同一个表, 就会多出几行. 数据库事务的隔离性: 数据库系统必须具有隔离并发运行各个事务的能力, 使它们不会相互影响, 避免各种并发问题. 一个事务与其他事务隔离的程度称为隔离级别. 数据库规定了多种事务隔离级别, 不同隔离级别对应不同的干扰程度, 隔离级别越高, 数据一致性就越好, 但并发性越弱 read-only
相关文章推荐
- oracle 开发记忆
- Oracle 定时任务小例子
- Oracle SQL*plus常用的命令和函数
- Oracle SQL 经典查询练手第四篇
- oracle表分区详解
- oracle 11g RAC手动卸载grid,no deinstall .
- Oracle the network adapter could not establish the connection
- oracle中distinct用法
- Oracle面试题
- Oracle中的PLsql的符号解释大全
- 初用oracle 笔记
- oracle数据库各版本下载地址
- Oracle性能优化--DBMS_PROFILER
- Oracle性能优化--AUTOTRACE 操作
- oracle11.2.0.1新特性
- 关于通过导数据出现的oracle字符集问题
- 使用Oracle数据库字典表生成MyBatis配置
- Oracle11g x64使用Oracle SQL Developer报错:Unable to find a Java Virtual Machine
- 干净的卸载Oracle
- oracle 数据库信息查询