oracle資料庫學習筆記 day3

2021-08-19 17:16:32 字數 2925 閱讀 9348

單行函式(續)

1.數值函式

round:四捨五入

select round(12.5) from dual;  結果為:13

select round(-12.5) from dual;  結果為:-13

trunc:直接截斷,只舍不入

select trunc(12.5) from dual;  結果為:12

select trunc(-12.5) from dual;  結果為:-12

mod:模運算(取餘)

select mod(11,4) from dual;  結果為:3

2.日期函式

sysdate:當前資料庫伺服器系統時間

add_months(date,數字):date與數字運算後的月份

next_day(date,'星期?'):從date開始下乙個星期?的日期

last_day(date):date日期當月的最後一天

month_between(date1,date2):date1與date2之間相差的月份數

extract(xx from date):從date日期裡取出xx(年year/月month/日day)

3.轉換函式

to_char()

to_timestamp()

to_number()

to_date()

4.通用函式

nvl(表示式1,表示式2):如果表示式1不為null,則結果為表示式1,如果表示式1為null,則結果為表示式2

nvl2(表示式1,表示式2,表示式3):如果表示式1為null,則此函式結果為表示式2,如果不為null,則結果為表示式3

nullif(表示式1,表示式2,表示式3):如果表示式1與表示式2相同,則此函式結果為null,如果不同則結果為表示式1

decode(表示式,

判斷1,顯示結果1,

判斷2,顯示結果2,

……預設值)

case 表示式 when 條件1 then 結果1 

when 條件2 then 結果2

……else 結果

end [別名]

coalesce(表示式1,表示式2,表示式3……):結果為第乙個不為null的表示式,如果表示式全部為null,則函式結果為null

*多表查詢(應盡量避免三表以上的查詢)

多表查詢會產生笛卡爾積,我們的目標就是消除笛卡爾積,對抗全表掃瞄

1.關聯

1>內連線(等值連線)

select e.ename,e.job,e.deptno,d.deptno,d.dname,d.loc

from emp e,dept d

where e.deptno=d.deptno;(等值連線)

2>外連線

select *

from emp e,dept d

where e.deptno=d.deptno(+)(左連線)

select *

from emp e,dept d

where e.deptno(+)=d.deptno(右連線)

**sql1999語法

3>自身關聯

--查詢每個員工的編號、姓名,及上司的編號、姓名

select e.empno,e.ename 員工,m.empno,m.ename 上司

from emp e,emp m

where e.mgr=m.empno;

4>交叉連線cross join (會產生笛卡爾積)

select *

from emp(表1) cross join dept(表2);

5>自然連線natural join(自動消除笛卡爾積)

select *

from emp(表1) natural join dept(表2);

*using子句: 指定關聯字段

select *

from emp(表1) join dept(表2)

using(deptno(關聯字段));

*on子句:指定關聯條件

select *

from emp(表1) join salgrade(表2)

on(emp.sal between salgrade.losal and salgrade.hisal(關聯條件))

6>外連線

*左外連線

select *

from emp left outer join dept

using(deptno)

*右外連線

select *

from emp right outer join dept

on(emp.deptno=dept.deptno)

*全外連線

select *

from emp full outer join dept

using(deptno)/on(emp.deptno=dept.deptno)

2.集合運算

union(並集,第一集合與第二集合的和,自動消除重複部分)

union all(並集,第一集合與第二集合的和,不消除重複部分)

select *

from emp

where deptno=10 and job='manager'

union

select *

from emo

where deptno=30 and job='clerk'

minus(差集,第一集合消除與第二集合的公共部分)

select * from emp

minus

select * from emp where deptno=10

intersect(交集,兩個集合重複(公共)的部分)

select * from emp

intersect

select * from emp where deptno=10

Oracle資料庫學習筆記 一

微軟 sql server 和 access 瑞典mysql ab公司 mysql ibm公司 db2 美國sybase公司 sybase ibm公司 informix 美國oracle公司 oracle 小型資料庫 access 中型資料庫 sql server mysql informix 大型...

資料庫 Oracle學習筆記(1)

類class class student 學生物件public class student byte b 100 int i 10000 double d 3.14 char c 我 boolean f true id name age1001 張三30 1002 李四25 nickname pas...

資料庫 Oracle學習筆記(4)

select from emp 查詢表中所有列 select ename,sal from emp 查詢表中ename列,和sal列 select concat ename,的工資是 from emp smith的工資是 smith的工資是 sal smith的工資是800 select conca...