Skip to content

Commit 6b1c34c

Browse files
author
msbbigdata
committed
uplaod
1 parent 6ff5eaf commit 6b1c34c

File tree

6 files changed

+490
-0
lines changed

6 files changed

+490
-0
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@ ppt //存放上课使用的ppt文件,已转换成对应的pdf,避免不同
7171
28 jdk新特性-stream api及自定义注解 2019/10/19 20:00-22:00
7272
29 javase复习 2019/10/20 15:00-17:00
7373
30 oracle安装介绍 2019/10/26 15:30-17:30
74+
31 oracleSQL 2019/10/26 20:00-22:00
75+
32 oracle函数和多表连接 2019/10/27 15:30-17:30
7476
......持续更新
7577
```
7678

database.zip

-3.3 MB
Binary file not shown.

database/code/02函数.sql

Lines changed: 183 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
select sum(sal) from emp;
1414
--查看表中有多少条记录
1515
select deptno,count(*) from emp group by deptno where count(*) >3;
16+
1617
--字符函数
1718
--concat:表示字符串的连接 等同于||
1819
select concat('my name is ', ename) from emp;
@@ -53,4 +54,186 @@ select mod(-10,4) from dual;
5354
select ceil(12.12) from dual;
5455
--向下取整
5556
select floor(13.99) from dual;
57+
--取绝对值
58+
select abs(-100) from dual;
59+
--获取正负值
60+
select sign(-100) from dual;
61+
--x的y次幂
62+
select power(2,3) from dual;
63+
64+
--日期函数
65+
select sysdate from dual;
66+
select current_date from dual;
67+
--add_months,添加指定的月份
68+
select add_months(hiredate,2),hiredate from emp;
69+
--返回输入日期所在月份的最后一天
70+
select last_day(sysdate) from dual;
71+
--两个日期相间隔的月份
72+
select months_between(sysdate,hiredate) from emp;
73+
--返回四舍五入的第一天
74+
select sysdate 当时日期,
75+
round(sysdate) 最近0点日期,
76+
round(sysdate,'day') 最近星期日,
77+
round(sysdate,'month') 最近月初,
78+
round(sysdate,'q') 最近季初日期,
79+
round(sysdate,'year') 最近年初日期 from dual;
80+
--返回下周的星期几
81+
select next_day(sysdate,'星期一') from dual;
82+
--提取日期中的时间
83+
select
84+
extract(hour from timestamp '2001-2-16 2:38:40 ' ) 小时,
85+
extract(minute from timestamp '2001-2-16 2:38:40 ' ) 分钟,
86+
extract(second from timestamp '2001-2-16 2:38:40 ' ) 秒,
87+
extract(DAY from timestamp '2001-2-16 2:38:40 ' ) 日,
88+
extract(MONTH from timestamp '2001-2-16 2:38:40 ' ) 月,
89+
extract(YEAR from timestamp '2001-2-16 2:38:40 ' ) 年
90+
from dual;
91+
--返回日期的时间戳
92+
select localtimestamp from dual;
93+
select current_date from dual;
94+
select current_timestamp from dual;
95+
--给指定的时间单位增加数值
96+
select
97+
trunc(sysdate)+(interval '1' second), --加1秒(1/24/60/60)
98+
trunc(sysdate)+(interval '1' minute), --加1分钟(1/24/60)
99+
trunc(sysdate)+(interval '1' hour), --加1小时(1/24)
100+
trunc(sysdate)+(INTERVAL '1' DAY), --加1天(1)
101+
trunc(sysdate)+(INTERVAL '1' MONTH), --加1月
102+
trunc(sysdate)+(INTERVAL '1' YEAR), --加1年
103+
trunc(sysdate)+(interval '01:02:03' hour to second), --加指定小时到秒
104+
trunc(sysdate)+(interval '01:02' minute to second), --加指定分钟到秒
105+
trunc(sysdate)+(interval '01:02' hour to minute), --加指定小时到分钟
106+
trunc(sysdate)+(interval '2 01:02' day to minute) --加指定天数到分钟
107+
from dual;
108+
109+
110+
/*
111+
112+
转换函数
113+
在oracle中存在数值的隐式转换和显式转换
114+
隐式转换指的是字符串可以转换为数值或者日期
115+
显式转换:
116+
to_char: 当由数值或者日期转成字符串的时候,必须要规定格式
117+
*/
118+
select '999'+10 from dual;
119+
--date :to_char
120+
select to_char(sysdate,'YYYY-MI-SS HH24:MI:SS') from dual;
121+
-- number : to_char
122+
select to_char(123.456789,'9999') from dual;
123+
select to_char(123.456789,'0000.00') from dual;
124+
select to_char(123.456789,'$0000.00') from dual;
125+
select to_char(123.456789,'L0000.00') from dual;
126+
select to_char(123456789,'999,999,999,999') from dual;
127+
--to_date:转换之后都是固定的格式
128+
select to_date('2019/10/10 10:10:10','YYYY-MM-DD HH24:MI:SS') from dual;
129+
--to_number:转成数字
130+
select to_number('123,456,789','999,999,999') from dual;
131+
132+
133+
--显示没有上级管理的公司首脑
134+
select ename,nvl(to_char(mgr),'boss') from emp where mgr is null;
135+
--显示员工雇佣期满6个月后下一个星期五的日期
136+
select hiredate,next_day(add_months(hiredate,6),'星期五') from emp;
137+
138+
--条件函数
139+
--decode,case when
140+
141+
--给不同部门的人员涨薪,10部门涨10%,20部门涨20%,30部门涨30%
142+
select ename,sal,deptno,decode(deptno,10,sal*1.1,20,sal*1.2,30,sal*1.3) from emp;
143+
select ename,
144+
sal,
145+
deptno,
146+
case deptno
147+
when 10 then
148+
sal * 1.1
149+
when 20 then
150+
sal * 1.2
151+
when 30 then
152+
sal * 1.3
153+
end
154+
from emp;
155+
------------------------------
156+
157+
create table test(
158+
id number(10) primary key,
159+
type number(10) ,
160+
t_id number(10),
161+
value varchar2(5)
162+
);
163+
insert into test values(100,1,1,'张三');
164+
insert into test values(200,2,1,'');
165+
insert into test values(300,3,1,'50');
166+
167+
insert into test values(101,1,2,'刘二');
168+
insert into test values(201,2,2,'');
169+
insert into test values(301,3,2,'30');
170+
171+
insert into test values(102,1,3,'刘三');
172+
insert into test values(202,2,3,'');
173+
insert into test values(302,3,3,'10');
174+
175+
select * from test;
176+
/*
177+
需求
178+
将表的显示转换为
179+
姓名 性别 年龄
180+
--------- -------- ----
181+
张三 男 50
182+
*/
183+
select decode(type, 1, value) 姓名,
184+
decode(type, 2, value) 性别,
185+
decode(type, 3, value) 年龄
186+
from test;
187+
select min(decode(type, 1, value)) 姓名,
188+
min(decode(type, 2, value)) 性别,
189+
min(decode(type, 3, value)) 年龄
190+
from test group by t_id;
191+
192+
/*
193+
组函数,一般情况下,组函数都要和groupby组合使用
194+
组函数一般用于选择列表或者having条件判断
195+
常用的组函数有5个
196+
avg() 平均值,只用于数值类型的数据
197+
min() 最小值,适用于任何类型
198+
max() 最大值,适用于任何类型
199+
count() 记录数,处理的时候会跳过空值而处理非空值
200+
count一般用来获取表中的记录条数,获取条数的时候可以使用*或者某一个具体的列
201+
甚至可以使用纯数字来代替,但是从运行效率的角度考虑,建议使用数字或者某一个具体的列
202+
而不要使用*
203+
204+
sum() 求和,只适合数值类型的数据
205+
*/
206+
select avg(sal) from emp;
207+
select min(sal) from emp;
208+
select max(sal) from emp;
209+
select count(sal) from emp;
210+
select sum(sal) from emp;
211+
--group by,按照某些相同的值去进行分组操作
212+
--group进行分组操作的时候,可以指定一个列或者多个列,但是当使用了groupby 之后,
213+
--选择列表中只能包含组函数的值或者group by 的普通字段
214+
--求每个部门的平均薪水
215+
select avg(sal) from emp group by deptno;
216+
--求平均新书大于2000的部门
217+
select avg(sal),deptno from emp where sal is not null group by deptno having avg(sal) >2000 order by avg(sal);
218+
219+
select count(10000) from emp;
220+
--部门下雇员的工资>2000 人数
221+
select deptno,count(1) from emp where sal>2000 group by deptno
222+
--部门薪水最高
223+
select deptno,max(sal) from emp group by deptno;
224+
--部门里面 工龄最小和最大的人找出来,知道姓名
225+
select deptno,min(hiredate),max(hiredate) from emp group by deptno;
226+
select ename, deptno
227+
from emp e
228+
where hiredate in (select min(hiredate) from emp group by deptno)
229+
or hiredate in (select max(hiredate) from emp group by deptno)
230+
select * from emp
56231

232+
select mm2.deptno, e1.ename, e1.hiredate
233+
from emp e1,
234+
(select min(e.hiredate) mind, max(e.hiredate) maxd, e.deptno
235+
from emp e
236+
group by e.deptno) mm2
237+
where (e1.hiredate = mm2.mind
238+
or e1.hiredate = mm2.maxd)
239+
and e1.deptno = mm2.deptno;

0 commit comments

Comments
 (0)