荀曉博 沒有比腳更長的路,沒有比人更高的山。
一、常用基礎命令
1.本機連線虛擬機器oracle資料庫
sqlplus scott/[email protected]:1521/orcl
2.檢視當前使用者
show user;
3.檢視員工表結構
desc emp;
4.檢視所有表
select * from tab;
5.修改密碼
sqlplus scott/tiger as sysdba
alter user scott identified by tiger
6.設定行寬
set linesize 200
7.設定ename列寬度
col ename for a8
8.命令列中select查詢中from寫成了form,更改錯誤繼續執行
a.錯誤行號
b.c /form/from
c./
9.SQL語句中的null
a. 包含null的表示式都為null
sal+null=null
b. null永遠!=null
is null或is not null
c.如果集合中含有null,不能使用not in;但可以使用in
d.oracle中null值最大
e.組函式自動濾空;可以巢狀濾空函式來遮蔽他的濾空功能
10.清理螢幕命令
host cls
11.開啟本機預設文字編輯器命令
ed
12.去掉重複記錄關鍵詞
distinct
13.select 3+2 from ? 這個問號處的偽表名
dual
14.字串拼接連線符
||
15.錄屏
spool F:/test.txt
spool off
16.select * from 表名 where 條件
(包括 between and、in、not in、is null、like...)
17.檢視引數設定
select * from v$nls_parameters;
18.修改日期格式
alter session set NLS_DATE_FORMAT='yyyy-mm-dd'
19.轉義字元使用(名字中含有_)
select * from emp where ename like '%\_%' escape '\'
20.排序關鍵字
order by(升序asc,降序desc)
21.設定每頁記錄數
set pagesize 20
22.排序空值放最後
select * from emp order by comm desc nulls last
23.字元行數
(1)大小寫:
1> lower("hello"): 轉小寫
2> upper("hello"): 轉大寫
3>initcap("hello"): 首字母大寫
(2)擷取:
1> substr(a,b): 從a中,第b位開始取
2> substr(a,b,c) 從a中,第b位開始取,取c位
(3)長度:
1> length('北京'): 字元數
2> lengthb('北京'): 位元組數
(4)填充:
1> lpad('abcd',10,'*'): 左填充
2> rpad('abcd',10,'*'): 右填充
(5)替換:
1> replace('Hello World','l','*'): 替換為指定字元
二、函式部分
24.數值函式
1> 四捨五入:round(a,b): a:傳入數字,b:保留小數位數
2> 截斷: trunc(a,b): a:傳入數字,b:擷取小數位數
3> 取餘: mod(a,b): a%b
25.查詢當前時間:
select sysdate from dual;
select systimestamp from dual;
26.格式化時間:
to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')
to_char(systimestamp,'yyyy-mm-dd hh24:mi:ss:ff')
27.日期數學運算
sysdate+1:當前日期加1天
兩個日期相減,返回相差天數
28.日期函式
1> months_between(sysdate,hiredate):兩個日期之間相差的月數
2> add_months(sysdate,12),當前日期加上12個月
3> next_day(sysdate,'星期日'):當前日期的下個星期日
4> last_day(sysdate): 這個月的最後一天
5> round(sysdate,'month'): 四捨五入到月; round(sysdate,'year'): 四捨五入到年
6> trunc(sysdate,'month'): 擷取到月; trunc(sysdate,'year'): 擷取到年
29.轉換函式:
1> to_char(sysdate,'yyyy-mm-dd hh24:mi:ss"今天是"day')結果是: 2016-03-13 15:26:12今天是星期日
2> to_char(12345678.23,'L999,999,999.99')結果是: ¥12,345,678.23
30.通用函式:
1> nvl2(a,b,c) 當a=null的時候,返回c;否則返回b
2> nullif(a,b) 當a=b的時候,返回null;否則返回a
3> coalesce(a,b,c..) 從左到右 找到第一個不為null的值
31.case表示式:
case表示式:
case job when 'PRESIDENT' then sal+1000
when 'MANAGER' then sal+800
else sal+400
end
32.decode函式:
decode(job,'PRESIDENT',sal+1000,
'MANAGER',sal+800,
sal+400)
33.多行函式:
1> sum、count、avg
2>分組:group by .. having ..
34.group by增強:
1> select deptno,job,sum(sal) from emp group by rollup(deptno,job);
2> 格式化:break on deptno skip 2
3> 取消格式化: break on null
三、多表查詢中的連線
35.等值連線:
select e.empno,e.ename,e.sal,d.dname
from emp e,dept d
where e.deptno=d.deptno;
36.不等值連線:
select e.empno,e.ename,e.sal,s.grade
from emp e,salgrade s
where e.sal between s.losal and s.hisal;
37.外連線:
1> 左外連線:where e.deptno=d.deptno(+)
2> 右外連線:where e.deptno(+)=d.deptno
38.自連線: 通過表的別名,將同一張表視為多張表
select e.ename 員工姓名,b.ename 老闆姓名
from emp e,emp b
where e.mgr=b.empno;
39.層次查詢(level偽列):
select level,empno,ename,mgr
from emp
connect by prior empno=mgr
start with mgr is null
order by 1;