Oracle10g学习笔记1
Oracle体系结构概述
物理结构:
1.控制文件.CTL
2.数据文件.DBF
3.日志文件.LOG
由控制文件来管理数据文件和日志文件。参数文件来寻找控制文件。
可以用SQL语句查看系统视图,如DESC v$controlfile。
查看控制文件的名称和状态:SELECT status,name FROM v$controlfile;
显示如下:
E:\ORACLE\PRODUCT\
E:\ORACLE\PRODUCT\
E:\ORACLE\PRODUCT\
内存结构
系统全局区SGA:
1、数据库高速缓存区:内存区中用来频繁访问的区域
保持缓存池:在内存中频繁访问的,如代码表放在该缓存池
再生缓存池:想晶块在内存中排除的对象。
默认缓存池
2、共享池:其规模对数据库的性能有重要的影响。
库缓存区:包括共享SQL区(保留SQL的解释版本,以便再次使用时不必重新解释)和PL/SQL区(保留了SQL的过程、函数、触发器等)
字典缓存区:用来缓存字典信息。将最频繁使用的数据字典信息保存在内存中。
3、 redo日志缓存池:用来放置需要写入磁盘的redo记录。在Oracle中以循环的方式进行先进先出的缓存方式。
4、 大共享区:可选的特征。提供了分配大的内存块的隔离的区域。
5、 固定SGA:由Oracle独立控制。
逻辑结构:
表空间:1:n数据文件。包含多个段(segment)
段 1:n盘区 1:n块(最基本单位)
只能指定表存储在哪个表空间中。
SQL PLUS基础
1、连接方式:sqlplus “sys/oracle as sysdba” conn sys/oracle as sysdba
如果没有启动实例,则用sqlplus/nolog启动,再connect,然后startup;
关闭:shutdown immediate
2、help in 查询SQL plus 所有命令;SET命令:设置。
List 查看在oracle缓冲区里的命令。用/执行缓冲区里的命令。DEL删除缓冲区里的某行,如DEL1 3,一至3行;ADD,简称A,添加命令;对于语句中的信息的保存,可以用save命令,如save c:\oracle\test.txt;执行保存的文件:@c:\oracle\test.txt。
也可以用get c:\oracle\test.txt查看刚才保存的信息,调到缓冲区,但并不执行。
? col :表示col命令的帮助。
Column命令:col deptno heading ”编号”
DESCRIBE:DESC,描述。
Comp:计算 computer
Break on pub 重复的显示一条
保存结果集(数据):spool c:\oracle\spool.txt
Spool off
SQL语言基础
语言分类:
1、 DLL,数据定义语言
CREATE,CREATE TABLE abc(a varchar(10),b char(10));
ALTER,ALTER TABLE abc ADD c NUMBER; 加一个c的字段,数据符为NUMBER。ALTER TABLE abc DROP COLUMN c;
DROP,DROP TABLE abc
2、 DCL,数据控制语言
GRANT,授权 GRANT SELECT ON dept TO sde;让sde用户可以选择dept表
REVOKE,授权收回 REVOKE SELECT ON dept FROM sde;
3、 DML,数据操作语言
SELECT,SELECT * FROM ABC;
INSERT, INSERT INTO ABC(A,B) VALUES(‘XF’,’SDE’);
DELETE, DELETE FROM ABC; 删除表中所有数据。
DELETE FROM ABC WHERE A =’ORCL’;
UPDATE,UPDATE ABC SET B=’AAA’; 将表中B的数值全部改成AAA
UPDATE ABC SET B=’AAA’ WHERE A =’XF’;将A=XF行B值修改。
常用的系统函数
1、 字符
Length :SELECT LENGTH(‘DSAHJKL’) FROM table; 查字符的长度
SUBSTR:SELECT SUBSTR(‘ABCDEFG’,2,3) FROM DUAL;
结果:BCD 从第二个字符开始取3个字符串。
TRIM 去掉空格
2、 日期
Sysdate 当前系统时间 select sysdate from dual;
Current_date ,ALTER SESSION SET NLS_DATE_FORMATE=’DD-MON-YYYY HH24:MI:SS’;
3、 转换
TO_CHAR, 转为字符型 TO_DATE, 日期型 TO_NUMBER,整型,数值型
SELECT TO_CHAR(SYSDATE, ‘yyyy-mm-dd hh24:mi:ss’) from dual;
4、 聚集函数, WHERE不能跟着聚集函数查询,而改用HAVING
SUM SELECT SUM(PRICE) FROM BOOKS; SUM(PRICE*QTY)价格*数量
AVG SELECT AVG(PRICE) FROM BOOKS; 平均值
MAX SELECT MAX(PRICE) FROM BOOKS; 最大值
MIN
COUNT SELECT COUNT(PRICE) FROM BOOKS; 查询行数,COUNT(*)表的行数
5、 其他
USER 查询当前登陆的用户
DECODE 条件查询,布尔型的判断
SELECT SUM(DECODE(SEX,’男’,1,0)) 男人数,ODE(SEX,’女’,1,0)) 女人数, FROM E;
SELECT * FROM AA WHERE A2 IS NULL(NOT NULL);查询空值。
ASC(DESC) SELECT * FROM AA ORDER BY A1 ASC(DESC);升降序排列。
DISTINCT SELECT DISTINCT A1 FROM AA; 将重复的语句屏蔽查询。
ALL SELECT ALL A1 FROM AA; 将所有的语句进行查询。
分组语句 GROUP BY
SELECT PUB, SUM(PRICE*QTY) FROM BOOKS GROUP BY PUB;
SELECT选择的真正的字段,必须显示在GROUP BY后面,否则报错。
模糊查询 LIKE
SELECT * FROM AA WHERE A1 LIKE ‘A%’;
SELECT * FROM AA WHERE A1 LIKE ‘%A%’;只要包含A,都查询出来。
表的连接 JOIN ON
内连接:进行连接的两个表对应的相匹配的字段完全相同。
外连接:左(右)连接,都是不完全匹配的,称为外连接
子查询
SELECT * FROM E WHERE ID IN (SELECT ID FROM D); 无关子查询,没有涉及父查询。
相关子查询:
SELECT * FROM E WHERE ID IN (SELECT ID FROM
D WHERE ID= E.ID AND ID=’
在子查询中不可以用*进行查询,除非在EXISTS中查询:
WHERE EXISTS (SELECT ID FROM D); NOT EXISTS ;
INTERSECT 返回查询中都匹配的数据行
INSERT INTO e(eid,ename) SELECT id, name, FROM d;把d表的结果集插入到e表中。