0
点赞
收藏
分享

微信扫一扫

Oracle数据库语句总结

简介说明

四大传统主流数据库:

    Oracle MySQL SqlServer DB2

 非关系型数据库: Redis MongoDB

主流数据库是关系型数据库:表与表之间是存在关联关系的

当我们说安装数据库的时候,指的是安装数据库服务

创建数据库的时候,指的是创建数据仓库

       可以给数据仓库分成若干块,每一块就叫做一个表空间

        每个表空间都可以对应一个用户

初步使用数据库的时候,先创建一个用户,再给此用户指定一个表空间

如果不给用户提供创建表空间,就默认使用Oracle的默认表空间;为了安全期间,应该为每个用户都创建一个表空间

.DBF就是表空间文件的意思,表空间可以提高安全性。在表空间的用户只能访问存入当前表空间的内容


标准创建流程:

        先创建表空间创建用户用户名与此表空间关联

        再建表,这样做的话,新建的表就会创建在刚才的表空间中;

        最后再赋予登录增删改权限即可

创建表空间---创建用户(关联表空间)---赋予登录权限---赋予增删改权限

查询所有表空间(系统和自己的管理员操作)

一、创建表空间(管理员操作)

create tablespace 表空间名
datafile '存储的路径'
size 10M
autoextend on
next 10M

datafile 用于设置物理文件名称

size 用于设置表空间的初始大小

autoextend on 用于设置自动增长,如果存储量超过初始大小,则自动扩容

next 用于设置扩容的空间大小

怎么删除表空间(管理员操作)

        注意必须先用语句执行,再手动删除磁盘空间,否则Oracle会崩溃

drop tablespace 表空间名称

二、创建用户(管理员才可以创建用户)

--创建用户
create user 用户名
identified by 密码
default table 表空间名称

identified by 用于设置用户的密码

default tablespace 用于指定默认表空间名称

用户创建成功了,但是缺失某个权限,导致登录失败

login denied 登录拒绝;就是缺失登录权限

 三、赋予登录权限

grant connect to 用户名;

当建表时,显示没有操作权限

 四、赋予增删改查的权限

grant resource to 用户名

回收权限

        注意:同级别不能“互相伤害”,就是删除回收平级用户

--回收登录权限
revoke connect from 用户名;

--回收增删改权限
revoke resource from 用户名;

五、赋予收回管理员权限

--给管理员权限
grant dba to 用户名;

--收回管理员权限
revoke dba from 用户名;

其他流程操作语法

    Oracle有几个默认用户

        Sys,system,scott

        Sys,system是管理员;Scott是普通用户

重置普通密码(管理员)

sys as sysdba        //作为系统管理员身份登录
alter user 用户名 identified by 密码
:

用户被锁定,解锁

--管理员执行:
alter user 用户名 account unlock;

删除用户(管理员)

        删除用户时,如果有表则删除失败,因为安全起见;先删除所有表,再删除用户

--删除用户
drop user 用户名 cascade;

数据定义语言

       Create创建 alter修改 drop删除

创建表空间

--创建表空间
create tablespace 表空间名
datafile '存储的路径'
size 10M
autoextend on
next 10M

创建用户

--创建用户
create user 用户名
identified by 密码
default table 表空间名称

创建表

default 向表中添加某个默认值

--创建表
create table 表名称(
字段名称 类型(长度),
字段名称 类型(长度)default ''
);

 复制一个表

--利用现有的表创建新表,复制一个表
create table 新表名称 as select * from 旧表名称;

复制一个表(不复制表的信息,只保留表的类型) 

--只复制表的类型
--Where1=2的意思就是,不相等,复制表的时候就不复制表的信息,只复制表的类型
Create table 新表名 as select * from 旧表名 where 1=2;

复制一个表(剔除重复数据)

--利用现有的表创建新表,复制的表中数据不重复
create table 新表名称 as select distinct * from 旧表名称;

新增约束

    PK主键(Primary Key);UQ唯一(Unique )约束
	CK检查(Check )约束;FK外键(Foreign Key)约束

--约束语法(可以直接在追加表后面)
alter table xx
add constraint 约束名 约束类型 具体约束说明
	
例如:
alter table product add constraint PK_PNO primary key (pno);

--添加年龄约束15~40
alter table stuInfo
add constraint checkAge check(stuAge>15 and stuAge<40);

删除约束

--删除约束
alter table 表名
drop constraint 约束名

用户被锁定

alter user 用户名 account unlock

删除表

--删除表
drop table 表名

 


数据操作语言

        Insert插入 select选择 delete删除 update更新

插入数据

--向表中插入数据
insert into 表名 values('xxx',to_date('2020-02-02','yyyy-mm-dd hh24:mi:ss'));

--如果插入的是部分数据
insert into 表名(字段名称,字段名称……) values('xxx','xxx');

查询表中所有信息

--查询表中所有信息
select * from 表名

查询指定的信息

--查询指定的信息
select * from 表名 where 主键='xx';

选择指定的行列显示

--指定数据进行 行和列 显示
select xx,xx from 表名

筛选重复的行

--显示筛选重复的行
select distinct xx,xx from 表名

按照某个规则排序

--按照某个规则排序(年龄降序,学号升序)
select * from 表名 order by xxage DESC,xxno ASC;

--例如
--ascending 升序
select * from sc order by mark asc;

--descending 降序
select * from sc order by mark desc;

--默认显示是asc,可以为空

 别名显示

--列表别名,就是自定义个名称
--'S'|| 学生编号前面有个S
select 'S'||stuNO 学号,stuName"姓 名" FROM 表名

 例如,别名显示后降序排序

查询不包括某条件的字段

--not in 范围         !=不等于具体的值
-- !=的效率比not in高,not in 会造成全盘扫描造成索引异常

--部门编号不等于10  !=
select * from emp where deptno!=10;
--not in 
select * from emp where  deptno not in('10','20');

删除表中所有信息

--删除表中所有字段信息
delete from 表名

 删除表中的某个信息

-- 删除表中的某个信息
delete from 表名 where 主键='xx'


--删除某个信息,多个信息可以and连接
delete from 表名 where xx=xx and xx=xx

 修改表中的某个信息

--修改表中的某个信息
--一般都根据主键来修改数据
update 表名 set xx=xx,xx=xx where 主键=''

例如:
update 表名 set sname='james' where sid=2023;

事务控制语言

        Commit提交 savepoint保存 pollback回拨


数据控制语言

        Grant授予    revoke撤销

赋予登录权限

grant connet to 用户名

赋予增删改权限

--赋予增删改权限
grant resource to 用户名

赋予管理员权限

--赋予管理员权限
grant dba to 用户名

回收管理员权限

--回收管理员权限
revoke dba from 用户名

回收登录权限

--回收登录权限
revoke connect from 用户名

回收增删改权限

--回收增删改权限
revoke resource from 用户名

聚合函数 

注:查询的emp表在scott用户里

AVG 求平均值

--avg()平均值

---求所有人平均工资
select avg(sal) from emp;

--求20号部门的平均工资
select avg(sal) 平均工资 from emp where deptno=20;

--求20号部门的平均工资 和 部门编号
select deptno,avg(sal) 平均工资 from emp where deptno=20 group by deptno;

--按照部门编号进行分组,求每组的平均工资
select deptno,avg(sal) from emp group by deptno;

MIN求最小值

--min()最小值

--求本公司薪资最低的人的工资
select min(sal) from emp;

--求20号部门工资最低的人
select min(sal) from emp where deptno=20;

--求本公司每个部门的最低工资
select deptno,min(sal) from emp group by deptno;

--分组,就添加group by

MAX求最大值

--max()最大值

--求本公司薪资最高的人的工资
select max(sal)最高工资 from emp;

--求30号部门工资最高的人
select max(sal)部门最高工资 from emp where deptno=30;

--求本公司每个部门的高工资
select deptno,max(sal) from emp group by deptno;

SUN求和

--sun()求和

--求公司每月要发的总工资
select sum(sal)总工资 from emp;

--求每个月给30号部分发的总工资
select sum(sal) from emp where deptno=30;

--求本公司每个部门的总工资
select deptno 部门编号,sum(sal)总工资 from emp group by deptno;

count累加

--count()累加

--求公司总人数
select count(*) from emp;

--求20号部门的人数
select count(*) from emp where deptno=20;

--最好不要用count(*);*代表查找所有字段
select deptno,count(*) from emp group by deptno;

--求每个部门的总人数
select deptno,count(empno) from emp group by deptno;


--每个部门的。。。值,只要2000以上的
select deptno 部门编号,max(sal) 最大值,AVG(sal) 平均值,min(sal) 最小值
from emp
group by deptno
having avg(sal)>2000;
举报

相关推荐

0 条评论