【Oracle】常用命令汇总

embedded/2024/11/9 4:55:40/

本文基于黑马程序员文档做的二次总结,如有侵权,请联系本人删除。

字段定义

创建表空间

create tablespace waterboss
datafile 'c:\waterboss.dbf'
size 100m
autoextend on
next 10m;

waterboss 为表空间名称
datafile 用于设置物理文件名称
size 用于设置表空间的初始大小
autoextend on 用于设置自动增长,如果存储量超过初始大小,则开始自动扩容
next 用于设置扩容的空间大小

创建用户

create user wateruser
identified by itcast
default tablespace waterboss;

wateruser 为创建的用户名
identified by 用于设置用户的密码
default tablesapce 用于指定默认表空间名称

用户赋权

grant dba to wateruser

DBA: 拥有全部特权,是系统最高权限,只有 DBA 才可以创建数据库结构。
RESOURCE:拥有 Resource 权限的用户只可以创建实体,不可以创建数据库结构。
CONNECT:拥有 Connect 权限的用户只可以登录 Oracle,不可以创建实体,不可以创建数据库结构。
对于普通用户:授予 connect, resource 权限。
对于 DBA 管理用户:授予 connect,resource, dba 权限。

创建表

create table t_owners
(
id number primary key,
name varchar2(30),
addressid number,
housenumber varchar2(30),
watermeter varchar2(30),
adddate date,
ownertypeid number
);

数据类型:

  1. 字符型
    (1)CHAR : 固定长度的字符类型,最多存储 2000 个字节
    (2)VARCHAR2 :可变长度的字符类型,最多存储 4000 个字节(3)LONG : 大文本类型。最大可以存储 2 个 G
    2.数值型
    NUMBER : 数值类型
    例如:NUMBER(5) 最大可以存的数为 99999
    NUMBER(5,2) 最大可以存的数为 999.99
    3.日期型
    (1)DATE:日期时间型,精确到秒
    (2)TIMESTAMP:精确到秒的小数点后 9 位
    4.二进制型(大数据类型)
    (1)CLOB : 存储字符,最大可以存 4 个 G
    (2)BLOB:存储图像、声音、视频等二进制数据,最多可以存 4 个 G

表增加字段

--追加字段
ALTER TABLE T_OWNERS ADD
(REMARK VARCHAR2(20),OUTDATE DATE
);

表更改字段类型

ALTER TABLE T_OWNERS MODIFY
(
REMARK CHAR(20) ,
OUTDATE TIMESTAMP
);

表字段重命名

ALTER TABLE T_OWNERS RENAME COLUMN OUTDATE TO EXITDATE;

表删除字段

# ALTER TABLE T_OWNERS DROP COLUMN REMARK;
ALTER TABLE T_OWNERS DROP (REMARK,EXITDATE);

删除表

# DROP TABLE T_OWNERS;

记录的增删改

表插入记录

insert into T_OWNERS VALUES (1,' 张三丰',1,'2-2','5678',sysdate,1);
insert into T_OWNERS (id ,name,addressid,housenumber,watermeter ,adddate,ownertypeid) VALUES (2,'赵大侃',1,'2-3','9876',sysdate,1);
commit;

表修改记录

update T_OWNERS set adddate=adddate-3 where id=1;
commit;

表删除记录

delete from T_OWNERS where id=2;
commit;# TRUNCATE TABLE T_OWNERS 

比较 truncat 与 delete 实现数据删除?

  1. delete 删除的数据可以 rollback
  2. delete 删除可能产生碎片,并且不释放空间
  3. truncate 是先摧毁表结构,再重构表结构

导入导出数据库

导出数据库全部数据

exp system/itcast full=y;
# exp system/itcast file=文件名 full=y

不指定 file 参数,则默认用导出 EXPDAT.DMP

导入数据库全部数据

imp system/itcast full=y;
# imp system/itcast full=y file=water.dmp;

按用户导入数据库

exp system/itcast owner=wateruser file=wateruser.dmp;

按用户导入数据库

imp system/itcast file=wateruser.dmp fromuser=wateruser;

按表导出数据库

exp wateruser/itcast file=a.dmp tables=t_account,a_area;

按表导入数据库

imp wateruser/itcast file=a.dmp tables=t_account,a_area;

数据查询

select distinct name from t_owners where (name like '%刘%' or usenum<=20000
') and addressid=3 and maxnum is not null order by usenum desc

精确查询

select * from T_OWNERS where watermeter='30408'

模糊查询

select * from t_owners where name like '%刘%'

and or 混用

select * from t_owners where (name like '%刘%' or housenumber like '%5%') and addressid=3

范围查询

select * from T_ACCOUNT where usenum>=10000 and usenum<=20000;
--  select * from T_ACCOUNT where usenum between 10000 and 20000

不建议使用between,再别的sql中有不含等于号的情况。

空值查询

select * from T_PRICETABLE t where maxnum is not null
-- select * from T_PRICETABLE t where maxnum is null

去重复查询

select distinct addressid from T_OWNERS

升序查询

select * from T_ACCOUNT order by usenum

降序查询

select * from T_ACCOUNT order by usenum desc

伪列ROWID查询

-- select rowID,t.* from T_AREA t
select rowID,t.* from T_AREA t where ROWID='AAAM1uAAGAAAAD8AAC';

伪列ROWNUM查询

-- select rowID,rownum,t.* from T_AREA t
select rownum,t.* from T_OWNERTYPE t

聚合查询求和

select sum(usenum) from t_account where year='2012'

聚合查询求平均

select avg(usenum) from T_ACCOUNT where year='2012'

聚合查询求最大值

select max(usenum) from T_ACCOUNT where year='2012'

聚合查询求最小值

select min(usenum) from T_ACCOUNT 

聚合查询统计个数

select areaid,sum(money) from t_account group by areaid

分组后条件查询

select areaid,sum(money) from t_account group by areaid having sum(money)>169000

多表内连接查询

select o.id 业主编号,o.name 业主名称,ot.name 业主类型
from T_OWNERS o,T_OWNERTYPE ot
where o.ownertypeid=ot.id
select o.id 业主编号,o.name 业主名称,ad.name 地址,
ot.name 业主类型
from T_OWNERS o,T_OWNERTYPE ot,T_ADDRESS ad
where o.ownertypeid=ot.id and o.addressid=ad.id

多表左外连接查询

SELECT ow.id,ow.name,ac.year ,ac.month,ac.money
FROM T_OWNERS ow left join T_ACCOUNT ac
on  ow.id=ac.owneruuid

ORACLE语法优化,在右表所在的条件一端填上(+)

SELECT ow.id,ow.name,ac.year ,ac.month,ac.money FROM
T_OWNERS ow,T_ACCOUNT ac
WHERE ow.id=ac.owneruuid(+)

多表右外连接查询

select ow.id,ow.name,ac.year,ac.month,ac.money from
T_OWNERS ow right join T_ACCOUNT ac on  ow.id=ac.owneruuid

ORACLE 的语法优化,在左表所在的条件一端填上(+)

select ow.id,ow.name,ac.year,ac.month,ac.money from
T_OWNERS ow , T_ACCOUNT ac where ow.id(+) =ac.owneruuid

子查询

where 子句中的子查询

select * from T_ACCOUNT 
where year='2012' and month='01' and usenum >
( select avg(usenum) from T_ACCOUNT where year='2012' and month='01' )

多行子查询 in

select * from T_OWNERS where addressid in ( 1,3,4 )
select * from T_OWNERS where addressid not in
( select id from t_address where name like '%花园%' )

多行子查询 any

多行子查询 all

from 子句中的子查询

select * from (select o.id 业主编号,o.name 业主名称,ot.name 业主类型
from T_OWNERS o,T_OWNERTYPE ot
where o.ownertypeid=ot.id)
where 业主类型='居民'

select 子句中的子查询

select id,name, (select name from t_address where id=addressid) addressname
from t_owners

分页查询

rownum分页查询

select * from
(select rownum r,t.* from T_ACCOUNT t where rownum<=20)
where r>10

这是因为 rownum 是在查询语句扫描每条记录时产生的,所以不能使用“大于”
符号,只能使用“小于”或“小于等于” ,只用“等于”也不行。

rownum分页查询且排序

select * from
(select rownum r,t.* from
(select * from T_ACCOUNT order by usenum desc) t
where rownum<=20 )
where r>10

对结果先排序,再根据查询结果表进行分页。原因分析 ROWNUM 伪列的产生是在表记录扫描
是产生的,而排序是后进行的,排序时 R 已经产生了,所以排序后 R 是乱的。

row_number() over分页查询且排序

select * from
(select row_number() over(order by usenum desc )
rownumber,usenum from T_ACCOUNT)
where rownumber>10 

分页查询minus

select rownum,t.* from T_ACCOUNT t where rownum<=20
minus
select rownum,t.* from T_ACCOUNT t where rownum<=10

字符函数

ASCII 返回对应字符的十进制值
CHR 给出十进制返回字符
CONCAT 拼接两个字符串,与 || 相同
INITCAT 将字符串的第一个字母变为大写
INSTR 找出某个字符串的位置
INSTRB 找出某个字符串的位置和字节数
LENGTH 以字符给出字符串的长度
LENGTHB 以字节给出字符串的长度
LOWER 将字符串转换成小写
LPAD 使用指定的字符在字符的左边填充
LTRIM 在左边裁剪掉指定的字符
RPAD 使用指定的字符在字符的右边填充
RTRIM 在右边裁剪掉指定的字符
REPLACE 执行字符串搜索和替换
SUBSTR 取字符串的子串
SUBSTRB 取字符串的子串(以字节)
SOUNDEX 返回一个同音字符串

字符串长度length

select length('ABCD') from dual;

字符串截取substr

select substr('ABCD',2,2) from dual; -- BC

从第几位开始截取,截取多少位

字符串拼接concat ||

select concat('ABC','D') from dual;
select 'ABC'||'D' from dual;

数值函数

ABS(value) 绝对值
CEIL(value) 大于或等于 value 的最小整数
COS(value) 余弦
COSH(value) 反余弦
EXP(value) e 的 value 次幂
FLOOR(value) 小于或等于 value 的最大整数
LN(value) value 的自然对数
LOG(value) value 的以 10 为底的对数
MOD(value,divisor) 求模
POWER(value,exponent) value 的 exponent 次幂
ROUND(value,precision) 按 precision 精度 4 舍 5 入
SIGN(value) value 为正返回 1;为负返回-1;为 0 返回 0. SIN(value) 余弦
SINH(value) 反余弦
SQRT(value) value 的平方根
TAN(value) 正切
TANH(value) 反正切
TRUNC(value,按 precision) 按照 precision 截取 value
VSIZE(value) 返回 value 在 ORACLE 的存储空间大小

四舍五入

select round(100.567) from d
select round(100.567,2) from dual

截取函数

select trunc(100.567) from dual
select trunc(100.567,2) from dual

求余函数 (取模)

select mod(10,3) from dual

日期函数

ADD_MONTHS 在日期 date 上增加 count 个月
GREATEST(date1,date2,. . .) 从日期列表中选出最晚的日期
LAST_DAY( date ) 返回日期 date 所在月的最后一天
LEAST( date1, date2, . . .) 从日期列表中选出最早的日期
MONTHS_BETWEEN(date2, date1) 给出 Date2 - date1 的月数(可以是小数)
NEXT_DAY( date,’day’) 给出日期 date 之后下一天的日期,这里的 day 为星期,
如: MONDAY,Tuesday 等。
NEW_TIME(date,’this’,’other’) 给出在 this 时区=Other 时区的日期和时间
ROUND(date,’format’) 未指定 format 时,如果日期中的时间在中午之前,则
将日期中的时间截断为 12 A.M.(午夜,一天的开始),否则进到第二天。时间截断为 12 A.M.(午夜,一天的开始), 否则进到第二天。
TRUNC(date,’format’) 未指定 format 时,将日期截为 12 A.M.( 午夜,一天的开始

获取当前时间

select sysdate from dual

增加月份

select add_months(sysdate,2) from dual

所在月最后一天

select last_day(sysdate) from dual

日期截取到零时

select TRUNC(sysdate) from dual

日期截取为1月

select TRUNC(sysdate,'yyyy') from dual

日期截取到零秒

select TRUNC(sysdate,'mm') from dual

类型转换函数

CHARTOROWID 将 字符转换到 rowid 类型
CONVERT 转换一个字符节到另外一个字符节
HEXTORAW 转换十六进制到 raw 类
RAWTOHEX 转换 raw 到十六进制
ROWIDTOCHAR 转换 ROWID 到字符
TO_CHAR 转换日期格式到字符串
TO_DATE 按照指定的格式将字符串转换到日期型
TO_MULTIBYTE 把单字节字符转换到多字节
TO_NUMBER 将数字字串转换到数字
TO_SINGLE_BYTE 转换多字节到单字节

数字转字符串 to_char

select TO_CHAR(1024) from dual

日期转字符串 to_char

select TO_CHAR(sysdate,'yyyy-mm-dd') from dual
select TO_CHAR(sysdate,'yyyy-mm-dd hh:mi:ss') from dual

字符串转日期

select TO_DATE('2017-01-01','yyyy-mm-dd') from dual

指定值转换函数nvl

select NVL(NULL,0) from dual
select PRICE,MINNUM,NVL(MAXNUM,9999999)
from T_PRICETABLE where OWNERTYPEID=1

null值判断转换函数

select PRICE,MINNUM,NVL2(MAXNUM,to_char(MAXNUM) , '不限')
from T_PRICETABLE where OWNERTYPEID=1

条件取值 decode

select name,decode( ownertypeid,1,' 居 民 ',2,' 行 政 事 业 单 位',3,'商业') as 类型 from T_OWNERS

条件取值 case when then

select name ,(case ownertypeid
when 1 then '居民'
when 2 then '行政事业单位'
when 3 then '商业'
else '其它'
end
) from T_OWNERS
select name,(case
when ownertypeid= 1 then '居民'
when ownertypeid= 2 then '行政事业'
when ownertypeid= 3 then '商业'
end )

行列转换

select (select name from T_AREA where id= areaid ) 区域,
sum( case when month='01' then money else 0 end) 一月,
sum( case when month='02' then money else 0 end) 二月,
sum( case when month='03' then money else 0 end) 三月,
sum( case when month='04' then money else 0 end) 四月,
sum( case when month='05' then money else 0 end) 五月,
sum( case when month='06' then money else 0 end) 六月,
sum( case when month='07' then money else 0 end) 七月,
sum( case when month='08' then money else 0 end) 八月,
sum( case when month='09' then money else 0 end) 九月,
sum( case when month='10' then money else 0 end) 十月,
sum( case when month='11' then money else 0 end) 十一月,
sum( case when month='12' then money else 0 end) 十二月
from T_ACCOUNT where year='2012' group by areaid
select (select name from T_AREA where id= areaid ) 区域,
sum( case when month>='01' and month<='03' then money else
0 end) 第一季度,
sum( case when month>='04' and month<='06' then money else
0 end) 第二季度,
sum( case when month>='07' and month<='09' then money else
0 end) 第三季度,
sum( case when month>='10' and month<='12' then money else
0 end) 第四季度
from T_ACCOUNT where year='2012' group by areaid

分析函数

相同的值排名相同,排名跳跃 rank() over

select rank() over(order by usenum desc ),usenum from T_ACCOUNT

相同的值排名相同,排名连续 DENSE_RANK

select dense_rank() over(order by usenum desc ),usenum from T_ACCOUNT

ROW_NUMBER 返回连续的排名,无论值是否相等

select row_number() over(order by usenum desc ),usenum from T_ACCOUNT

row_number() over实现分页查询

select * from
(select row_number() over(order by usenum desc )
rownumber,usenum from T_ACCOUNT)
where rownumber>10 

集合运算

允许元素重复的集合相加 union all

select * from t_owners where id<=7
union all
select * from t_owners where id>=5

不允许元素重复的合集相加 union

select * from t_owners where id<=7
union
select * from t_owners where id>=5

求集合相交的元素intersect

select * from t_owners where id<=7
intersect
select * from t_owners where id>=5

求一个集合减去相交部分 minus

select * from t_owners where id<=7
minus
select * from t_owners where id>=5

分页查询minus

select rownum,t.* from T_ACCOUNT t where rownum<=20
minus
select rownum,t.* from T_ACCOUNT t where rownum<=10

视图

OR REPLACE :若所创建的试图已经存在,ORACLE 自动重建该视图;
FORCE :不管基表是否存在 ORACLE 都会自动创建该视图;
subquery :一条完整的 SELECT 语句,可以在该语句中定义别名;
WITH CHECK OPTION :插入或修改的数据行必须满足视图定义的约束;
WITH READ ONLY :该视图上不能进行任何 DML 操作。

创建或修改视图

create or replace view view_address2 as
select * from T_ADDRESS where areaid=2

带约束的视图with check option

只能修改视图中显示的数值

create or replace view view_address2 as
select * from T_ADDRESS where areaid=2
with check option

http://www.ppmy.cn/embedded/23846.html

相关文章

Mysql如何查询不需要Group by的字段

问题背景 在实际业务场景中&#xff0c;我们有时会对某些字段进行分组统计&#xff0c;并且需要查出多余字段展示。比方说根据机构id统计每个机构下有多少部门&#xff0c;字段展示机构名称、部门数量、机构id。 这时会提示查询的字段必须得在group by子句中&#xff0c;否则无…

day17-day20_项目实战项目部署

万信金融 项目部署 目标&#xff1a; 理解DevOps概念 能够使用Docker Compose部署项目 理解持续集成的作用 会使用Jenkins进行持续集成 1 DevOps介绍 1.1 什么是DevOps DevOps是Development和Operations两个词的缩写&#xff0c;引用百度百科的定义&#xff1a; DevOps…

Centos编译安装python3.9

Centos编译安装python3.9 2024年4月24日, 当前Linux环境只能下载tar.gz包, 然后编译安装, 不能直接使用yum快速安装 准备相关依赖 yum -y install epel-release yum -y update 安装开发者工具 yum groupinstall "Development Tools" -y yum install openssl-de…

【论文速读】|大语言模型(LLM)智能体可以自主利用1-day漏洞

本次分享论文&#xff1a; LLM Agents can Autonomously Exploit One-day Vulnerabilities 基本信息 原文作者&#xff1a;Richard Fang, Rohan Bindu, Akul Gupta, Daniel Kang 作者单位&#xff1a;无详细信息提供 关键词&#xff1a;大语言模型, 网络安全, 1-day漏洞, …

全志ARM-蜂鸣器

sh操作准备&#xff1a; 1.使Tab键的缩进和批量对齐为4格 在/etc/vim/vimrc 中添加一项配置 set tabstop 4; 也可以再加一行 set nu显示代码的行数 vim的设置&#xff0c;修改/etc/vim/vimrc文件&#xff0c;需要用超级用户权限 /etc/vim/vimrc set shiftwidth4 设置批量…

Vuforia AR篇(四)— AR虚拟按钮

目录 前言一、创建虚拟按钮二、创建脚本三、效果 前言 在当今互联网和移动设备普及的背景下&#xff0c;**增强现实&#xff08;AR&#xff09;**技术正迅速成为连接现实世界与数字信息的重要桥梁。AR虚拟按钮作为这一技术的创新应用&#xff0c;不仅提供了一种全新的用户交互…

Pointnet和Pointnet++提取点云特征的思想

文章目录 PointNet提取特征的思想PointNet的改进 PointNet提取特征的思想 首先需要知道的是点云数据主要携带的信息&#xff0c;它所携带的信息通常是它在3D空间中的坐标和对应的点所携带的法向量。这种信息有别于图像所携带的信息。可以做这样的假设&#xff0c;如果将图像某…

AIGC:开启内容创作新纪元,我们如何看待它的影响与前景?

AIGC的概念 AIGC&#xff08;Artificial Intelligence Generated Content&#xff09;的概念主要是指人工智能生成内容。 这是一种新的人工智能技术&#xff0c;它利用人工智能模型&#xff0c;根据给定的主题、关键词、格式、风格等条件&#xff0c;自动生成各种类型的文本、图…