oracle 學習筆記(二)

1.清屏

windows:host cls;

linux:host clear;

2.對日期的處理

1)系統默認的類型:

select sysdate from  dual;-->注:sysdate 是系統的當前時間 系統默認格式爲:日-月-年


2)to_char()的用法

語法:TO_CHAR(date,'format_model')

格式:

 日期格式的元素

格式

說明

舉例

YYYY

 Full year in numbers

2011

YEAR

Year spelled out(年的英文全稱)

twenty eleven

MM

Two-digit value of month 月份(兩位數字)

04

MONTH

Full name of the month(月的全稱)

4月

DY

Three-letter abbreviation of the day of the week(星期幾)

星期一

DAY

Full name of the day of the week

星期一

DD

Numeric day of the month

02


select to_char(sysdate,'yyyy-mm-dd') from dual;


3)修改系統的默認日期類型:

查看系統默認的參數:select * from v$nls_parameters;


修改當前會話中的日期類型的默認格式(只在當前會話有效)

alter session set nls_date_format='yyyy-mm-dd'; // 只對當前session有效


4)使用日期類型函數

SQL> select * from emp where hiredate>to_date('1981-12-31', 'yyyy-MM-dd');

SQL> select * from emp where to_char(hiredate, 'yyyy-MM-dd')  > '1981-12-31';

語法:TO_CHAR(date, 'format_model')
語法:TO_DATE(str, 'format_model')

3.排序

語法:order by 列名 asc/desc 注:這裏的列名只能是數字,字符串,日期類型

asc 默認就是升序

desc 降序

例:按照員工的姓名排序


例:按照員工的薪水從低到高排序


當order by所在的列中有null,會:
升序時,null的在下面。
降序時,null的在上面。
我們希望,不管升序還是降序,null值的始終在下面

方式一:select empno,ename,sal,comm from emp order by comm nulls last;-->使用nulls last 可以使得null放在最後面


方式二: select empno, ename, job, hiredate, sal, nvl(comm, 0) from emp  order by 6 desc


4.組函數

select 
max(sal) 最高工資, 
min(sal) 最低工資, 
avg(sal) 平均工資, 
sum(sal) 所有員工的工資和, 
count(sal) 領工資的員工數量
from emp;

例:查詢emp表中的平均工資

select sum(comm)/count(*) from emp; 這裏的count(*) 會查詢出包括comm爲null的記錄數

select avg(comm) from emp;這裏的avg會自動慮null 因此comm爲null的行不算 這裏記錄數就爲3

因此上述的使用avg應改爲:select avg(nvl(comm,0)) from emp; 注:函數可以嵌套使用

注意:

按一個列分組
按多個列分組
參與分組的多個列有一個不相同就是不同的組。

having與where的區別:

Having,是分完組後再進行過濾,只顯示符合條件的結果。
在Group by與Having中都不可以使用別名。
與Where的區別
Having是是分完組後再進行過濾。
Where是先過濾,再進行分組操作。
如果可以,儘量寫Where條件,不寫Having。

5.子查詢

當一步不能求解時,可以使用子查詢

分爲:單行子查詢/多行子查詢

例:查詢工資比Scott高的員工信息

 select ename from emp where sal>(select sal from emp where ename='SCOTT');


注意問題:
1. 子查詢相對主查詢往右縮進
2. 將子查詢放入括號中
3. 換行
4. 可以在主查詢的select, from, where, having 都可以放子查詢
5. 不可以在主查詢的group by 放子查詢
6. 主查詢和子查詢可以不是用一張表,只要子查詢返回的結果主查詢可以使用,即可
7. 在from後面放子查詢(*****)
select 後面放子查詢: 該子查詢必須是單行子查詢
from 後面放子查詢: 查詢員工的編號和姓名
主查詢和子查詢可以不是用一張表,只要子查詢返回的結果主查詢可以使用,即可
例:查詢部門名稱爲ACCOUNTING的員工信息

多行子查詢
in: 在集合中
例:查詢部門名稱爲ACCOUNTING和SALES的員工信息

select * from emp where deptno in( select deptno from dept where dname ='ACCOUNTING' or dname='SALES')
any:和子查詢中任意(隨便)一個值比較
查詢工資比10號部門任意一個員工工資低的員工信息

select * from emp where sal<any(select sal from emp where deptno=10);或者

select * from emp where sal<(select min(sal) from emp where deptno=10);
all: 和子查詢中所有值比較
查詢工資比10號部門所有員工工資低的員工信息

select * from emp where sal<all(select sal from emp where deptno=10);
**
any: 小於集合中的最大值
        all: 小於集合中的最小值
        any: 大於集合中的最小值
        all: 大於集合中的最大值

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章