Oracle基本用法全教程(一)
Oracle基本⽤法全教程(⼀)
①创建表空间创建⽤户以及⽤户授权
(1)创建表空间
--创建表⼯作空间
create tablespace itheima
--在服务器上指定空间
datafile 'c:\itheima.dbf'
--为他设置空间⼤⼩
size 100m
--进⾏空间⾃动填充
autoextend on
-
郭敬明最新经典语录
-每次进⾏扩展10m
next 10m;
在服务器上指定空间的时候后缀名必须为dbf
(2)删除表空间
drop tablespace itheima;
执⾏完成以后,再去xp系统⾥删除即可;
(3)创建⽤户
--创建⽤户
create user itheima
--这是密码
identified by itheima
default tablespace itheima;
(4)⽤户授权
这是oracle数据库中常见的三种⾓⾊
给⽤户授权
oracle数据库中常见三种⾓⾊
connect 连接⾓⾊,基本⾓⾊
resource 开发者⾓⾊
dba 超级管理员⾓⾊
grant dba to itheima;--把dba权限授权给itheima
然后我们还需要切换到itheima⾓⾊
session→log off →all
然后在重新输⼊⽤户名以及密码进⾏登录即可
②数据类型介绍和表的创建
(1)数据类型介绍
oracle 数据类型
Varchar varchar2  表⽰⼀个字符串
NUMBER NUMBER(n) 表⽰⼀个整数,长度是N
NUMBER(m,n)表⽰⼀个⼩数整数长度是m,⼩数点后边长度是n
data 表⽰⽇期类型
CLOB 表⽰⼤⽂本数据类型可存4G ⼀般多⽤于存储⽂档
BLOB 表⽰⼆进制数据可存4G ⼀般多⽤于存储视频⽂件
(2)创建表
创建表
create table person(
pid number(20) ,糖醋里脊的家常做法
pname varchar2(10)
);
③修改表结构
--修改表结构
--添加⼀列
alter table person add (gender number(1));
--修改列类型
alter table person modify gender char(1);
-
-修改列名称
alter table person rename column gender to sex;
--删除⼀列
alter table person drop column sex;
④数据的增删改
--对表数据进⾏增删改
--对表中数据进⾏查
select * from person ;
--往表中添加⼀条数据 ,只要是涉及到增删改的操作,都要进⾏提交,否则就是脏数据(所谓脏数据,就是没有提交的数据); insert into person (pid,pname) values (1,'詹姆斯');
commit;
--对表中的数据进⾏修改
update person set pname='韦德' where pid =1;
commit;
--对表中的数据进⾏删除操作
三个删除
删除表中全部记录
delete from person;
删除表结构
drop table person;
先删除表,再创建表,效果等同于删除表中全部记录
在数据量⼤的情况下,尤其是表中带有索引的情况下,该操作效率极⾼
索引可以提⾼查询效率,但是会影响增删改效率;
truncate table person;
因数⑤序列的使⽤
序列
序列不真的属于任何⼀张表,但是可以逻辑和表做绑定
序列:默认从1开始,依次递增,主要⽤来给主键赋值使⽤
dual: 虚表, 只是为了补全语法,没有任何实际意义
create sequence s_person;
select val from dual;
添加⼀条语句
insert into person (pid ,panme) values (val,'⼩明' );
commit;
⑥Scott⽤户介绍
Scott⽤户,密码tiger
解锁Scott⽤户
alter user scott account unlock;
解锁Scott⽤户的密码[此句也可以⽤来重置密码]
alter user scott identified by tiger;
切换到scott⽤户同上⾯的⼀样session→log off
⑦单⾏函数
字符函数
select upper('yes') from dual ;  YES;⼩写变⼤写
select lower('YES') from dual ;  yes;⼤写变⼩写
既什么又什么既什么又什么造句
数值函数
select round(10.5,1) from dual;  这是四舍五⼊后边的数字表⽰保留的⼩数点后的位数,可以是复数;
select trunc (10.5,1) from dual; 直接截取,不看后边的数字是否⼤于5;
select mod(10,3) from dual; 求余数;
⽇期函数
查询出emp表中所有员⼯距离现在⼊职多少天
select sysdate-e.hiredate from emp e;
算出明天此时时刻
select sysdate+1 from dual;
查出emp表中所有员⼯⼊职距离现在多少个⽉
select months_between (sysdate,e.hiredate) from emp e;
查出emp表中所有员⼯⼊职距离现在多少年
select months_between (sysdate,e.hiredate)/12 from emp e;
查出emp表中所有员⼯⼊职距离现在多少周
select (sysdate-e.hiredate)/7 from emp e;
转换函数寒战演员表
⽇期转字符串
select to_char(sysdate,'fm yyyy-mm-dd hh24:mi:ss') from dual; fm可以去掉前⾯的数字0,hh24代表⼩时是按照24进⾏来显⽰的字符串转⽇期
select to_date('2018-12-21 6:32:50','fm yyyy-mm-dd hh24:mi:ss') from dual;
通⽤函数
算出emp表中所有员⼯的年薪
奖⾦⾥边有null值,如果null值和任意类型数字做运算,结果都是null;
select e.sal*12+nvl(em,0) from emp e; nvl(em,0)功能就是有结果就⽤前边的,如果为null,则⽤0替代null;
⑧条件表达式
条件表达式
给emp表中的员⼯起中⽂名字
mysql和oracle通⽤
ame,
ame
when 'smith'then'曹操'
when 'James'then'刘备'
when 'Kobe'then'项⽻'
else '⽆名'
end
from emp e;
判断emp表中的员⼯收⼊⼤于3000显⽰为⾼收⼊,⼤于1500显⽰为中等收⼊,⼩于1500显⽰为低收⼊;
select e.sal,
case
when e.sal>3000 then'⾼收⼊'
when e.sal>1500 then'中等收⼊'
else '低收⼊'
end
from emp e;
oracle专⽤条件表达式
oracle中除了起别名,都⽤单引号;
ame
ame,
'james' '曹操',
'aleen' '韦德',
'Kobe'  '科⽐'
'⽆名'
) "中⽂名"
from emp e;
⑨多⾏函数
select count(1) from emp ; 查询总数量
select sum(sal) from emp;  查询⼯资总和
select max(sal) from emp; 查询最⾼⼯资
select min(sal) from emp; 查询最低⼯资
select avg(sal) from emp; 查询平均⼯资
10分组查询
分组查询
查询出每个部分的平均⼯资
分组查询中,出现在group by后边的原始列,才可以出现在select后边,没有出现在group by 后边的列,想要在select后边出现,必须加上聚合函数,聚合函数有⼀个特性,可以把多⾏记录变成⼀个值;
select e.deptno,avg(e.sal)
from emp e
group by e.deptno;
查询出平均⼯资⾼于2000的部门信息
select e.deptno,avg(e.sal) asal
from emp e
group by e.deptno
having avg(e.sal)>2000;
所有条件都不能使⽤别名来进⾏判断
⽐如下⾯的条件语句也不能使⽤别名当条件
where优先级⾼于select 所以相当于先执⾏where但是你设置别名,表中根本没有所以根本不知道
select ename ,sal s from emp where sal>1500;
11多表查询中的⼀些概念
---多表查询中的⼀些概念
-
荷叶减肥茶效果--笛卡尔积
select *
from emp e, dept d;
---等值连接
select *
from emp e, dept d
where e.deptno=d.deptno;
---内连接
select *
from emp e inner join dept d
on e.deptno = d.deptno;
-
--查询出所有部门,以及部门下的员⼯信息。【外连接】
select *
from emp e right join dept d
on e.deptno=d.deptno;
---查询所有员⼯信息,以及员⼯所属部门
select *
from emp e left join dept d
on e.deptno=d.deptno;
---oracle中专⽤外连接
select *
from emp e, dept d
where e.deptno(+) = d.deptno;
12⾃连接
select * from emp;
---查询出员⼯姓名,员⼯领导姓名
---⾃连接:⾃连接其实就是站在不同的⾓度把⼀张表看成多张表。
ame, e2.ename
from emp e1, emp e2
= e2.empno;
------查询出员⼯姓名,员⼯部门名称,员⼯领导姓名,员⼯领导部门名称ame, d1.dname, e2.ename, d2.dname
from emp e1, emp e2, dept d1, dept d2
= e2.empno
and e1.deptno=d1.deptno
and e2.deptno=d2.deptno;
13⼦查询
---⼦查询
---⼦查询返回⼀个值
---查询出⼯资和SCOTT⼀样的员⼯信息
select * from emp where sal in
(select sal from emp where ename = 'SCOTT')
---⼦查询返回⼀个集合
---查询出⼯资和10号部门任意员⼯⼀样的员⼯信息
select * from emp where sal in
(select sal from emp where deptno = 10);
---⼦查询返回⼀张表
---查询出每个部门最低⼯资,和最低⼯资员⼯姓名,和该员⼯所在部门名称---1,先查询出每个部门最低⼯资
select deptno, min(sal) msal
from emp
group by deptno;
---2,三表联查,得到最终结果。
select t.deptno, t.msal, e.ename, d.dname
from (select deptno, min(sal) msal
from emp
group by deptno) t, emp e, dept d
where t.deptno = e.deptno
and t.msal = e.sal
and e.deptno = d.deptno;
14分页查询
----oracle中的分页
---rownum⾏号:当我们做select操作的时候,
--每查询出⼀⾏记录,就会在该⾏上加上⼀个⾏号,
--⾏号从1开始,依次递增,不能跳着⾛。
----排序操作会影响rownum的顺序
select rownum, e.* from emp e order by e.sal desc
----如果涉及到排序,但是还要使⽤rownum的话,我们可以再次嵌套查询。select rownum, t.* from(
select rownum, e.* from emp e order by e.sal desc) t;
----emp表⼯资倒叙排列后,每页五条记录,查询第⼆页。
----rownum⾏号不能写上⼤于⼀个正数。
select * from(
select rownum rn, tt.* from(
select * from emp order by sal desc
) tt where rownum<11
) where rn>5

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。