Oracle基本语法的使用

Oracle的基本使用

1.1 DCL语句

1.1.1 表空间的创建

表空间的作用

可以使用表空间限制数据库文件的大小
利用表空间将数据文件存放到不同的磁盘上,提高IO性能,利于数据的备份和恢复
创建表空间语法:
CREATE TABLESPACE tablespacename
DATAFILE ‘filename’ [SIZE integer [K|M]]
[AUTOEXTEND [OFF|ON]];

create tablespace myspace
datafile 
  'e:/my01.dbf' size 5 M,
  'd:/my02.dbf' size 10 M
-- 创建表时,为表指定表空间
 create table person
 (
    pid number ,
    pname varchar2(20) ,
    page number(3),
    birthday date,
    address varchar2(20) default '不详'
 )tablespace myspace;

1.1.2 账号的创建

同一数据库中可以同时有多个用户,每个用户管理自己的数据库对象.比如数据库表、索引、视图等。。
Oracle中的CREATE USER命令用于创建新用户。每个用户都有一个默认表空间和一个临时表空间。如果没有指定,Oracle就将SYSTEM设为默认表空间,将TEMP设为临时表空间。

CREATE USER ahx
IDENTIFIED BY 123456
DEFAULT TABLESPACE myspace;

新创建的账号默认为锁定状态并且没有连接权限,需要解锁并授权

--将指定用户解锁
alter user ahx account unlock;

1.1.3 角色权限认证

Oracle中的常用系统预定义角色如下。

CONNECT:临时用户,特别是那些不需要创建表的用户,通常赋予该角色。
RESOURCE:更为可靠和正式的数据库用户可以授予该角色,可以创建表、触发器、过程等。
DBA:数据库管理员角色,拥有管理数据库的最高权限。一个具有DBA角色的用户可以撤销任何别的用户甚至别的DBA权限,这是很危险的,所以不要把该角色轻易授予一些不是很重要的用户。
给用户分配权限或角色

GRANT命令用于为用户分配权限或角色,而REVOKE命令用于为用户撤销权限和角色

授权

分配权限或角色语法:GRANT [<权限> | <角色>] TO <用户>;
--将指定用户授权
grant connect,dba,resource to ahx
grant create session,create table to ahx;--为用户分配权限
grant connect to ahx;--为用户分配角色
grant resource to ahx;
--grant connect,resource to ahx;--为用户分配角色

--为ahx分配查询scott账号下的emp表的权限
 -- grant select|insert|update|delete on 表 to 用户
 grant select on scott.emp to ahx
 --以xiaoming账号登录查询
 select * from scott.emp

在进行权限赋权时可以为指定账号单独赋予权限,也可以赋予角色,直接拥有角色所拥有的权限

取消授权

撤销权限和角色语法:REVOKE [<权限> | <角色>] FROM <用户>;

1.2 DDL语句

由于oracle没有库的概念,所以创建表空间就是建库语句,oracle的ddl语句经常指的是创建表或对表的列进行修改的语句

1.2.1 CREATE TABLE 语句

除数据类型外与mysql建表语句语法相同,并且oracle允许检查约束(一般交由服务器处理)

---创建表: create table 表名(列名1 数据类型 [约束])
create table dept
(
   deptno number(6) primary key,
   deptname varchar2(50) not null,
   deptnum  number(5)  check (deptnum>=0),
   loc varchar(100) default '郑州' 
)

create table employee
(
   empId number(10) primary key,
   empName varchar2(50) not null,
   empAge number(3) check(empAge>=18 and empAge<=60),
   deptno number(6) references dept(deptno)
)

Oracle没有主键自增的概念,如果需要主键自增可以通过序列解决

1.2.2 ALTER TABLE语句

对已有表的列进行操作

增加

语法: alter table tableName add columnName dataType;

alter table employee add empTel varchar2(11);

修改

语法: alter table tableName modify columnName dataType;

alter table employee modify empTel varchar2(14);

删除

语法: alter table tableName drop column columnName;

alter table employee drop column empTel;

对列添加约束

语法:alter table tableName add constraint constraintName constraintType(columnName)

alter table dept add constraint un_deptname unique(deptname);

从视图USER_CONS_COLUMNS中查看约束

select  constraint_name,column_name from user_cons_columns 

1.2.3 序列

序列(SEQUENCE)是一个命名的顺序编号生成器,它能以串行的方式生成一系列顺序整数

序列的主要用途:

  • 主键、外键值应用需求
  • 流水号应用需求
  • 序列的生成与定义的内容

序列语法:

CREATE SEQUENCE sequnce_name
[START WITH n1] //指定要生成的第一个序列号 (从n1 开始)
[INCREMENT BY n2] //用于指定序列号之间的间隔,默认值为1
[{MAXVALUE n3 | NOMAXVALUE}] //指定序列可以生成的最大值
[{MINVALUE n4 | NOMINVALUE}] //指定序列可以生成的最小值
[{CACHE n5 | NOCACHE}] //用于指定在高速缓存中可以预分配的序列号个数,默认为20
[{CYCLE | NOCYCLE}] //用于指定在达到序列的最大值或最小值后是否循环
[ORDER]; //用于指定按顺序生成序列号 ,确保序列唯一和有序

create sequence ms
   start with 1
   increment by 1
   maxvalue 5
   minvalue 1
   nocycle
   cache 10;

使用

通过nextval获取下一个序列的值

select ms.nextval from dual;

通过currval获取当前序列的值

select ms.currval from dual;

序列的使用

--创建序列
create sequence ms
start with 1  --从1开始
increment by 1 --序列的间隔(每次变化的数值)
maxvalue 10000000 --最大值
minvalue 1   --最小值
nocycle --不循环
cache 10 

 select * from dual
 select my_seq.nextval from dual
 select my_seq.currval from dual
   
 select * from employee
   --Oracle中没有主键自增的概念,但可以通过自定义序列来实现
   insert into employee(empId,empName,empAge,deptno) values(ms.nextval,'zhangsan',20,10)

修改序列

#更改序列
ALTER SEQUENCE ms maxvalue 5000 cycle;
#删除序列
DROP SEQUENCE ms;

1.3 DML语句

oracle基本语句使用的还是sql所以与mysql学习时使用的dml语句基本保持一致

1.3.1 insert 增加

insert into 表名(列名1,列名2,列名3)values(1,2 ,3)

由于没有主键自增所以在添加时使用序列进行数据的id生成

1.3.2 update 修改

update 表名 set 列名1=1, 列名2=2[where 条件]

1.3.3 delete删除

delete from 表名 [where 条件]

基本查询语句练习

--使用scott账号练习基本查询语句
--1 查询当前用户下的所有表
select * from tab;
--2 查询雇员表中所有信息
select * from emp;
--3 查询雇员编号,姓名,工作,工资
select empno,ename,job,sal from emp
--4 查询雇员编号,姓名,工作,工资,并显示中文(为列起别名)
select empno as 编号,ename as 姓名,job as 工作,sal as 工资 from emp
--5 消除重复列,查询雇员工作种类
select distinct job from emp
--6 字符串连接操作(||)
--查询雇员编号,姓名,工作.按以下格工显示:编号:7369,姓名:Smith,工作:Clerk
select '编号:'||empno,'姓名:'||ename,'工作:'||job from emp
--7 查询列支持四则运算(年薪=(工资+奖金)*12)
--查询雇员编号,姓名,工作,年薪 
select empno,ename,job,(sal+nvl(comm,0))*12 from emp
nvl(comm,0)==>如果comm值为空,取值0

--8 Where条件查询
-- 查询工资大于1500的所有雇员
select * from emp where sal>1500
--查询可以得到奖金的所有雇员
select * from emp where comm is not null
--查询工资大于1500或可以得到奖金的雇员
select * from emp where sal>1500 or comm is not null
--查询工资大于1500并且可以领取奖金的雇员
select * from emp where sal>1500 and comm is not null
--查询工资不大于1500或者不可以领取奖金的雇员
select * from emp where sal<=1500 or comm is null
--查询工资在1500到3000的所有雇员信息
select * from emp where sal>=1500 and sal<=3000
select * from emp where sal between 1500 and 3000
--查询在1981年雇用的员工信息
select * from emp where hiredate like '%81%'
--查询雇员姓名中第二个字母为"M"的雇员
select * from emp where ename like '_M%'
--查询雇员工资中带8这个数字的
select * from emp where sal like '%8%'
--查询编号是7369,7499,7521,7799的雇员信息
select * from emp where empno=7369 or empno=7499 or empno=7521 or empno=7799
select * from emp where empno in(7369,7499,7521,7799)
--查询雇员编号不是7369,7499,7521,7799的所有雇员信息
select * from emp where empno not in(7369,7499,7521,7799)
--查询雇员编号为7369的雇员信息
select * from emp where empno =7369
--查询雇员编号不为7369的雇员信息
select * from emp where empno !=7369
select * from emp where empno <>7369

--查询雇员信息,按工资由低到高排序
select * from emp order by sal asc
--查询雇员信息,按工资由高到低排序
select * from emp order by sal desc

--操作集合:
--union:将两个记录合并,去掉重复项 
select distinct deptno from emp union select deptno from dept;
--union:将两个记录合并,不去掉重复项 
select distinct deptno from emp union all select deptno from dept;
--intersect:取两个集合的交集
select distinct deptno from emp intersect select deptno from dept;
--minus:去掉交集(集合A-(集合A和集合B的交集))
select deptno from dept minus select distinct deptno from emp ;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Main12138

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值