版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
《Java應(yīng)用開發(fā)教程——基于
JDK
9、OracleJDeveloper與Oracle
DB
XE實(shí)現(xiàn)》第18
章
用SQL訪問Oracle
DB
XE本章概要:Oracle
DB
XE的對象瀏覽器提供了對SQL命令進(jìn)行可視化操作的環(huán)境,而SQL命令器則提供了直接使用SQL命令、PL/SQL、存儲過程/函數(shù)等的命令行執(zhí)行環(huán)境。本章首先介紹SQL函數(shù)和操作符,然后介紹如何使用Oracle
DB
XE提供的SQL命令器工具實(shí)現(xiàn)SQL的數(shù)據(jù)操作功能,即對存儲在數(shù)據(jù)庫中數(shù)據(jù)的查詢、輸入、更新、刪除等操作。18.1
SQL函數(shù)Oracle數(shù)據(jù)庫的SQL主要包括以下一些函數(shù):數(shù)值型函數(shù)字符型函數(shù)日期型函數(shù)轉(zhuǎn)換函數(shù)和聚集函數(shù)。18.1.1
數(shù)值函數(shù)數(shù)字型函數(shù)接受的是number類型的參數(shù),而返回的是number類型的數(shù)值。Oracle數(shù)據(jù)庫中常用的SQL數(shù)值型函數(shù),如表18.1所示。數(shù)值型函數(shù)的實(shí)例如下:ceil(16.3)——返回大于16.3的整數(shù),結(jié)果為17。round(15.6,-1)——y為-1,從整數(shù)的個(gè)位向左算起使1位為0,即個(gè)位為0,數(shù)值四舍五入,個(gè)位6進(jìn)位,結(jié)果為20。trunc(15.6,-1)——y為-1,從整數(shù)的個(gè)位向左算起使1位為0,即個(gè)位為0,數(shù)值截尾到個(gè)位,個(gè)位5被截尾,結(jié)果為10。18.1.2
字符函數(shù)
字符型函數(shù)接受的是字符型參數(shù),返回的是字符值。出去幾個(gè)個(gè)別函數(shù)以外,這些函數(shù)大都返回VARCGAR2類型的
值。Oracle數(shù)據(jù)庫中常用的SQL字符處理函數(shù),如表8-2所示。例如,如下的實(shí)例:concat("您好,","北京")——結(jié)果為:"您好,北京!"。substr("[I
am
a
stydent",3,2)——結(jié)果為:"am"。18.1.3
日期函數(shù)日期型函數(shù)接受的是DATE類型的參數(shù),除了Months-Between函數(shù)返回的是number類型的數(shù)值外,其他的日期函數(shù)都返回DATE類型的值。如表18-3所示。例如,如下的實(shí)例:Last_Day("6-6月-06")——結(jié)果為30-6月-06。Next_Day("10-3月-06,"星期一")——表示06年3月10日后的期一。結(jié)果為13-3月-06。18.1.4
轉(zhuǎn)換函數(shù)轉(zhuǎn)換函數(shù)用于在數(shù)據(jù)類型之間進(jìn)行轉(zhuǎn)換。數(shù)值型轉(zhuǎn)換為字符類型函數(shù)名稱:To_Char(num[,format])。
函數(shù)功能:將number類型的數(shù)據(jù)轉(zhuǎn)換為一個(gè)varchar2類型的數(shù)據(jù),format為格式參數(shù),如果沒有指定format,那么結(jié)果字符串包含和num中有效位的個(gè)數(shù)相同的字符。如果為負(fù)數(shù),則在前面加一個(gè)減號。函數(shù)實(shí)例:To_Char(9.6)結(jié)果為"9.6"。2.日期型轉(zhuǎn)換為字符串類型函數(shù)名稱:To_Char(d[,format])。函數(shù)功能:將日期類型的數(shù)據(jù)轉(zhuǎn)換為一個(gè)varchar2類型的數(shù)據(jù),如果沒有指定format格式串,則使用默認(rèn)的日期格式。SQL提供許多的日期格式,用戶可以用它們的組合來表示最終的輸出格式。SQL的日期格式如表18-4所示。函數(shù)實(shí)例:設(shè)當(dāng)前系統(tǒng)日期為2003年3月10日,
To_Char(SYSDATE,"YYYY"年"MM"月"DD"日,第"W"個(gè)星期,
"HH24"時(shí)")的結(jié)果為"2003年3月10日,第2個(gè)星期,08時(shí)"。3.字符串類型轉(zhuǎn)換為日期型●函數(shù)名稱:To_Date(string,format)。●函數(shù)功能:將char或varchar2類型的數(shù)據(jù)轉(zhuǎn)換為一個(gè)date類型的數(shù)據(jù),日期的格式詳見表18-4。●函數(shù)實(shí)例:To_Date("2003-3-10","YYYY-MM-DD")的結(jié)果為10--03月03。18.1.5聚集函數(shù)
聚集函數(shù)也稱分組函數(shù),是從一組記錄中返回的匯總信息。
Oracle數(shù)據(jù)庫中常用的SQL聚集函數(shù)如表10-5所示。下面給出聚集函數(shù)的實(shí)例:avg(s_score)——結(jié)果為s_score列的平均值。sum(s_score)——結(jié)果為s_score列值的總和。注意,在Oracle數(shù)據(jù)庫中,函數(shù)以及語句是不分大小寫的。18.2
SQL操作符SQL中涉及到的操作符主要分為4類:算術(shù)運(yùn)算符、比較操作符、謂詞操作符以及邏輯操作符。1.算數(shù)運(yùn)算符在SQL中,常用的算術(shù)運(yùn)算符由:+、-、*、/、()。2.比較操作符在SQL中,常用的比較操作符有:=、!=、<>、<、>、<=、>=。3.
謂詞操作符在S
Q
L中,常用的謂詞操作符有:I
N——屬于集合的任一成員。N
O
T
I
N——不屬于集合的任一成員。B
E
T
W
E
E
N
a
A
N
D
b——在a和b之間,包括a和b。N
O
T
B
E
T
W
E
E
N
a
A
N
D
b——不在a和b之間,也不包括a和b。E
X
I
S
T
S——總存在一個(gè)值滿足條件。L
I
K
E"[_%]s
t
r
i
n
g[_%]"——包括在指定子串內(nèi),%將匹配零個(gè)或多個(gè)任意字符,下劃線將匹配一個(gè)任意字符。例如:L
I
K
E"s
t
u
d%"——表示如果一個(gè)字符串的前4個(gè)字符為s
t
u
d,后面為0個(gè)或任意多個(gè)字符,都滿足集合條件。L
I
K
E"s
t
u
d
_
t"——表示如果一個(gè)字符串的前4個(gè)字符為s
t
u
d,第6個(gè)字符為t,第5個(gè)字符為任意字符。都滿足集合條件。B
E
T
W
E
E
N
2
0
A
N
D
3
0——表示數(shù)值在2
0到3
0之間。4.邏輯操作符在SQL中,常用的邏輯操作符有:AND、OR、NOT。NOT可以與比較運(yùn)算符連用,表示非。例如,NOT
age>=20,表示age小于20。18.3
用SQL查詢數(shù)據(jù)用SQL查詢數(shù)據(jù)可以使用SELECT命令實(shí)現(xiàn),該命令可以查詢數(shù)據(jù)庫中的數(shù)據(jù),并能夠?qū)⒉樵兘Y(jié)果排序、分組以及統(tǒng)計(jì)等。它的語法格式如下:SELECT[ALL|DISTINCT]<顯示列表項(xiàng)>|
*
FROM<數(shù)據(jù)來源項(xiàng)>[WHERE<條件表達(dá)式>[GROUP
BY<分組選項(xiàng)>[HAVING<組條件表達(dá)式>]][ORDER
BY<排序選項(xiàng)>[ASC|DESC];命令中各參數(shù)的含義如下:A
L
L
|
D
I
S
T
I
N
C
T——表示兩者任選其一。其中,A
L
L表示查詢出表中所有滿足條件的記錄,是默認(rèn)選項(xiàng),可以省略不寫。D
I
S
TI
N
CT表示去除掉輸出結(jié)果中的重復(fù)記錄。顯示列表項(xiàng)——指定查詢結(jié)果中現(xiàn)實(shí)的項(xiàng)。這個(gè)項(xiàng)可以是表中的字段、字段表達(dá)式,也可以是S
Q
L常量,各項(xiàng)之間用逗號分隔。字段表達(dá)式既可以是S
Q
L函數(shù)表達(dá)式,也可以是S
Q
L操作符連接的表達(dá)式。如果要顯示列表項(xiàng)中包含表中所有的字段,可以用“*”來代替。數(shù)據(jù)來源項(xiàng)——指定顯示列表中顯示項(xiàng)的來源,它可以是一個(gè)或多個(gè)表,各項(xiàng)之間用逗號分隔。S
E
L
E
C
T語句的基本語義是,根據(jù)W
H
E
R
E子句的條件表達(dá)式,從F
O
R
M子句指定的表或視圖中找出滿足條件的記錄,再將顯示列表項(xiàng)中顯示項(xiàng)的值列出來。在這種固定模式中,可以不要W
H
E
R
E,但必須有S
E
L
E
C
T和F
R
O
M。W
H
E
R
E<條件表達(dá)式>——指定查詢條件。查詢條件中涉及到的S
Q
L函數(shù)和S
Q
L操作符。G
R
O
U
P
B
Y<分組選項(xiàng)>——表示查詢時(shí),可以按照某個(gè)或某些字段分組匯總,各分組選項(xiàng)之間用逗號分隔。H
A
V
I
N
G<組條件表達(dá)式>表示分組匯總時(shí),可以根據(jù)組條件表達(dá)式選出滿足條件的組記錄。G
R
O
U
P
B
Y<排序選項(xiàng)>——表示顯示結(jié)果時(shí),可以按照指定字段排序,各選項(xiàng)之間用逗號分隔。A
S
C表示升序,D
E
S
C表示降序,默認(rèn)值為升序。1.
單表查詢單表查詢即從一個(gè)表中查詢數(shù)據(jù)。此時(shí),SELECT命令中FORM子句中只有一個(gè)表,而且語句中涉及的字段可以省略表名。【例18-1】查詢deparment表中的全部信息。(
1
)在Windows
OS中,在“開始”菜單中啟動(dòng)Oracle
DB
XE。再調(diào)用
Oracle
DB
11
g
XE→“入門”命令。如圖18-1所示。(5)創(chuàng)建表(
3
)輸入命令:S
E
L
E
C
T
*
F
R
O
M
D
E
P
A
R
T
M
E
N
T;,然后單擊“運(yùn)行”按鈕,則在其下面顯示查詢結(jié)果,如圖1
8-3所示?!纠?
8-2】查詢e
m
p
l
o
y
e
e表中所有雇員的I
D號、姓名、年齡、職位、薪水等信息。S
E
L
E
C
T
E
M
P
_
I
D,E
M
P
_
N
A
M
E,E
M
P
_
A
G
E,E
M
P
_
J
O
B,E
M
P
_
S
A
L
A
R
Y
f
r
o
me
m
p
l
o
y
e
e
;【例18-3】查詢employee表中雇員所屬部門的信息。select
dept_id
from
employee;DEPT_ID10202046105020303040【例1
8-4】查詢e
m
p
lo
y
e
e表中部門編號為5
0的雇員的信息?!纠?8-5】查詢employee表中部門編號為50,且年齡在
24歲以上的雇員的信息。2.
多表查詢【例18-10】查詢所有雇員的雇員號、姓名、薪水和部門名信息。SELECT
EMP_ID,
EMP_NAME,
EMP_SALARY,
DEPT_NAME
FROMEMPLOYEE,
DEPARTMENT
WHERE
EMPLOYEE.
DEPT_ID=DEPARTMENT.
DEPT_ID;3.
嵌套查詢在S
E
L
E
C
T查詢語句中嵌入S
E
L
E
C
T查詢語句,稱為嵌套查詢。嵌入的S
E
C
E
L
T查詢語句稱為子查詢。子查詢要加括號,并且與S
E
L
E
C
T語句的形式類似,也有F
R
O
M子句,以及可選擇的W
H
E
R
E、G
R
O
U
P
BY和H
A
V
IN
G子句等。子查詢是一種把查詢結(jié)果作為參數(shù)返回給另一個(gè)查詢的一種查詢。子查詢中的子句格式與S
E
L
E
C
T語句中的子句相同。用于子查詢時(shí),它們執(zhí)行正常的功能。子查詢和S
E
L
E
C
T語句之間的區(qū)別如下:子查詢必須生成單字段數(shù)據(jù)作為其查詢結(jié)果,即必須是一個(gè)確定的項(xiàng)。如果結(jié)果為一個(gè)集合,則需要使用謂詞操作符;O
R
D
E
R
B
Y子句不能用于子查詢。子查詢的結(jié)果只是在主查詢內(nèi)部使用,對用戶是不可見的,所以對它們的任何排序都是無意義的。一般地,嵌套查詢一般的求解方法是有里向外處理,即先執(zhí)行子查詢,將子查詢的結(jié)果作為父查詢的查詢條件?!纠?8-11】查詢所薪水金額高于平均值的雇員的信息,并將顯示結(jié)果按部門編號、雇員號排列。18.4用SQL輸入數(shù)據(jù)一般地,SQL提供了3種輸入數(shù)據(jù)的方法:單表——用INSERT命令向表中輸入一行新紀(jì)錄。多行——用INSERT命令從數(shù)據(jù)庫的其他對象中選取多行數(shù)據(jù),并將這些數(shù)據(jù)添加到表中。表間數(shù)據(jù)復(fù)制——從一個(gè)表中選擇需要的數(shù)據(jù)輸入到新表中。這種方法用于初始裝載數(shù)據(jù)庫或從其它系統(tǒng)下載來的或從許多節(jié)點(diǎn)收集來的數(shù)據(jù)。1.
單行輸入命令I(lǐng)N
S
E
R命令可以向數(shù)據(jù)庫中輸入一行數(shù)據(jù),其命令格式如下:IN
S
E
R
T
IN
T
O<表名>[(<字段清單>)]V
A
L
U
E
S(<數(shù)值清單>);I
N
S
E
R
T為輸入關(guān)鍵字,I
N
T
O子句指定接受新數(shù)據(jù)的表及字段,V
A
L
U
E
S子句指定其數(shù)據(jù)值。字段清單和數(shù)值清單指定哪些數(shù)據(jù)進(jìn)入哪些字段,并且數(shù)值清單應(yīng)與字段清單一一對應(yīng),清單各項(xiàng)之間用“,”分隔。如果向表中所有字段輸入數(shù)據(jù),字段清單可以省略;如果向表中部分字段輸入數(shù)據(jù),字段清單不可以省略。如果不知道某字段的值,可以使用N
U
L
L關(guān)鍵字將其值設(shè)為空,兩個(gè)連續(xù)的逗號也可以表示空值。但是,如果表結(jié)構(gòu)中該字段已經(jīng)設(shè)定為N
O
T
N
U
L
L,則不能使用空值輸入。對于數(shù)值型字段可以直接寫值,字符型字段其值要加英文單引號,日期型字段其值也要加英文單引號,其輸入順序?yàn)槿?月-年。2.
多行輸入命令多行輸入命令的語法格式如下:INSERT
INTO<表名>[(<字段清單>)]SELECT子句;該命令將多行數(shù)據(jù)輸入其目標(biāo)表中。在該命令中,新行的數(shù)據(jù)源是SELECT子句的查詢結(jié)果。這是從一個(gè)表向另一個(gè)表復(fù)制多行記錄的典型方法?!纠?8-12】將emp_bak表中數(shù)據(jù)輸入到employee表中。emp_bak表的結(jié)構(gòu)與表employee相同,表中存儲了部分雇員的記錄,而這些雇員信息在employee表中尚未輸入。insert
into
employee
select
*
from
emp_bak;3.
表間數(shù)據(jù)復(fù)制輸入數(shù)據(jù)庫中的數(shù)據(jù)通常來自其他的計(jì)算機(jī)系統(tǒng),或是從其他的網(wǎng)站收集的,或是存儲在數(shù)據(jù)文件中的數(shù)據(jù)。為了將數(shù)據(jù)裝載到表中,可以先創(chuàng)建該表,并將SELECT命令的結(jié)果復(fù)制到新表中。實(shí)現(xiàn)上述功能的命令如下:c
re
a
te
ta
b
le<表名>a
s
s
e
le
c
t子句;【例1
8-1
3】創(chuàng)建一個(gè)新表e
m
p
_n
e
w,將e
m
p
lo
y
e
e表中部分字段的值復(fù)制到信標(biāo)
e
m
p
_n
e
w中。c
re
a
te
ta
b
le
e
m
p
_n
e
w
a
s
s
e
le
c
t
s
e
p
_id
,
e
m
p
_n
a
m
e
,
e
m
p
_s
a
la
ry
,
d
e
p
t_idfro
m
e
m
p
lo
y
e
e
;在本例中,利用表間數(shù)據(jù)復(fù)制的方法創(chuàng)建新表e
m
p
_n
e
w,結(jié)果顯示將e
m
p
lo
y
e
e表中指定字段的所有記錄復(fù)制到新表中。18.5
用SQL更新數(shù)據(jù)一般地,SQL提供了以下2種方法更新數(shù)據(jù)的方法。直接復(fù)制更新——UPDATE命令直接將表中的數(shù)據(jù)更新為確定值。嵌套更新——UPDATE命令將表中的數(shù)據(jù)更新為數(shù)據(jù)庫的其他對象中選取的數(shù)據(jù)。1.
直接賦值更新U
P
D
A
T
E命令修改單個(gè)表所選行的一個(gè)或多個(gè)字段的值。其語法格式如下:U
P
D
A
T
E<表名>S
E
T<字段名>=<表達(dá)式>[,<字段名>=<表達(dá)式>......]
[W
H
E
R
E<條件>];U
P
D
A
T
E為更新關(guān)鍵字。表名為被更新的目標(biāo)表。W
H
E
R
E子句指定被修改表的行,S
E
T子句指定更新的字段并賦予它們新的值,字段之間用逗號分隔?!纠?
8-1
3】將e
m
p
lo
y
e
e表中宋理民的雇員編號改為5
0
2。u
p
d
a
te
e
m
p
lo
y
e
e
e
m
p
_
id="5
0
2"w
h
e
re
e
m
p
_
n
a
m
e="宋理民";s
e
le
c
t
e
m
p
_
id,e
m
p
_
n
a
m
e
fro
m
e
m
p
lo
y
e
e
w
h
e
re
e
m
p
_
n
a
m
e="宋理民";E
M
P
_
ID
E
M
P
_
N
A
M
E--------------------------------------------------5
0
2
宋理民2.嵌套更新與INSERT一樣,UPDATE也可以使用SELECT子句查詢的結(jié)果進(jìn)行修改。【例18-14】將employee表中宋理民的部門編號改為高義民的部門編號。update
employee
dept_id=(select
dept_id
from
employee
whereemp_name="宋立民";select
smp_id,emp_name,dept_id,from
employee
whereemp_name="宋立民";EMP_ID
EMP_NAME
DEPT_I
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版工廠經(jīng)營理念轉(zhuǎn)讓合同3篇
- 2025年度新能源汽車動(dòng)力電池回收利用合同范本4篇
- 2024食用菌種植基地環(huán)境保護(hù)與生態(tài)修復(fù)合同3篇
- 2024版美容院產(chǎn)品購銷合同
- 2025年度商業(yè)地產(chǎn)項(xiàng)目租賃收益分成合同范本4篇
- 編制加油站生產(chǎn)建設(shè)項(xiàng)目可行性研究報(bào)告編制說明
- 2025年綠色建筑裝修垃圾清運(yùn)及節(jié)能減排合同2篇
- 2025年度個(gè)人樓房房買賣合同標(biāo)準(zhǔn)范本下載4篇
- 2025年社區(qū)商業(yè)綜合體商鋪?zhàn)赓U管理協(xié)議3篇
- 2025年版影視作品版權(quán)轉(zhuǎn)讓合同范本3篇
- 高考全國Ⅲ卷語文真題含答案
- 10kV架空線路專項(xiàng)施工方案
- OGSM戰(zhàn)略規(guī)劃框架:實(shí)現(xiàn)企業(yè)目標(biāo)的系統(tǒng)化方法論
- 遼寧省大連市中山區(qū)2023-2024學(xué)年七年級下學(xué)期期末數(shù)學(xué)試題
- 2023年版《安寧療護(hù)實(shí)踐指南(試行)》解讀課件
- 2024年新課標(biāo)高考化學(xué)試卷(適用黑龍江、遼寧、吉林地區(qū) 真題+答案)
- AQ6111-2023個(gè)體防護(hù)裝備安全管理規(guī)范
- 鈷酸鋰-安全技術(shù)說明書MSDS
- 江蘇省“大唐杯”全國大學(xué)生新一代信息通信技術(shù)大賽省賽題庫(含答案)
- (正式版)JBT 9229-2024 剪叉式升降工作平臺
- 如何做好談話筆錄
評論
0/150
提交評論