SELECT * FROM DUAL;
dual是什么?
???? 是Oracle下的一个字典表
???? 属于sys用户
???? 用于构造一个标准的SQL
???? 对优化器有一定影响。
SQL语句的种类
DML ---data
manipulation language
– SELECT
– INSERT
– UPDATE
– DELETE
DDL---data
definition language
– Create…
– Drop…
– Truncate…
– Alter… .
DCL---data control
language
– Grant
– revoke
简单的SQL示例—创建测试用户和它的对象
(之前可能要开启权限 conn / as sysdba
// grant connect to scott;)
???? Create user test identified by test (default) tablespace users;
????
grant dba to test;
????
connect test/test;
????
create table t(id int,name varchar2(10));
????
Insert into t values(1,’tigerfish’);
????
Update t set name=‘tiger’ where id=1;
????
Delete from t where id=1;
????
Drop table t purge;
(conn /
as sysdba)
????
drop user test;
一些常见的SQL语法
???? 条件查询
– select * from
dba_objects where object_id=100 and object_name='T';
???? 排序
– select * from
dba_obects order by object_id;
???? 分组
– select
object_name,count(*) from t group by object_name;
???? 两表关联
– select a.* from
dba_objects a,dba_objects b where a.object_id=b.object_id;
揭去SQL的面纱—Oracle是如何工作的?
???? Select id,name from t order by id ;
– SQL 解析
– 执行计划
– 执行SQL
? 从磁盘中读取数据(如果内存中没有)
? 数据处理
? 返回结果
????
Insert into t values(1,‘tigerfish’);
– SQL 解析
– 执行计划
– 执行SQL
? 从磁盘中读取数据块(如果内存中没有)
? 修改回滚段数据块(同时产生redo log)----Oracle特性
? 修改原始数据块(同时产生redo log)
????
Create table t values(id int,name varchar2(10);
– SQL 解析
– 执行计划
– 执行SQL
? 给对象分配初始化的存储空间(段),产生一些undo和redo日志。
? 在Oracle字典表中创建新的对象相关信息(表,字段,各种属性….),产生一些Undo和redo日志。
???? Drop table t purge(truncate table t);
– SQL 解析
– 执行计划
– 执行SQL
? 收回对象占用的空间,产生一些undo和redo日志。
? 在Oracle字典表中删除的对象的相关信息(表,字段,各种属性….),产生一些Undo和redo日志。