Oracel笔记第一天
Oracel笔记
sqlplus sys/sys as sysdba;
oracel 特点
-
收费
-
安全性高
-
存储量大,处理快
-
可移植型强
-
检查当前用户环境编码
select userenv(‘language’) from dual;
oracel 数据库中用户的角色
- connect
- resoucrce
- dba
oracel体系结构
- 1数据库–>多个实例(进程)
- 2实例包含多个表空间和多个用户,用户和表空间是同级的
- 3用户管理表
MySQL和Oracel的区别
mysql:一个用户–>多个库–>表
oracel:一个数据库–>多个用户–>表
oracel空间表的操作
创建表空间
create tablespace itheima10 -- 创建表空间
datafile 'c:\itheima10.dbf' -- 表空间的物理文件地址
size 100m -- 表空间的默认物理大小
autoextend on -- 自动扩展
next 10m; -- 每次扩展的大小
--删除表空间
drop tablespace itheima;
--创建用户
create user itheima10 -- 用户名
identified by itheima10 -- 密码
default tablespace itheima10; -- 用户默认使用的表空间
--用户授权
grant dba to itheima10; --授权给用户
表结构
--创建表
create table person (id number,username varchar2(24),adderss varchar2(32)); --same
--修改表结构
alter table 表名
add modify rename column...to.... drop column
-- 删除表
drop table person;
数据类型
varchar2 number date clob blob
表数据的修改 注意事务的提交
insert update select delete
delete和truncate的区别
delete可以回滚,会产生碎片
truncate 直接删除表,然后再创建表
序列
-
序列不属于任何一张表,逻辑上可以和表绑定,连续增长的数字,作用是生成和主键作用一样的
序列第一次使用必须next ,打印的第一个值
create sequence 序列名
increment by n
start with n -
dual 虚标,为了补全语法
-
解锁scott用户和密码
alter user scott account unlock;
alter user scott identified by tiger; 可以重置密码
函数
-
单行函数:
round trunc mod(m,n) -
数值函数
sysdate months_between -
转化函数
to_char to_date -
通用函数
nvl(null,3)=3 nvl(4,5)=4
条件表达式
条件表达式
1
select e.ename
(case e.ename
when ‘tom’ then ‘刘德华’
when…then…
else…
end) 中文名
from emp e;
2
select e.sal,(
case
when e.sal>3000 then ‘high’
when e.sal>1500 then ‘mid’
else ‘low’
end
) “工资等级” from emp e;
查询
-
分组查询
1select * from 表 where 分组前条件 group by 分组条件 having 分组后条件;
2分组查询出现在group by 后面的列,才能出现在select的后面 -
聚合函数(多表函数)特点:把多行记录变成一个值
-
所有的条件后面不能单独的使用别名(select后面的别名),因为select是在where的后面,having后面可以跟聚合函数的比较条件
sql执行顺序:
from where group by having select order by -
多表查询
内连接:显式/等值(where),隐式(select * from table1 inner join table2)
外连接:左外,右外 -
oracel的专用外连接
(+)显示对面的所有数据 -
子查询:把子查询的结果/结果集当作条件
– where条件
select * from emp e where e.sal>(select e.sal from emp e where e.ename = ‘ALLEN’)– select条件:只能有一个结果
select e.*,(select d.dname from dept d where e.deptno = d.deptno) 部门名称 from emp e where e.ename = ‘ALLEN’– from 条件:返回多条记录的子查询可以把它的结果集当做一张表,给起个别名
select msal,e.ename,d.dname
from emp e,dept d,
(select deptno,min(sal)msal from emp group by deptno) a
where e.sal=msal and a.deptno=d.deptno; -
自连接:一个表的两个字段有关系,这个表可以当作两张表,但是必须使用别名。
-
rownum 称为伪列,是在where之前生成的,rownum则是在内存中当你查询结果集生成后追加到结果集上的一个列,这个列从1开始递增,当你过滤掉第一条数据时rownum的编号会继续从1开始排序,强调的是在你查询结果集经过过滤读入内存后追加在结果集上的列,只要有rownum就必须有rownum=1这个值。我们结合是用例子继续理解rownum
-
任何时候想把 rownum = 1 这条记录抛弃是不对的,它在结果集中是不可或缺的。
分页的格式:
select * from
(select rownum r,e1.* from
(select * from emp e order by e.sal desc) e1) e2 where r>5 and r<11