Oracle中簡(jiǎn)單查詢(xún)、限定查詢(xún)、數(shù)據(jù)排序SQL語(yǔ)句范例和詳細(xì)注解
一、簡(jiǎn)單查詢(xún)
SQL(Structured Query Language) 結(jié)構(gòu)化查詢(xún)語(yǔ)言,是一種數(shù)據(jù)庫(kù)查詢(xún)和程序設(shè)計(jì)語(yǔ)言,用于存取數(shù)據(jù)以及查詢(xún)、更新和管理關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)。ANSI(美國(guó)國(guó)家標(biāo)準(zhǔn)學(xué)會(huì))聲稱(chēng),SQL是關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)的標(biāo)準(zhǔn)語(yǔ)言。
Oracle數(shù)據(jù)庫(kù)之所以發(fā)展的很好,主要也是因?yàn)镺racle是全世界最早采用SQL語(yǔ)句的數(shù)據(jù)庫(kù)產(chǎn)品。
SQL功能強(qiáng)大,概括起來(lái),它可以分成以下幾組:
DDL(Data Definition Language) 數(shù)據(jù)定義語(yǔ)言,用于定義數(shù)據(jù)的結(jié)構(gòu),創(chuàng)建、修改或者刪除數(shù)據(jù)庫(kù)對(duì)象
DCL(Data Control Language) 數(shù)據(jù)控制語(yǔ)言,用于定義數(shù)據(jù)庫(kù)的權(quán)限
簡(jiǎn)單查詢(xún)指的是查詢(xún)出一張表中的所有的數(shù)據(jù),簡(jiǎn)單查詢(xún)的語(yǔ)法如下:
范例:
SELECT * FROM dept;--查詢(xún)dept表的全部記錄 SELECT empno, ename, sal FROM emp;--查詢(xún)出每個(gè)雇員的編號(hào)、姓名、基本工資 SELECT job FROM emp;--查詢(xún)出每個(gè)雇員的職位。這個(gè)時(shí)候發(fā)現(xiàn)查詢(xún)出來(lái)的job內(nèi)容中出現(xiàn)了重復(fù)的數(shù)據(jù)。 SELECT DISTINCT job FROM emp;--使用DISTINCT消除掉所有的重復(fù)內(nèi)容。但是對(duì)于重復(fù)數(shù)據(jù),指的是一行中的每個(gè)列的記錄都重復(fù),才叫重復(fù)數(shù)據(jù)。 SELECT DISTINCT ename, job FROM emp;--查詢(xún)出每個(gè)雇員的姓名、職位 SELECT ename, job, sal*12 FROM emp;--使用各個(gè)數(shù)學(xué)的四則運(yùn)算符,要求顯示每一個(gè)雇員的姓名、職位、基本年薪 SELECT ename, job, sal*12 income FROM emp;--為顯示的查詢(xún)列起一個(gè)別名,對(duì)于別名,建議不要使用中文,只要是程序的開(kāi)發(fā),都要回避中文。 SELECT ename, job, (sal+300)*12 income FROM emp;--由于公司的福利很高,每個(gè)月都有200元的飯食補(bǔ)助以及100元車(chē)費(fèi)補(bǔ)貼,這個(gè)時(shí)候的年薪 SELECT ename, job, (sal+300)*12+sal income FROM emp;--公司每年的年底都會(huì)多發(fā)一個(gè)月的基本工資 SELECT empno || ',' || ename FROM emp;--在簡(jiǎn)單查詢(xún)中也可以使用“||”連接查詢(xún)的字段。 SELECT '雇員編號(hào)是:' || empno || '的雇員姓名是:' || ename || ',基本工資是:' || sal || ',職位是:' || job || '! ' 雇員信息 FROM emp;--要求現(xiàn)在的數(shù)據(jù)庫(kù)按照如下的格式顯示:“雇員編號(hào)是:7369的雇員姓名是:SMITH,基本工資是:800,職位是:CLERK!”
由于“,”屬于原樣輸出的字符串,所以必須使用“ ' ”括起來(lái),即:在SQL語(yǔ)句之中,“ ' ”表示的是字符串。
一定要記住,別名上的內(nèi)容不要使用“ ' ”括起來(lái),而只有在SELECT子句之中出現(xiàn)的內(nèi)容使用“ ' ”。
二、限定查詢(xún)
在之前的簡(jiǎn)單查詢(xún)中,是將所有的記錄進(jìn)行顯示,但是現(xiàn)在可以對(duì)顯示的記錄進(jìn)行過(guò)濾的操作,而這就屬于限定查詢(xún)的工作了,限定查詢(xún)就是在之前語(yǔ)法的基礎(chǔ)上增加了一個(gè)WHERE子句,用于指定限定條件,此時(shí)語(yǔ)法如下:
FROM 表名稱(chēng) [別名]
[WHERE 條件(S)];
在WHERE子句之后可以增加多個(gè)條件,最常見(jiàn)的條件就是基本的關(guān)系運(yùn)算:>、>=、< 、<=、!=(<>)、BETWEEN、AND、LIKE、IN、IS NULL、AND、OR、NOT;
1、關(guān)系運(yùn)算
SELECT * FROM emp WHERE sal>1500;--要求查詢(xún)出基本工資高于1500的所有雇員信息 SELECT * FROM emp WHERE job='clerk';--查詢(xún)出所有職位是辦事員的雇員信息 SELECT * FROM emp WHERE job='CLERK';--上面沒(méi)有返回相應(yīng)的查詢(xún)結(jié)果,主要原因是在Oracle數(shù)據(jù)庫(kù)中,所有的數(shù)據(jù)都是區(qū)分大小寫(xiě)的 SELECT * FROM emp WHERE sal>=1500 AND sal<=3000;--查詢(xún)工資在1500~3000之間的全部雇員信息,多個(gè)條件之間可以使用AND或OR進(jìn)行連接操作 SELECT * FROM emp WHERE job='CLERK' OR job='SALESMAN';--查詢(xún)出職位是辦事員,或者是銷(xiāo)售人員的全部信息 SELECT * FROM emp WHERE (job='CLERK' OR job='SALESMAN') AND sal>1200;--查詢(xún)出職位是辦事員,或者是銷(xiāo)售人員的全部信息,并且要求這些雇員的工資大于1200 SELECT * FROM emp WHERE job<>'CLERK';--查詢(xún)所有不是辦事員的雇員信息 SELECT * FROM emp WHERE job!='CLERK'; SELECT * FROM emp WHERE NOT job='CLERK';
2、范圍判斷:BETWEEN…AND…
“BETWEEN 最小值 AND 最大值”,表示的是一個(gè)范圍的判斷過(guò)程?!癇ETWEEN…AND…”操作符不光只是針對(duì)于數(shù)字有用,對(duì)于日期也同樣有用。
SELECT * FROM emp WHERE NOT sal BETWEEN 1500 AND 3000;--現(xiàn)在也可以對(duì)BETWEEN…AND…操作求反
SELECT * FROM emp WHERE hiredate BETWEEN '01-1月-1981' AND '31-12月-81';--要求查詢(xún)出在時(shí)間范圍內(nèi)的全部雇員信息
3、判斷是否為空:IS (NOT) NULL
使用此語(yǔ)法可以判斷某一個(gè)字段上的內(nèi)容是否是“null”,但是null和數(shù)字0以及空字符串是兩個(gè)概念。
SELECT * FROM emp WHERE NOT comm IS NULL;
SELECT * FROM emp WHERE comm IS NULL;--查詢(xún)出所有不領(lǐng)取獎(jiǎng)金的雇員
4、指定范圍的判斷:IN操作符
IN操作符表示的是指定一個(gè)查詢(xún)的范圍
SELECT * FROM emp WHERE empno=7369 OR empno=7566 OR empno=7799;--使用OR操作查詢(xún)出雇員編號(hào)是7369、7566、7799的雇員信息 SELECT * FROM emp WHERE empno IN (7369,7566,7799);--使用IN操作查詢(xún)出雇員編號(hào)是7369、7566、7799的雇員信息 SELECT * FROM emp WHERE empno NOT IN (7369,7566,7799);使用NOT IN操作查詢(xún)出雇員編號(hào)不是7369、7566、7799的雇員信息 SELECT * FROM emp WHERE empno IN(7369,7566,null);--使用了IN操作符,查詢(xún)的范圍之中存在了null,不影響查詢(xún); SELECT * FROM emp WHERE empno NOT IN(7369,7566,null);--使用的是NOT IN操作符,如果查詢(xún)范圍之中有了null則表示的就是查詢(xún)?nèi)繑?shù)據(jù)。
5、模糊查詢(xún):LIKE子句
LIKE子句的功能是提供了模糊查找的操作,例如:某些程序上出現(xiàn)的搜索操作,都屬于LIKE子句的實(shí)現(xiàn),但是必須提醒的,搜索引擎上的查詢(xún)可不是LIKE。但是要想使用LIKE子句則必須認(rèn)識(shí)兩個(gè)匹配符號(hào):
匹配任意多個(gè)字符:%; -> 0個(gè)、1個(gè)、多個(gè)
SELECT * FROM emp WHERE ename LIKE 'A%';--要求查詢(xún)雇員姓名中以字母A開(kāi)頭的全部雇員信息 SELECT * FROM emp WHERE ename LIKE '_A%';--要求查詢(xún)出雇員姓名中第二個(gè)字母是A的全部雇員信息 SELECT * FROM emp WHERE ename LIKE '%A%';--要求查詢(xún)出雇員姓名中帶有字母A的雇員 SELECT * FROM emp WHERE ename NOT LIKE '%A%';--使用NOT操作,對(duì)操作進(jìn)行求反的功能 SELECT * FROM emp WHERE ename LIKE '%1%' OR hiredate LIKE '%1%' OR sal LIKE '%1%';--對(duì)于LIKE子句,可以在任意的數(shù)據(jù)上表示:
在開(kāi)發(fā)之中,數(shù)據(jù)庫(kù)的模糊查詢(xún)肯定使用LIKE子句,但是在使用LIKE子句的時(shí)候有一個(gè)最大的注意點(diǎn):如果在模糊查詢(xún)上不設(shè)置任何的查詢(xún)關(guān)鍵字的話('%%')則表示查詢(xún)?nèi)坑涗洠?br />
三、數(shù)據(jù)的排序
當(dāng)數(shù)據(jù)返回查詢(xún)結(jié)果之后,所有的數(shù)據(jù)默認(rèn)情況下是按照雇員編號(hào)排序的,當(dāng)然,現(xiàn)在也可以使用”O(jiān)RDER BY”子句指定所需要的排序的操作列,而這個(gè)時(shí)候的SQL語(yǔ)法如下:
FROM 表名稱(chēng) [別名]
[WHERE 條件(S)]
[ORDER BY 字段 [ASC|DESC] [,字段 [ASC|DESC],…]];
“ORDER BY”子句是寫(xiě)在所有的SQL語(yǔ)句最后的內(nèi)容,而且對(duì)于排序有以下幾點(diǎn)說(shuō)明:
排序的時(shí)候可以指定多個(gè)排序的字段;
排序的方式有兩種:1、升序(ASC):默認(rèn),不寫(xiě)也是升序;2、降序(DESC):用戶(hù)需要指定,由大到小排序;
SELECT * FROM emp ORDER BY sal;--查詢(xún)所有的雇員的信息,要求按照工資排序 SELECT * FROM emp ORDER BY sal ASC; SELECT * FROM emp ORDER BY sal DESC;--進(jìn)行降序排列 SELECT * FROM emp ORDER BY sal DESC, hiredate ASC;--查詢(xún)出所有的雇員信息,按照工資由高到低排序,如果工資相同,則按照雇傭日期由早到晚排序
對(duì)于排序操作,一般只在需要的地方上使用,而且一定要記住的是,ORDER BY 子句是寫(xiě)在所有的SQL語(yǔ)句的最后的部分。
相關(guān)文章
給Oracle添加split和splitstr函數(shù)的方法
最近項(xiàng)目中有很多需要做批量操作的需求,客戶(hù)端把一組逗號(hào)分隔的ID字符串傳給數(shù)據(jù)庫(kù),存儲(chǔ)過(guò)程就需要把它們分割,然后逐個(gè)處理2012-11-11Win Oracle 監(jiān)聽(tīng)文件配置參考代碼實(shí)例
這篇文章主要介紹了Win Oracle 監(jiān)聽(tīng)文件配置參考代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10Oracle歸檔日志寫(xiě)滿(mǎn)(ora-00257)了怎么辦
今天在使用oracle數(shù)據(jù)庫(kù)做項(xiàng)目時(shí),突然報(bào)錯(cuò):ORA-00257: archiver error. Connect internal only, until freed,該問(wèn)題如何解決呢?經(jīng)過(guò)本人一番折騰此問(wèn)題還要?dú)w檔于日志滿(mǎn)了,下面小編把Oracle歸檔日志寫(xiě)滿(mǎn)(ora-00257)的解決辦法在此分享給大家供大家參考2015-10-10oracle合并列的函數(shù)wm_concat的使用詳解
本篇文章是對(duì)oracle合并列的函數(shù)wm_concat的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05Oracle數(shù)據(jù)庫(kù)如何創(chuàng)建第一張表
這篇文章主要介紹了Oracle數(shù)據(jù)庫(kù)如何創(chuàng)建第一張表,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09Oracle數(shù)據(jù)庫(kù)并行查詢(xún)出錯(cuò)的解決方法
這篇文章主要介紹了Oracle數(shù)據(jù)庫(kù)并行查詢(xún)出錯(cuò)的解決方法,需要的朋友可以參考下2014-07-07解決oracle12c創(chuàng)建用戶(hù)提示ORA-65096:公用用戶(hù)名或角色無(wú)效問(wèn)題
這篇文章主要介紹了解決oracle12c創(chuàng)建用戶(hù)提示ORA-65096:公用用戶(hù)名或角色無(wú)效問(wèn)題,需要的朋友可以參考下2019-08-08oracle執(zhí)行update語(yǔ)句時(shí)卡住問(wèn)題分析及解決辦法
這篇文章主要介紹了oracle執(zhí)行update語(yǔ)句時(shí)卡住問(wèn)題分析及解決辦法,涉及記錄鎖等相關(guān)知識(shí),具有一定參考價(jià)值,需要的朋友可以了解。2017-10-10Linux系統(tǒng)下Oracle數(shù)據(jù)庫(kù)監(jiān)聽(tīng)啟動(dòng)關(guān)閉命令詳解
現(xiàn)在很多朋友在學(xué)習(xí)linux下oracle 數(shù)據(jù)庫(kù)的時(shí)候可能都發(fā)現(xiàn)了一個(gè)問(wèn)題,oracle數(shù)據(jù)庫(kù)的服務(wù)不能自動(dòng)啟動(dòng),這篇文章主要給大家介紹了關(guān)于Linux系統(tǒng)下Oracle數(shù)據(jù)庫(kù)監(jiān)聽(tīng)啟動(dòng)關(guān)閉命令的相關(guān)資料,需要的朋友可以參考下2024-01-01