Oracle学习笔记01

本文介绍了Oracle学习的初步步骤,包括声明、程序结构、基本SQL操作、null处理、别名、distinct、聚合函数、日期和时间处理、字符串操作、连接符、Like查询、排序与函数应用。适合PL/SQL初学者了解基础语法和实践技巧。
摘要由CSDN通过智能技术生成

Oracle学习笔记01

declare
--说明部分
begin
--程序
	dbms_output.put_line('hello plsql');
end;

–当前用户

show user

–当前用户下的表

select * from tab;

–员工表的结构

desc emp;

–查询所有员工信息

select * from emp;

–设置行宽

set linesize 120;

–通过列名查询

select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp;

–sql的优化原则:尽量使用列名

–查询员工信息:员工号、姓名、月薪

select empno,ename,sal from emp;

–查询员工信息:员工号、姓名、月薪、年薪

select empno,ename,sal,12*sal from emp;

–查询员工信息:员工号、姓名、月薪、年薪、奖金、年收入

select empno,ename,sal,12*sal,comm,(12*sal+comm) from emp
–sql中的null

1.包含null的表达式都为null

2.null永远!=null

3.如果集合中含有null,不能使用not in 但可以使用in

4.null的排序问题,null值最大

5.组函数会自动滤空

–nvl(a,b)滤空函数

​ --nvl2(arg1,arg2,arg3)当arg1不为null时,则函数返回arg2,arg1为null则返回arg3

​ --查看每个人绩效情况

select ename,sal,nvl2(comm,'没有绩效','有绩效') from emp;

–null永远!=null

–查询奖金为null的员工

--错误写法
select * from emp where comm=null;
--未选定行

--正确写法
select * from emp where comm is null;
–加别名
select empno as "员工号",ename "姓名",sal 月薪 from emp;
–distinct 去掉重复记录
select distinct deptno from emp;
select distinct job from emp;
–distinct作用于后面的所有的列,只要组合起来不重复就行了
select distinct deptno,job from emp;
–concat函数
select concat('Hello','Oracle') from emp;

–dual是Oracle中非常特殊的一张表,叫伪表

select concat('Hello','Oracle') from dual;
–连接符||
select "Hello"||"world" from dual;
--查询员工的信息:***的薪水是***
select ename||'的薪水是'||sal from emp;

–查询10号部门的员工

select * from emp where deptno=10;
–字符串严格区分大小写

–查询名叫KING的员工

--错误写法
select * from emp where ename='King';
--未选定行
--正确写法
select * from emp where ename='KING';

–Oracle严格区分大小写,MySQL不区分

–日期格式敏感

–查询入职日期是17-11月-81的员工

select * from emp where hiredate='17-11月-81'

–修改日期格式

--查看
select * from v$nls_parameters;
--修改
alter session set NLS_DATE_FORMAT='yyyy-mm-dd';
–between…and

–查询薪水1000-2000之间的员工

select *
from emp
where sal between 1000 and 2000;
–in在集合中

–查询10和20号部门的员工

select *
from emp
where deptno in (10,20);

–查询不是10和20号部门的员工

select *
from emp
where deptno not in (10,20);

–null值,如果集合中含有null,不能使用not in 但可以使用in

select *
from emp
where deptno not in (10,20,null);
--未选定行
–like模糊查询

–查询名字以S开头的员工

select *
from emp
where ename like 'S%';

–查询名字是四个字的员工

select *
from emp
where ename like'____';
--四个下划线

–查询名字中含有下划线的员工

--错误写法
select *
from emp 
where ename like '%_%';
--正确写法
select *
from emp
where ename like '%\_%' escape '\';
–order by

–查询员工信息,按月薪排序

select * from emp order by sal;

–order by 后面+列,表达式,别名,序号

select empno,ename,sal,sal*12
from emp
order by sal*12 desc;--降序

select empno,ename,sal,sal*12 年薪
from emp
order by 4 desc;--按年薪降序

–多个列也可以排序

–order by 作用于后面所有的列,先按照第一个列排序,再后面的列排序

–desc只作用于离他最近的列

select * from emp order by deptno,sal desc;

–查询员工信息,按照奖金排序

–null值最大

select * from emp order by comm desc;
--解决null值最大
select * from emp order by nvl(comm,0) desc;
select * from emp order by comm desc nulls last;
–字符函数

–upper转化为大写,lower转化为小写,initcap将字符串首字母转化为大写,其他为小写

select lower('Hello Oracle'), upper('Hello Oracle'),initcap('hello world') from dual;
–substr

–substr(a,b)从a中,第b位开始取

select substr('Hello Oracle',4) from dual;
--lo Oracle

–substr(a,b,c)从a中,第b位开始取,取c位

select substr('Hello World',4,3) from dual
--lo 
–length字符数 lengthb字节数
select length('成都') 字符,lengthb('成都') 字节 from dual;
字符		字节
2		4
–instr(a,b)

–在a中,查找b的位置

select instr('hello oracle','||') from dual;
–replace
select replace('Hello world','l','*') from dual;
--用*代替l
–数值函数 round trunc

–round四舍五入

select round(45.926,2),round(45.926,1),round(45.926,0),round(45.926,-1),round(45.926,-2) from dual

在这里插入图片描述
–trunc截取

select trunc(45.926,2),trunc(45.926,1),trunc(45.926,0),trunc(45.926,-1),trunc(45.926,-2) from dual;

在这里插入图片描述

–日期函数

–当前时间

select sysdate from dual;
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;

–昨天 今天 明天

select (sysdate-1),sysdate,sysdate+1 from dual;

–计算员工的工龄:天 星期 月 年

select ename,hiredate,(sysdate-hiredate),(sysdate-hiredate/7),(sysdate-hiredate)/30,(sysdate-hiredate)/365 from emp;

–months_between

select ename,hiredate,(sysdate-hiredate)/30,months_between(sysdate,hiredate) from emp;
--两个结果有出入,因为有的月份不等于30天

–5个月后

select add_months(sysdate,5) from dual;

–这个月最后一天last_day

select last_day(sysdate) from dual;

–next_day

–下一个星期三

select next_day(sysdate,'星期三') from dual;
–转换函数to_char

–2022-04-26 15:43:30今天是星期三

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss"今天是"day') from dual;

–查询员工的薪水:两位小数,千位符,本地货币代码

select to_char(sal,'L9,999.99') from emp;
–case when , decode

–查询员工涨后工资

–总裁1000,经理800,其他400

--写法一
select ename,job,sal 涨前工资,
case job when 'PRESIDENT' then sal+1000
when 'MANAGER' then sal+800
else sal+400
end 涨后工资
from emp;
--写法二
select ename,job,sal 涨前工资,
decode(job,'PRESIDENT', sal+1000,
      'MANAGER',sal+800,
      sal+400) 涨后工资
from emp;
–多行函数

–工资总额sum

select sum(sal) from emp;

–人数count

select count(*) from emp;

–平均工资avg

select sum(sal)/count(*),avg(sal) from emp;

–平均奖金

select sum(comm)/count(*),sum(comm)/count(comm),avg(comm) from emp;

在这里插入图片描述

select count(*),count(comm) from emp;

在这里插入图片描述

select count(*),count(nvl(comm,0)) from emp;

在这里插入图片描述
–组函数会自动滤空

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值