Oracle(PLSQL)入門學習四

2022-02-03 21:02:09 字數 3525 閱讀 6382

oracle表連線:內連線、外連線。外連線分左連線、右連線。

多表查詢時,如果表之間沒有條件關聯,則會把所有匹配的結果查詢出來,例如a表6條資料,b表7條資料,查出來就是42條。

--

笛卡爾積:返回兩張表中所有匹配的結果,沒有意義。所以多表查詢,必須寫關聯條件。

select

*from staff,department where staff.id=department.staff_id;

view code

內連線的表如果多於兩個,則每個表必須要直接或者間接的關聯。例如查a、b、c表,條件a.某列=b.某列 and a.某列=c.某列,則b表和c表有間接的關聯。

多表關聯時,其中某列必須唯一,例如查表a、b、c,a.column1 = b.column2 and a.column3=c.column4,其中column1和column2至少有一列在自己的表裡是唯一值,

column3和column4至少有一列在自己的表裡是唯一值。

非等值表連線:

select ename,sal from

emp e,salgrade g

where e.sal between g.losal and g.hisal

--這個losal到hisal的區間範圍是唯一的

grade losal hisal

1 700 1200

2 1201 1400

3 1401 2000

4 2001 3000

5 3001 9999

自連線:自己關聯自己,但是作為不同表的定義,自連線一般可以使用子查詢替代,使用子查詢會更加清晰。

--

自連線,將emp看做是兩張不同的表,e是員工表,m是領導表

select

distinct

m.empno, m.ename, m.sal

from

emp e, emp m

where e.mgr =

m.empno

--自連線用的情況不多,可以使用子查詢實現

select

*from emp m where m.empno in (select

distinct mgr from emp)

外連線:主表中的資料全部選出,從表只選匹配的資料,不匹配的資料會用null替代。

外連線中的左外連線,左邊是主表,右邊是從表。外連線中的右外連線,右邊是主表,左邊是從表。

create

table

testa(

id number(3

),name

varchar2(10

),age

number(2));

insert

into testa values(1,'

a',23

);insert

into testa values(2,'

b',24

);insert

into testa values(3,'

c',25

);insert

into testa values(4,'

d',26

);create

table

testb(

id number(3

),salary

number(8,2));

insert

into testb values(1,9000

);insert

into testb values(2,9000

);insert

into testb values(3,9000

);select

*from testa left

join testb on testa.id=testb.id;

select

*from testa right

join testb on testa.id=testb.id;

分頁查詢:借助「rownum」偽列進行分頁查詢。

--

分頁查詢,每頁五條,查詢第二頁資料6-10

--使用偽列,不真正的存在表裡

select rownum from

emp ;

select a.*,rownum from

emp a;

select

*from (select a.*,rownum r from emp a) x where x.r>

5and x.r<=

10;

view code

最內層:即將被分頁的全部資料,可能會被排序,定義成x表。

select

*from

emp;

中間層:啟動行編號偽列,定義成y表

select x.*,rownum r from

x;最外層:資料過濾,分頁開始

select

*from y where y.r >

0and r<=

10

日期新增與轉換:

--

查詢系統日期

select sysdate from

dual;

--向前走一天 明天

select sysdate+

1from

dual;

--向後走一天 昨天

select sysdate-

1from

dual;

--下個月的今天

select add_months(sysdate,1) from

dual;

--上個月的今天

select add_months(sysdate,-

1) from

dual;

--加1小時,1分,1秒

select sysdate+1/

24+1/(24

*60) +

1/(24*60

*60) from dual

日期擷取:

select trunc(sysdate) from dual; --

預設精確到天

select trunc(sysdate,'

dd') from dual; --

精確到天

select trunc(sysdate,'

mm') from dual;--

精確到月

select trunc(sysdate,'

yyyy

') from dual;--

精確到年

select trunc(sysdate,'

hh') from dual;--

精確到時

select trunc(sysdate,'

mi') from dual;--

精確到分

Oracle(PLSQL)入門學習六

事務 把一組操作看做乙個工作單元,要麼都執行,要麼都不執行。dml操作才有事務,查詢沒有事務。提交事務 commit 回滾事務 rollback create table bank id number 5 primary key,money number 10 check money 0 inser...

Oracle PL SQL入門案例實踐

正在看的oracle教程是 oracle pl sql入門案例實踐。前面已經了解了關於pl sql程式設計的基礎,本文將結合乙個案例來加深對這些知識點的理解。一 案例介紹 某資料庫有兩張表,是關於某公司員工資料 薪水和部門資訊的,它們分別是emp表和dept表,兩張表的結構如下 要求如下 1 按照上...

Oracle PL SQL學習筆記

游標分類 游標概念 與游標相關的語法型別 建立游標 如同宣告任何其他變數一樣 cursor cursor name is sql statement 開啟與關閉游標 開啟游標 open cursor arg arg 關閉游標 close cursor 取資料 fetch cursor into va...