1. sql(Structured Query Language)是关系型数据库的基本操作语言。
包括数据库查询(Data Query),数据操纵(Data Manipulation),数据定义(Data Definition)和数据控制(Data Control)。
数据库查询(Data Query):用于检索数据,也就是select语句。
数据操纵(Data Manipulation Language DML):用于改变数据,包括insert,update和delete。DML不会自动提交事物。
事物控制语句(Transactional Control Language TCL):用于维护数据的一致性,包括commit, rollback和savepoint;其中savepoint语句用于设置保存点,以恢复部分数据的更改。
数据定义(Data Definition Language DDL):用于建立,修改和删除数据对象。create,alter和 drop;DDL语句会自动提交事物。
数据控制(Data Control Language DCL):用于分配和收回权限,包括grant和revoke。DCL也会自动提交事物。
2.sql语句规则
sql语句的关键子不区分大小写;对象名和列名不区分大小写。
3.pl/sql 是oracle在标准sql基础上的扩展,允许定义变量和常量,允许过程语言结构(条件分支和循环)允许异常处理。
4.distinct 作用是要查询的所有数据,而不仅仅是紧跟它后面的那列。
selecte distinct a,b from table; --返回数据的条件是a相等且b必须相等distinct 可否放在列的中间那?
5.NVL(expr1,expr2)
如果expr1是null,则返回expr2,否则返回expr1,expr1和expr2可以是任意数据类型,但两者必须匹配。
NVL2(expr1,expr2,expr3)
如果expr1不是null则返回expr2,否则返回expr3。expr1可以是任意数据类型,而expr2和expr2可以是除LONG之外的其它类型。但是三者数据类型必须一致。
6.插入数据
不使用列插入单行数据:必须提供所有列的数据,数据的顺序与列的顺序一致。
insert into emp values(1,'gaci','man');
使用列插入单行数据:对于未出现的列,默认值为null
insert into emp(id,name,sex) values(1,'gaci','man');
使用只查询插入数据:--将表emp2的数据全部复制到emp1里面
insert into emp1(id,name,sex) select id,name,sex from emp2;
insert /*+APPEND*/into emp1(id,name,sex) select id,name,sex from emp2;
/*+APPEND*/表示直接装载方式,主要用于操作大批量数据
delete删除表中的所有数据时,不会释放表所占用的空间;但是可以回退(roll back)
truncate不仅删除表的数据,而其释放其空间;不可以回退。
7. 事务控制语句
事务用于确保数据库的一致性,有一组相关的DML语句组成。事务确保该组DML语句所执行的操作要么全部执行成功,要么全部取消。
事务主要有insert,update,delete和selete ... for update 组成,当执行这些语句时事务开始;当执行commit货rollback的时候事务结束。
锁
当执行事务操作时,oracle会在被操作的表上家上锁,以防止其它用户改变表结构;同时会在被操作的行上加上锁,以防止其它事务在相应的行上执行DML操作。
当执行commit语句之后,会确认事务变化(更新数据等), 结束事务,删除保存点,释放锁。
当执行DDl语句时会自动提交事物,create , alter,drop 等。
当执行DCL语句Grant,revoke等
当退化出sql/plus,pl/sql等
回退事务
保存点(savepoint)--是事务中的一点,用于取消部分事务。
设置保存点:savepoint a;
回退保存点:rollback to a ; -- 会取消a和面的操作
取消全部事务:rollback;
只读事务(会话级别的) set transaction read only;
只允许执行查询操作,不允许执行任何DML操作。尽管其它用户会话可能提交新事务,但只读事务不会取得新的数据变化,可以确保用户取得特定时间点的数据信息。
顺序事务 set transaction isolation level serializable;
只读事务可以使用户取得特定时间点的数据信息,但是该用户在只读事务期间不能执行dml操作。而顺序事务则可以这样。
数据分组
数据分组通过使用group by字句,分组函数和having字句共同实现。group by指定要分组的列,分组函数用于统计结果,having用户限制分组显示结果。
分组函数
只能出现在选择列表,order by 和 having字句中,不能出现在where和group by字句中
除了count(*)函数外,其它分组函数都会忽略null行
当执行select语句时,如果选择列表同时包括列,表达式和分组函数,那么这些列和表达式必须出现在group by字句中。
脏数据---未提交事务
--查询带有下划线的名字
select name from emp where name like '%a_%' ESCAPE 'a' -- a为转义字符