/**闲言少叙,直接进入主题**/
一、
Oracle的内部结构描述了内部存储结构,内部结构包括表空间、表、列、分区、用户、索引、视图、权限、角色、段、盘区、块等。
(1)表空间是数据库的逻辑划分,一个表空间只属于一个数据库。每个表空间由一个或多个数据文件组成,表空间其他逻辑结构的数据存储在这些数据文件。系统默认的由:system,sysaux,undo,users,temp表空间。
(2)约束 可以维护数据库数据的完整性。类型:主键约束(primary kry),默认约束(default),检查约束(check),唯一性约束(unique),外键约束(foreign).
(3)数据库创建示例
以sysdba链接到oracle
conn system/Ming12 as sysdba
##创建数据库
create database mydb
user sys identified by Ming12
user system identified by Ming12
logfile 'E:\app\Administrator\ordata\mydb\name.log' size 100M
datafile 'E:\app\Administrator\ordata\mydb\sysem.dbf' size 200M
修改数据库 alter database [databese_name];
删除数据库: drop database [databese_name];
(4)oracle的数据类型:字符类型,数值类型,日期时间类型,LOB类型(blog,clog,bfile),rowid类型(伪列类型)
(5)表
创建表就是定义表结构以及设置表和列的属性。
###在oracle中创建表建表,必须得有表空间。表空间由数据文件组成。
##创建表空间示例
---本地化管理方式
create tablespace mytbs data file 'D:\OracleFiles\OracleData\mytbs.dbf'
szie 10m
extent management local uniform 256K;
--段空间管理方式
create tablespace mytbs data file 'D:\OracleFiles\OracleData\mytbs.dbf'
szie 10m
extent management local autoallocate
segment space management manual;
---创建表示例
create table xsb(
XH char(6) not null primary key,
XM char(8) not null,
XB cahr(2) default '1' not null,
CSSJ date not null,
ZY char(12) null,
zxf number(2) null,
BZ varchar2(200) null
);
--表中插入数据
insert into xsb(xh,xm,xb,cssj,zy,zxf,bz)
values(001,'tom','man',to_date('02-10-1999','dd-mm--yyyy'),'computer',50,null)
---修改表
alter table xsb add(tel number(11));
--查询表结构
desc xsb
--查询xsb表数据
select * from xsb
--删除字段
alter table xsb drop column addr;
--删除表
drop talbe;
--插入数据
//单条插入
insert into dept(deptno,dname,loc)
values(88,'design','chinese');
//批量插入
/*将jobs表中最高工资大于10000的记录人擦汗如新表jobs_temp中*/
insert into jobs_temp
select * from jobs
wheree jobs.max_salary >10000;
--更新数据
/*更新单列数据,
把emp表中雇员名为scott的工资调整为2460元*/
update emp
set sal=2460
where ename='scott'
/*更新多列数据
把emp表中职务为销售员的工资上调20%*/
update emp
set sal
where job='salesman'
--删除
/*删除职务编号为pro的记录*/
delete from jobs where job_id='pro'
/*删除表中全部数据*/
delete from emp;
/*truncate 删除数据更快,因为不会产生回滚数据*/
truncate table jobs_temp;
select distinct job from emp;//distinct雄安出结果集的重复行
---用like匹配以字母S开头的任意长度的员工名称
select empno,ename,job from where ename liake 'S%';
--范围比较
---在emp表中,使用in擦汗寻职务为'president' 'manager'和'analyst'中任意一种的员工信息
select empno,ename,job from emp where jon in('president','manager','analyst');
---在emp表中,使用not in 查询职务不在指定目标列表('president' 'manager''analyst')范围内的员工---信息
select empno,ename,job from emp where jon not in('president','manager','analyst');
--在emp表中,用between ..and查询工资在2000到3000的员工信息
select empno,ename,job from emp where sal between 2000 and 3000;
--子查询
/**单行子查询,返回一行数据的子查询语句**/
/*查询工资既不是最高的也不是最低工资的员工信息*/
select empno,ename,sal from emp
where sal>(select min(sal) form emp) and sal<(select max(sal) from emp);
/*多行子查询,返回多行数据的子查询语句*/
--查询不是销售部门的员工信息
select empno,ename,job from emp where deptno in(select deptno from dept where dname<>'sales');
select empno,ename,sal from emp where sal>any(select sal from emp where deptno=30)
select deptno,ename,sal from emp where sal>all(select sal from emp where deptno=30)
/*关联子查询*/
在emp表中,使用‘关联子查询’检索工资大于同职位的平均工资的员工信息
select empno,ename,sal from emp f
where sal>(select avg(sal) from emp where job=f.job)
oder by job;
--表别名,多表关联查询时,如果表之间存在同名的列,则必须使用表名来限定列的引用。
通过deptno 关联emp和dept,并检索信息
select e.empno sa 编号,d.dname as 部门
from emp e,dept d
where e.deptno=d.deptno
and e.job='MANAGER';
--内连接,通常使用inner join,其中inner可省略,当只用join时, 必须在from后接 on子句
select e.empno as 编号,e.ename as name,d.dname as 部门
from emp e inner join dept d
on e.deptno=d.deptno;
---外连接
左外连接:查询结果包含了满足条件的数据行和左表中不满足连接条件的数据行
右外连接:查询结果包含了满足条件的数据行和右表中不满足连接条件的数据行
完全外连接:执行完整的左外连接和右外连接,将查询结果合并
--自然连接:指检索多表时,将第一个表中的列和第二个表具有相同名称的列进行自动连接
--自连接,用在自参考表上显示上下级关系或者层次关系
创建视图
create or replace view
--索引
按照索引数据的存储方式可以分为B树索引,位图索引,反向键值索引和基于函数的索引
--计算两数之和与差的商
declare
a int:=100;
b int:=200;
c number;
begin
c:=(a+b)/(a-b)
dbms_out.put_line(c);
exception
when zero_divide then
dbms_output.put_line(‘除数不为0’);
end;