Oracle简单操作,语法,函数,方法

本文详细介绍SQL的基本操作,包括数据增删改查、表和视图的管理、索引的创建与删除、数据排序与筛选、函数应用及分组操作等核心内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单操作语句

删除表中的数据
delete from 表名 where 条件
--不加条件就是把数据全部删除
删除表
delete table 表名
删除视图
drop view 视图名
创建视图
create view 视图名 as select statement
重命名表
alter table 表名 rename to 新表名
eg:alter table tablename rename to newtablename
增加字段
alter table 表名 add(字段名 字段类型 默认值 是否为空);
例:alter table tablename add (ID int);
eg:alter table tablename add (ID varchar2(30) default '空' not null);
修改字段
alter table 表名 modify (字段名 字段类型 默认值 是否为空);
 eg:alter table tablename modify (ID number(4));
创建索引
create index 索引名 on 表名(字段列表)
删除索引
drop index 索引名
插入数据
insert into 表名 values(所有列的值);
insert into test values(1,'zhangsan',20);
insert into 表名(列名..) values(对应的值);
insert into test(id,name) values(2,'lisi');
commit;提交数据
rollback;回滚数据

简单方法

去重
select distinct 列名 from 表名;
’ '和" "的区别 ''代表字符串 ""原样输出
伪列 表达式|字符串都是伪列:不是表中真实存在的字段
|| 字符串拼接
select 'a-'||'-b' from 表名;
select 'a-'||列名 from 表名;
处理null值 nvl(字段,值2) 如果字段值为null,就用值2代替,如果字段值不为null则不改变
select  nvl(列名,2) from 表名;
and 和: or 或: not 不是: between 值1 and 值2 用于取区间
select * from 表名 where 列名(数据)  between 1500 and 2500;
like 模糊查询, %任意个任意字符 _任意一个字符
--姓名以A开头的所有员工信息
select * from emp where ename like 'A%';

--使用模糊匹配做精确匹配
select * from emp where ename like 'JONES';

--姓名中第二个字符为A的所有员工姓名
select ename from emp where ename like '_A%';

--姓名以H结尾的所有员工信息
select ename from emp where ename like '%H';

--查找名字中带有%的用户
select * from emp where ename like '%A%';
select * from emp where ename like '%C%%' escape('C'); --任意指定转义字符,需要使用escape() 中说明
in () 匹配小括号中结果集的任意一个数据,无法做区间判断
--查询薪资为 1500 2000 2500 5000的员工信息
select * from emp where sal=1500 or sal = 2000 or sal=2500 or sal=5000;
select * from emp where sal in (1500,2000,2500,5000);
exists 存在即保留,存在即合法
select * from emp where exists (select * from dept where dname='SALES');
select *
  from emp
 where exists (select deptno, dname
          from dept
         where dname in ('SALES', 'ACCOUNTING'));
排序 在语句最后部位 order by 排序字段 desc(降序)或 asc(升序,默认)
--select * from 表名 where 行过滤条件 order by 排序字段;  --默认升序
--运行阶段  from--where--select--order by
select * from emp order by sal asc;  
nulls first(最前)/nulls last(最后)可以帮助我们在处理含有空值的排序排列中,将空值字段记录放到最前或最后显示,帮助我们得到期望的结果。
select * from emp where deptno=30 order by comm desc nulls first;

基本函数

日期函数
--当前日期
select sysdate from dual; --db数据库时间
select current_date from dual; --java应用服务器时间
add_months(d,x)返回加上X月后的日期d的值
--add_months(d,x)
select  hiredate 入职日期,add_months(hiredate,3) 转正日期 from emp;
select  hiredate 入职日期,add_months(hiredate,-1) 转正日期 from emp;
LAST_DAY(d) 返回的所在月份的最后一天
--当前月份最后一个的日期  
select last_day(sysdate) from dual;
months_between(date1,date2) 返回date1和date2之间月的数
select months_between(sysdate,hiredate) from emp; 
–next_day(sysdate,‘星期一’) 返回下周周一的数据
select next_day(sysdate,'星期一') from dual;
–to_date(c,m)  字符串以指定格式转换为日期
select to_date('2018-05-15 2:38:33','yyyy-mm-dd hh12:mi:ss') from dual;
select to_date('2018年05月15日 2:38:33','yyyy"年"mm"月"dd"日" hh12:mi:ss') from dual;
–to_char(d,m)  日期以指定格式转换为字符串
select to_char(sysdate,'yyyy"年"mm"月"dd"日" hh12:mi:ss') from dual;
组函数 count() 计数 sum()求和 max()最大 min() 最小 avg()平均值
--计算所有员工的个数
select count(empno) from emp;
select count(*) from emp;
select count(1) from emp;

--求一个公司这个月的薪资开销
select sum(sal) from emp;

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

--求公司最低薪资
select min(sal),max(sal),ename from emp;
select min(sal) from emp;

--求30部门的平均薪资
select avg(sal) from emp where deptno=30;

分组操作

分组 group by 分组字段
–select *|字段… from 表名 where 行过滤条件 group by 分组字段 having 组过滤信息 order by 排序字段;
–执行流程:from–where–group by–having–select–order by
decode(字段,字段值1,值2,字段值2,值3…,默认值)根据某个字段进行判断
select deptno,decode(deptno,10,'十',20,'二十',30,'三十','其他') from dept;

--给20部门的员工涨薪10%,打印员工信息
select ename,deptno,sal,decode(deptno,20,sal*1.1,sal) from emp;

rowid,rownum

rowid 相当于对象的地址,在数据插入到表中时候已经存在,rowid不是地址,根据地址转换的
--项目数据值保留唯一的,删除重复的
--查询到要保留的数据
select deptno,dname,rowid from dept;
rownum 结果集的序号 从1开始
--如果按照主键进行排序,先排序后确定rownum
--*如果根据非主键进行排序,先确定rownum再排序*
select  deptno,dname,rownum from dept order by deptno desc;
select empno,ename,sal,rownum from emp order by sal desc;

--一页显示2 n条数据  第3 i页     这一页的起始数据的rownum=(i-1)*n+1     结束的rownum=i*n

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值