heima Oracle day2
生活随笔
收集整理的這篇文章主要介紹了
heima Oracle day2
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
--單行函數:作用于一行,返回一個值。
--多行函數:作用于多行,返回一個值。select upper('yes') from dual;
select lower('YES') from dual;-- 數值函數
select round(26.16,1) from dual;
select round(26.16,-1) from dual; -- 四舍五入,后面的參數表示保留的位數
select round(56.16,-2) from dual;select trunc(56.16,-1) from dual; --直接遞取,不在看后而位數的數字是否大于5.select mod(10,3) from dual; --求余數--查詢empe中所有員工入職距離現在幾天。
select sysdate-e.hiredate from emp e;-- 算出明天此刻
select sysdate+1 from dual;-- 查可出emp表中所有員工入職距離現在幾月。
select months_between (sysdate,e.hiredate) from emp e;-- 查可出emp表中所有員工入職距離現在幾年。
select months_between (sysdate,e.hiredate)/12 from emp e;-- 查可出emp表中所有員工入職距離現在幾周。
select round((sysdate-e.hiredate)/7) from emp e;--- 轉換函數
-- 日期轉字符串
select to_char(sysdate,'fm yyyy-mm-dd hh:mi:ss') from dual; -- fm 去掉前面的0
select to_char(sysdate,'fm yyyy-mm-dd hh24:mi:ss') from dual;
-- 字符串轉日期
select to_date(' 2019-8-18 9:25:1','fm yyyy-mm-dd hh24:mi:ss') from dual;---通用函數
----算出emg表中所有員工的年薪
--—-獎金里面有null值,如果null值和任意數字做算術運算,結果都是null
select e.sal*12+nvl(e.comm,0) from emp e;---條件表達式
---條件表達式的通用寫法,mysql 和oracle通用
---給emp表中員工起中文名select e.ename,case e.ename -- 等值判斷when 'SMITH' then '曹賊'when 'ALLEN' then '翼德'when 'WARD' then '諸葛'--else '無名' --條件以外的將為空end
from emp e;---判斷emp表中員工工資,如果高于3000顯示高收入,如某高于1500低于3000顯示中收入
-- 其余顯示低收入select e.sal,case -- 范圍判斷when e.sal >3000 then '高收入'when e.sal>1500 then '中等收入'else '低收入'end
from emp e;---oracle中除,起別名,都用單引號。
----oracle專用條件表達式select e.ename,decode(e.ename, -- 等值判斷'SMITH', '曹賊','ALLEN','翼德','WARD','諸葛','無名') "中文名" --列名可以是 “字符” 或 字符
from emp e;--- 建議使用通用的,可移植性強---------------------------------------------------------多行函數【聚合函數】:作用于多行,返回一個值。select count(*) from emp;
select count(1) from emp; -- 推薦select sum(sal) from emp;
select max(sal) from emp;
select min(sal) from emp;
select avg(sal) from emp; --- 多條同時執行加分號--分組查詢
--查詢出每個部門的平均工資
---分組查詢中,出現在group by后面的原始列,才能出現在select后面
---沒有出現在group by后面的列,想在select后面,必須加上聚合函數。
---聚合函數有一個特性,可以把多行記錄變成一個值。select e.deptno,avg(e.sal) ---,e.ename 出錯
from emp e
group by e.deptno ;---查詢出平均工資高于2000的部門信息select e.deptno,avg(e.sal) asal
from emp e
group by e.deptno
having avg(e.sal)>2000; --asal >2000--- 所有條件部不能使用別名來判斷。
--比如下面的條件語句也不能使用別名當條件
select ename,sal s from emp where sal>1500;-- 查詢出每個部門工資高于800的員工的平均工資select e.deptno,avg(e.sal)
from emp e
where e.sal >800
group by e.deptno ;-- where是過濾分組前的數據,having是過濾分組后的數據。
-- 表現形式:where必須在group by之前,having是在group by之后。---查詢出每個部門工資高于800的員工的平均工資
---然后再查詢出平均工資高于2000的部門select e.deptno,avg(e.sal) asal
from emp e
where e.sal >800
group by e.deptno
having avg(e.sal)>2000;--------------------------------------------------- 多表查詢中的一些概念
-- 笛卡爾積select *
from emp e,dept d;--- 等值連接 (推薦)
select *
from emp e,dept d
where e.deptno=d.deptno;-- 內連接 select *
from emp e inner join dept d
on e.deptno = d.deptno;-- 查詢出所有部門,以及部門下的員工信息。【外連接】--left join 顯示的是左側全部數據
select *
from emp e right join dept d
on e.deptno = d.deptno;--- oracle中專用外連接select *
from emp e,dept d
where e.deptno(+) = d.deptno; --- 15 條,顯示右邊所有數據-- 查詢出員工姓名,員工領導姓名 員工和領導在同一張表里面
-- 自連接: 自連接其實就起站在不同的角度把一張表看成多張表。
select e1.ename , e2.ename
from emp e1,emp e2
where e1.mgr=e2.empno;--- 查詢出員工姓名,員工部門名稱,員工領導姓名,員工領導部門名稱select e1.ename,d1.dname , e2.ename,d2.dname
from emp e1,emp e2,dept d1,dept d2 ---
where e1.mgr=e2.empno
and e1.deptno=d1.deptno
and e2.deptno=d2.deptno;-------------------------------------- 子查詢
--1.子查詢返間一個值
-- 查詢出工資和SCOTT一樣的員工信息select * from emp where sal in -- 保險起見寫 in,不寫 =
(select sal from emp where ename = 'SCOTT')--2.子查詢返回一個集合
-- 查詢出工資和10號部門任意員工一樣的員工信息select * from emp where sal in
(select sal from emp where deptno = 10);--子查詢返回一張表
-- 查詢出每個部門最低工資,和最低工資員工姓名,和該員工所在部門名稱-- 1,先查詢出每個部門最低工資select deptno,min(sal)
from emp
group by deptno-- 2,三表聯查select t.deptno,t.msal,e.ename,d.dname
from (select deptno,min(sal) msalfrom empgroup by deptno) t, emp e, dept d
where t.deptno = e.deptno
and t.msal = e.sal
and e.deptno = d.deptno;
----oracle中的分頁
---rownum行號:當我們旅select操作的時候,
--每查詢出一行記錄,就會在該行加上一個行號,
-- 行號從1開始,依次遞增,不能跳著走.--- emp表工資倒敘排列后,每頁五條記錄,查詢第二頁
--排序操作會影響rownum的順序
select * from emp e order by e.sal desc; -- where rownum <4select rownum,e.* from emp e order by e.sal desc;----如果涉及到排序,但是還要使用rownum的話,我們可以再次嵌套查詢。select rownum,t.* from
(select rownum,e.* from emp e order by e.sal desc) t;--- emp表工資倒敘排列后,每頁五條記錄,查詢第二頁
----rownum行號不能寫上大于一個正數。
select * from (select rownum rn, e.* from(select * from emp order by sal desc) ewhere rownum <11 )
where rn >5--- oracle 中沒有limit寫法,limit 是mysql中的---視圖
---視圖的概念:視圖就是提供一個查詢的窗口,所有數據來自于原表。---查詢語句創建表
create table emp as select * from scott.emp;
select * from emp;---創建視圖【必須有dba權限】 在itheima下沒有emp表
create view v_emp as select ename,job from emp;-- 查詢視圖
select * from v_emp;update v_emp set job='CLERK' where ename='ALLEN';
commit;
總結
以上是生活随笔為你收集整理的heima Oracle day2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: heima-Oracle学习-day1
- 下一篇: 【目录】shell 编程-xyq