查詢是數(shù)據(jù)的一個(gè)重要操作。用戶發(fā)送查詢請(qǐng)求,經(jīng)編譯軟件變異成二進(jìn)制文件供服務(wù)器查詢,后返回查詢結(jié)果集給用戶,查詢會(huì)產(chǎn)生一個(gè)虛擬表,看到的是表形式顯示的結(jié)果,但結(jié)果并不真正的存儲(chǔ),每次執(zhí)行查詢只是從數(shù)據(jù)表中提取數(shù)據(jù),并按照表的形式顯示出來。
創(chuàng)新互聯(lián)公司公司2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元惠州做網(wǎng)站,已為上家服務(wù),為惠州各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575
SELECT 列名
FGROM 表名
[WHERE 查詢條件表達(dá)式]
[GROUP BY 分組表達(dá)式]
[HAVING 分組查詢表達(dá)式]
[ORDER BY 排序的列名 [ASC或DESC]]
group by 用于對(duì)查詢的結(jié)果分組統(tǒng)計(jì),通過對(duì)group by后面的名字進(jìn)行分組后輸出結(jié)果。
group by后面還可以跟多列表示 多列分組 ,在多列分組時(shí)放前面的優(yōu)先分組。
group by 列名,列名
having 子句用于限制分組顯示結(jié)果,其只能和group by一起連用。在where中沒有辦法直接使用聚合函數(shù),即sum avg等無法使用,所以引用了having,在having中可以使用這些函數(shù)。
order by 表示排序,后跟列名和排序方式。如果什么都不加默認(rèn)為升序。ASC表示升序,DESC表示降序。
在Oracle中還可以設(shè)置多列排序
order by 列名1 升降,列名2 升降;
前面的為主要排序,后面的為次一級(jí)排序。
注:碰到自己與自己比較的情況下,不能用having,可以創(chuàng)建一個(gè)新列。
注:如果select語句同時(shí)包含group by,having,order by,按group by,having,order by排序
分組和聚合一起使用,目的是為了統(tǒng)計(jì)信息。
where是為了from服務(wù)的,只能跟 真實(shí)的字段 ,用來篩選from子句中指定的操作所產(chǎn)生的行
group by 用來分組where子句的輸出
having 用來從分組的結(jié)果中篩選行
order by用來對(duì)篩選的結(jié)果進(jìn)行排序
(1)分組函數(shù):max min?avg sum count
max表示該列的最大值,min表示該列的最小值,avg表示該列的平均值,sum表示該列的和,count表示該列的行數(shù)。
注:分組函數(shù)(max、min、avg、count、sum)只能出現(xiàn)在選擇列表中having子句、order by子句、不能出現(xiàn)在where子句和group by子句中。
(2)多表查詢
多表查詢是指兩個(gè)和兩個(gè)以上的表或者是視圖的查詢,在實(shí)際應(yīng)用中,當(dāng)查詢單個(gè)表不能滿足需求時(shí),一般使用多表查詢。如:顯示sales部門位置和其員工的姓名,這種情況下需要使用到(dept表和emp表)。
多表查詢的連接一般可以分為:內(nèi)連接、左外連接、右外連接、全連接。
注:在使用多表查詢的時(shí)候每個(gè)表可以設(shè)置別名,如果表指定了別名,那么語句中所有語句必須使用別名,而不能再使用實(shí)際表名。且在寫屬性的時(shí)候如果屬性為其中一個(gè)表特有的屬性則不需要寫別名,如果是兩個(gè)表都有則必須指定是哪一個(gè)表的哪個(gè)屬性格式為:表名.屬性名。
select 列名 from 表1 別名,表2 別名...
注:e是emp的別名,d是dept的別名。
但如果對(duì)表進(jìn)行了操作則需要設(shè)置別名,如:查詢每個(gè)部門中工資高于該部門平均工資的員工人數(shù)。在其中有一個(gè)avg表,這個(gè)表必須設(shè)置別名(提醒:如果僅有一個(gè)被修改的表,則可以不設(shè)置別名,但如果有多個(gè)表則必須設(shè)置別名)。
內(nèi)連接
內(nèi)連接通過使用比較運(yùn)算符來使每個(gè)表的通用列中的值匹配來組成一個(gè)新表,即:把兩個(gè)表中間共有的那些行拿出來進(jìn)行連接,如果某些行不是兩個(gè)表共有的,則不進(jìn)行連接。
select
from 表1
inner join 表2
on 匹配條件
或
select
from 表1 表2
where匹配條件
左外連接
左外連接與內(nèi)連接的區(qū)別是:設(shè)置左外連接的時(shí)候設(shè)置了主表和附表,主表在前,附表在后。內(nèi)連接是將兩個(gè)表匹配的地方輸出出來,而左外連接則是主表全寫,附表一一對(duì)應(yīng),附表有則加上,沒有不寫。
select
from 表1
left join 表2
on 匹配條件
右外連接
右外連接和左外連接基本相同只是右外連接的主表寫在后邊。
select
from 表1
right join 表2
on 匹配條件
全連接
全連接是在等值連接的基礎(chǔ)上將左表和右表的未匹配數(shù)據(jù)都加上,使用的關(guān)鍵字為full outer join或者full join。
select
from 表1
full join 表2
on 匹配條件
自連接
還有一種特殊情況即自連接,在Oracle中一個(gè)表無法與自己進(jìn)行比較,所以當(dāng)需要自己表的兩個(gè)信息做比較的時(shí)候也需要使用連接來連接,即同一張表的連結(jié)查詢。
(3)子查詢
子查詢是指嵌套在其他sql語句中的select語句,也叫嵌套查詢。sql語句執(zhí)行順序?yàn)閺挠业阶髨?zhí)行,所以在執(zhí)行查詢時(shí)會(huì)先執(zhí)行左側(cè)的子查詢后進(jìn)行主查詢。
子查詢分為單行子查詢和多行子查詢,單行子查詢是指返回一行數(shù)據(jù)的子查詢語句,多行子查詢是指返回多行數(shù)據(jù)的查詢語句。子查詢還可以分為多列子查詢、多行子查詢、多列多行子查詢。
在進(jìn)行子查詢時(shí)如果內(nèi)部查詢不返回任何記錄,則外部條件中字段DEPTNO與NULL比較永遠(yuǎn)為假,也就是說外部查詢不返回任何結(jié)果。
總結(jié)為:
單行子查詢是指子查詢只返回單列、單行數(shù)據(jù)
多行子查詢是指返回單列多行數(shù)據(jù),都是針對(duì)單列而言的
多列子查詢則是指查詢返回多個(gè)列數(shù)據(jù)的子查詢語句
單行子查詢
where deptno = (單行數(shù)值)
多行子查詢
where deptno in ( 多行數(shù)值 )
多列子查詢:
where (job,deptno)=(select job,deptno from emp where ename='KING')
多列多行子查詢
where (job,deptno) in (select job,deptno from emp where ename='KING')
單行子查詢
在單行子查詢的外部查詢中可以使用=、、、=、=、等比較運(yùn)算符。
內(nèi)部查詢返回的結(jié)果必須與外部查詢條件中字段(DEPTNO)相匹配。
多行子查詢
在WHERE子句中使用多行子查詢時(shí),可以使用多行比較運(yùn)算符(IN,ALL,ANY)。
IN:等于任何一個(gè)。
ALL:和子查詢返回的所有值比較。例如:salALL(1,2,3)等價(jià)于sal3,即大于所有。
ANY:和子查詢返回的任意一個(gè)值比較。例如:salANY(1,2,3)等價(jià)于sal1,即大于任意一個(gè)就可以。
注:ANY運(yùn)算符必須與單行比較運(yùn)算符結(jié)合使用,并且返回行只要匹配子查詢的任何一個(gè)結(jié)果即可。
多列子查詢
多列子查詢和多行子查詢相同,只是使用多列子查詢的時(shí)候會(huì)有多列進(jìn)行匹配。
(4)集合運(yùn)算
為了合并多個(gè)select語句的結(jié)果,可以使用集合操作符號(hào)union,union all,intersect,minus。
union:該操作符用于取得兩個(gè)結(jié)果集的并集。當(dāng)使用該操作符時(shí),會(huì)自動(dòng)去掉結(jié)果集中重復(fù)行
union all:該操作與union相似,但是它不會(huì)取消重復(fù)行,而且不會(huì)排序
intersect:使用該操作符用于取得兩個(gè)結(jié)果集的交集
minus:使用該操作符用于取得兩個(gè)結(jié)果集的差集,它只會(huì)顯示存在第一個(gè)集合中,而不存在第二個(gè)集合中的數(shù)據(jù)
總結(jié)為集合運(yùn)算就是將兩個(gè)或者多個(gè)結(jié)果集組合成一個(gè)結(jié)果集。
intersect ?交集 返回兩個(gè)查詢共有的記錄
union all ?并集 返回各個(gè)查詢的所有記錄,包括重復(fù)的記錄
union ? ? ?交集 返回各個(gè)查詢的所有記錄,不包括重復(fù)的記錄
MINUS ? 補(bǔ)集 返回第一個(gè)查詢檢查出的記錄減去第二個(gè)查詢檢索出來的記錄之后剩余的記錄
注意:當(dāng)使用集合操作的時(shí)候,查詢所返回的列數(shù)以及列的類型必須匹配,列名可以不同。
(1)Distinct關(guān)鍵字
在Oracle中,可能出現(xiàn)若干相同的情況,那么可以用Distinct消除重復(fù)行
(2)多表查詢與單行子查詢可以實(shí)現(xiàn)相同的功能
查詢出銷售部(sales)下面的員工姓名,工作,工資
(3)顯示高于自己部門平均工資的員工信息
分析:
1.找到所有部門的平均工資
select deptno,avg(sal) from emp group by deptno;
2.找到所有人的工資信息
select ename,sal,deptno from emp;
3.把兩個(gè)結(jié)果集使用多表連接組合組合起來
select * from emp,(select deptno,avg(sal) avgsal from emp group by deptno) damao where emp.deptno=damao.deptno;
4.去掉低于平均工資的那些數(shù)據(jù)即可:
select * from emp,(select deptno,avg(sal) avgsal from emp group by deptno) damao where emp.deptno=damao.deptno and salavgsal;
(4)emp表介紹
字段? ? ? ? ? ? ? 類型? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 描述
empno ? ? ? ? ?NUMBER(4) ? ? ? ? ? ? ? ? 表示雇員編號(hào),是唯一編號(hào)
ename ? ? ? ? ?VAECHAR2(10) ? ? ? ? ? 表示雇員姓名
job ? ? ? ? ? ? ? ?VARCHAR2(9) ? ? ? ? ? ? 表示工作職位
mgr ? ? ? ? ? ? ?NUMBER(4) ? ? ? ? ? ? ? ? 表示一個(gè)雇員的領(lǐng)導(dǎo)編號(hào)
hiredate ? ? ? DATE ? ? ? ? ? ? ? ? ? ? ? ? ? ?表示雇傭日期
sal ? ? ? ? ? ? ? NUMBER(7,2) ? ? ? ? ? ? ? 表示月薪,工資
comm ? ? ? ? ?NUMBER(7,2) ? ? ? ? ? ? ? 表示獎(jiǎng)金,或者稱為傭金
deptno ? ? ? ? NUMBER(2) ? ? ? ? ? ? ? ? 部門編號(hào)
在日?;跀?shù)據(jù)庫應(yīng)用的開發(fā)過程中,我們經(jīng)常需要對(duì)多個(gè)表或者數(shù)據(jù)源進(jìn)行關(guān)聯(lián)查詢而得出我們需要的結(jié)果集。那么Oracle到底存在著哪幾種連接方式??jī)?yōu)化器內(nèi)部又是怎樣處理這些連接的?哪種連接方式又是適合哪種查詢需求的?只有對(duì)這些問題有了清晰的理解后,我們才能針對(duì)特定的查詢需求選擇合適的連接方式,開發(fā)出健壯的數(shù)據(jù)庫應(yīng)用程序。選擇合適的表連接方法對(duì)SQL語句運(yùn)行的性能有著至關(guān)重要的影響。下面我們就Oracle常用的一些連接方法及適用情景做一個(gè)簡(jiǎn)單的介紹。
3.1 嵌套循環(huán)連接(nested loop)
嵌套循環(huán)連接的工作方式是這樣的:
1、 Oracle首先選擇一張表作為連接的驅(qū)動(dòng)表,這張表也稱為外部表(Outer Table)。由驅(qū)動(dòng)表進(jìn)行驅(qū)動(dòng)連接的表或數(shù)據(jù)源稱為內(nèi)部表(Inner Table)。
2、 提取驅(qū)動(dòng)表中符合條件的記錄,與被驅(qū)動(dòng)表的連接列進(jìn)行關(guān)聯(lián)查詢符合條件的記錄。在這個(gè)過程中,Oracle首先提取驅(qū)動(dòng)表中符合條件的第一條記錄,再與內(nèi)部表的連接列進(jìn)行關(guān)聯(lián)查詢相應(yīng)的記錄行。在關(guān)聯(lián)查詢的過程中,Oracle會(huì)持續(xù)提取驅(qū)動(dòng)表中其他符合條件的記錄與內(nèi)部表關(guān)聯(lián)查詢。這兩個(gè)過程是并行進(jìn)行的,因此嵌套循環(huán)連接返回前幾條記錄的速度是非??斓摹T谶@里需要說明的是,由于Oracle最小的IO單位為單個(gè)數(shù)據(jù)塊,因此在這個(gè)過程中Oracle會(huì)首先提取驅(qū)動(dòng)表中符合條件的單個(gè)數(shù)據(jù)塊中的所有行,再與內(nèi)部表進(jìn)行關(guān)聯(lián)連接查詢的,然后提取下一個(gè)數(shù)據(jù)塊中的記錄持續(xù)地循環(huán)連接下去。當(dāng)然,如果單行記錄跨越多個(gè)數(shù)據(jù)塊的話,就是一次單條記錄進(jìn)行關(guān)聯(lián)查詢的。
3、 嵌套循環(huán)連接的過程如下所示:
Nested loop
Outer loop
Inner loop
我們可以看出這里面存在著兩個(gè)循環(huán),一個(gè)是外部循環(huán),提取驅(qū)動(dòng)表中符合條件的每條記錄。另外一個(gè)是內(nèi)部循環(huán),根據(jù)外循環(huán)中提取的每條記錄對(duì)內(nèi)部表進(jìn)行連接查詢相應(yīng)的記錄。由于這兩個(gè)循環(huán)是嵌套進(jìn)行的,故此種連接方法稱為嵌套循環(huán)連接。
嵌套循環(huán)連接適用于查詢的選擇性強(qiáng)、約束性高并且僅返回小部分記錄的結(jié)果集。通常要求驅(qū)動(dòng)表的記錄(符合條件的記錄,通常通過高效的索引訪問)較少,且被驅(qū)動(dòng)表連接列有唯一索引或者選擇性強(qiáng)的非唯一索引時(shí),嵌套循環(huán)連接的效率是比較高的。
嵌套循環(huán)連接驅(qū)動(dòng)表的選擇也是連接中需要著重注意的一點(diǎn),有一個(gè)常見的誤區(qū)是驅(qū)動(dòng)表要選擇小表,其實(shí)這是不對(duì)的。假如有兩張表A、B關(guān)聯(lián)查詢,A表有1000000條記錄,B表有10000條記錄,但是A表過濾出來的記錄只有10條,這時(shí)候顯然用A表當(dāng)做驅(qū)動(dòng)表是比較合適的。因此驅(qū)動(dòng)表是由過濾條件限制返回記錄最少的那張表,而不是根據(jù)表的大小來選擇的。
在外連接查詢中,如果走嵌套循環(huán)連接的話,那么驅(qū)動(dòng)表必然是沒有符合條件關(guān)聯(lián)的那張表,也就是后面不加(+)的那張表。這是由于外連接需要提取可能另一張表沒符合條件的記錄,因此驅(qū)動(dòng)表需要是那張我們要返回所有符合條件記錄的表。比如下面這個(gè)查詢,
嵌套循環(huán)連接返回前幾行的記錄是非??斓?,這是因?yàn)槭褂昧饲短籽h(huán)后,不需要等到全部循環(huán)結(jié)束再返回結(jié)果集,而是不斷地將查詢出來的結(jié)果集返回。在這種情況下,終端用戶將會(huì)快速地得到返回的首批記錄,且同時(shí)等待Oracle內(nèi)部處理其他記錄并返回。如果查詢的驅(qū)動(dòng)表的記錄數(shù)非常多,或者被驅(qū)動(dòng)表的連接列上無索引或索引不是高度可選的情況,嵌套循環(huán)連接的效率是非常低的
-- 刪除原表
drop table t1;
-- 建立測(cè)試表
create table t1(
f1 varchar2(10),
f2 varchar2(1000)
)
tablespace CTL
pctfree 98;
-- 填充測(cè)試內(nèi)容
insert into t1(f1,f2)
select rownum, lpad(rownum,700,'0')
from dba_tables a, dba_tab_cols b
where a.owner = b.owner
and rownum 10000;
commit;
-- 檢查測(cè)試內(nèi)容格式
select sys.dbms_rowid.rowid_block_number(rowid), f1, f2 from t1;
-- 每條記錄都存儲(chǔ)在單獨(dú)的數(shù)據(jù)塊中
select count( distinct sys.dbms_rowid.rowid_block_number(rowid)) from t1;
/*
用同樣的方式建立表t2
*/
-- 刪除原表
drop table t2;
-- 建立測(cè)試表
create table t2(
f1 varchar2(10),
f2 varchar2(1000)
)
tablespace CTL
pctfree 98;
-- 填充測(cè)試內(nèi)容
insert into t2(f1,f2)
select rownum * 10, lpad(rownum * 10,700,'0')
from dba_tables a, dba_tab_cols b
where a.owner = b.owner
and rownum 1000;
commit;
-- 檢查測(cè)試內(nèi)容格式
select sys.dbms_rowid.rowid_block_number(rowid), f1, f2 from t2;
-- 每條記錄都存儲(chǔ)在單獨(dú)的數(shù)據(jù)塊中
select count( distinct sys.dbms_rowid.rowid_block_number(rowid)) from t2;
create index ind_t1_f1 on t1(f1);
create index ind_t2_f1 on t2(f1);
--首先我們來看使用nested loop關(guān)聯(lián)方式, 不同表作為驅(qū)動(dòng)時(shí)的情況.
1, 表t2作為驅(qū)動(dòng)表
select /*+ ordered use_nl(t1 , t2)*/
t1.f1, t2.f1
from ctl.t2 t2,ctl.t1 t1
where t1.f1 = t2.f1
and t1.f1 1000;
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=84 Card=4 Bytes=56)
1 0 NESTED LOOPS (Cost=84 Card=4 Bytes=56)
2 1 TABLE ACCESS (FULL) OF 'T2' (Cost=2 Card=82 Bytes=574)
3 1 INDEX (RANGE SCAN) OF 'IND_T1_F1' (NON-UNIQUE) (Cost=1 C
ard=1 Bytes=7)
Cost = outer access cost + (inner access cost * outer cardinality)
Cost = 2 + 1 * 82 = 84;
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
2020 consistent gets
23 physical reads
0 redo size
2650 bytes sent via SQL*Net to client
721 bytes received via SQL*Net from client
8 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
99 rows processed
2, t1作為驅(qū)動(dòng)表
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=6 Card=4 Bytes=56)
1 0 NESTED LOOPS (Cost=6 Card=4 Bytes=56)
2 1 TABLE ACCESS (FULL) OF 'T1' (Cost=2 Card=4 Bytes=28)
3 1 INDEX (RANGE SCAN) OF 'IND_T2_F1' (NON-UNIQUE) (Cost=1 C
ard=1 Bytes=7)
Cost = outer access cost + (inner access cost * outer cardinality)
Cost = 2 + 1 * 4 = 84;
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
11123 consistent gets
3 physical reads
0 redo size
2650 bytes sent via SQL*Net to client
721 bytes received via SQL*Net from client
8 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
99 rows processed
3.2, 哈希連接(hash join)
哈希連接分為兩個(gè)階段,如下。
1、 構(gòu)建階段:優(yōu)化器首先選擇一張小表做為驅(qū)動(dòng)表,運(yùn)用哈希函數(shù)對(duì)連接列進(jìn)行計(jì)算產(chǎn)生一張哈希表。通常這個(gè)步驟是在內(nèi)存(hash_area_size)里面進(jìn)行的,因此運(yùn)算很快。
2、 探測(cè)階段:優(yōu)化器對(duì)被驅(qū)動(dòng)表的連接列運(yùn)用同樣的哈希函數(shù)計(jì)算得到的結(jié)果與前面形成的哈希表進(jìn)行探測(cè)返回符合條件的記錄。這個(gè)階段中如果被驅(qū)動(dòng)表的連接列的值沒有與驅(qū)動(dòng)表連接列的值相等的話,那么這些記錄將會(huì)被丟棄而不進(jìn)行探測(cè)
哈希連接比較適用于返回大數(shù)據(jù)量結(jié)果集的連接。
使用哈希連接必須是在CBO模式下,參數(shù)hash_join_enabled設(shè)置為true,
哈希連接只適用于等值連接。從Oracle9i開始,哈希連接由于其良好的性能漸漸取代了原來的排序合并連接。
SQL select /*+ ordered use_hash(t1 , t2) */
t1.f1, t2.f1
from ctl.t1 t1,ctl.t2 t2
where t1.f1 = t2.f1 2 3 4 ;
999 rows selected.
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=5 Card=82 Bytes=1148
)
1 0 HASH JOIN (Cost=5 Card=82 Bytes=1148)
2 1 TABLE ACCESS (FULL) OF 'T1' (Cost=2 Card=82 Bytes=574)
3 1 TABLE ACCESS (FULL) OF 'T2' (Cost=2 Card=82 Bytes=574)
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
11113 consistent gets
0 physical reads
0 redo size
23590 bytes sent via SQL*Net to client
1381 bytes received via SQL*Net from client
68 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
999 rows processed
3.3, 排序合并連接(merge join)
排序合并連接的方法非常簡(jiǎn)單。在排序合并連接中是沒有驅(qū)動(dòng)表的概念的,兩個(gè)互相連接的表按連接列的值先排序,排序完后形成的結(jié)果集再互相進(jìn)行合并連接提取符合條件的記錄。相比嵌套循環(huán)連接,排序合并連接比較適用于返回大數(shù)據(jù)量的結(jié)果。
排序合并連接在數(shù)據(jù)表預(yù)先排序好的情況下效率是非常高的,也比較適用于非等值連接的情況,比如、=、=等情況下的連接(哈希連接只適用于等值連接)。由于Oracle中排序操作的開銷是非常消耗資源的,當(dāng)結(jié)果集很大時(shí)排序合并連接的性能很差,于是Oracle在7.3之后推出了新的連接方式——哈希連接。
1, rbo模式;
2, 不等于關(guān)聯(lián)( = = )
3, hash_join_enabled = false;
4, 數(shù)據(jù)源已排序
oracle中的乘法用*表示。
工具:oracle 10g,plsql
步驟:
1、打開plsql,登錄到指定數(shù)據(jù)。
2、創(chuàng)建一個(gè)查詢,輸入要計(jì)算的乘法公式,如計(jì)算5×7
select?5*7?from?dual;
3、對(duì)于小數(shù)也是同樣計(jì)算方法,但是可采用四舍五入的方式保留小數(shù),如0.23×0.5按四舍五入保留2位小數(shù)。
select?round(0.23*0.5,2)?from?dual;
1、?在計(jì)算機(jī)中,打開Oracle的連接程序,用新建的數(shù)據(jù)庫管理員,選擇【SQL工作表】。
2、?? 接著,在【Oracle服務(wù)器】的窗口上,在輸入窗口中輸入SQL查詢語句,并單擊【執(zhí)行】按鈕,可以看到表格當(dāng)前的數(shù)據(jù)。
3、?然后,在【SQL工作表】的窗口上,輸入取子串函數(shù)的SQL語句,可以作為參考。
4、接著,在【SQL工作表】的窗口上,輸入取子串函數(shù)的SQL語句,并單擊【執(zhí)行】按鈕。
5、?然后,在【SQL工作表】的窗口上,可以看到表格顯示的數(shù)據(jù)。
6、最后,在【SQL工作表】的窗口上,修改取子串函數(shù)的參數(shù),執(zhí)行SQL語句,就完成了。