oracle sql 常用语句大全,SQL常用语句大全
1. 簡單查詢語句
1.1 查詢全部:
SELECT * FROM 表名稱 ;
1.2 實際上簡單查詢語句語法格式就是:
SELECT * | 具體的列 別名FROM 表名稱 ;
查詢所有
1.3 如果現在假設,只需要查詢出雇員的編號、姓名、工作的話,則就需要指定查詢的列:
SELECT empno,ename,job FROM emp ;
返回列指定的名稱
1.4 要求查詢出某一列,肯定要查詢的是某一個字段:
SELECT job FROM emp;
查詢指定字段
以上的查詢結果似乎有一些不妥。因為工作存在重復值,既然要查詢的是工作,所以肯定應該將重復的內容消除掉,所以在查詢的時候可以通過 DISTINCT 直接消除掉所有的重復列。
SELECT {DISTINCT} * | 具體的列 別名FROM 表名稱 ;
但是,在消除重復列的時候,有一點必須說明,如果要同時查詢多列,則必須保證所有列都重復才能消除掉。
例如:查詢雇員的編號及工作
SELECT DISTINCT empno,job FROM emp ;
篩選掉重復的
因為雇員編號不重復,所以此時證明所有的列沒有重復的,所以不能消除掉。
1.5 要求查詢出雇員的編號,姓名,工作,但是顯示的格式:
編號是:7369 的雇員,姓名是:SMITH,工作是:CLERK
要想實現此種功能,則可以使用 Oracle 中提供的字符串連接操作,使用“||”表示。如果要加入一些顯示信息的話,所有的其他的固定信息要使用“'”括起來。
SELECT '編號是:' || empno || '的雇員,姓名是:' || ename || ',工作是:' || jobFROM emp ;
按指定格式返回
1.6 在查詢中也可以使用四則運算功能,例如:要求,求出每個雇員的姓名及年薪。
SELECT ename , sal * 12 FROM emp ;
查詢返回年薪
在程序中 sal*12 意義很不明確,所以最好為這個運算結果起一個別名,但是在起別名的時候一定要回避中文。
SELECT ename , sal * 12 incomeFROM emp ;
程序中可以支持+、-、*、/的語句,所有的語句要有優先順序,先乘除后加減。
2. 限定查詢(WHERE子句)
2.1 如果希望可以根據指定的條件查詢的話,則必須指定限定查詢。限定查詢的語法:
SELECT {DISTINCT} * | 具體的列 別名FROM 表名稱{WHERE 條件(s)}
2.1.1 范例:查詢出工資大于 1500 的所有雇員信息
· 數學計算中,工資大于:sal>1500
SELECT * FROM emp WHERE sal>1500 ;
根據條件查詢
2.1.2 范例:查詢每月可以得到獎金的雇員信息
·獎金是 comm 字段
·只要字段中存在內容,則表示此內容不為空(null),如果存在內容,則會顯示具體的值。
·不為空的表示:字段 IS NOT NULL
SELECT * FROM emp WHERE comm IS NOT NULL ;
查詢每月可以得到獎金的雇員
2.1.3 范例:查詢沒有獎金的雇員
沒有獎金則 comm 字段的內容肯定是 null,格式:字段 IS NULL
SELECT * FROM emp WHERE comm IS NULL ;
查詢沒有獎金的雇員
2.1.4 范例:要求查詢出,基本工資大于 1500,同時可以領取獎金的雇員信息。
· 此時應該是兩個條件,而且兩個條件必須同時滿足;
· 既然要求兩個條件全部滿足,則必須使用 AND 操作符進行條件的連接。
SELECT * FROM emp WHERE sal>1500 AND comm IS NOT NULL ;
基本工資大于 1500,同時可以領取獎金
同時指定了兩個條件,兩個條件必須同時滿足才可以查詢出結果。
2.1.5 范例:要求查詢出,基本工資大于 1500,或者可以領取獎金的雇員信息。
· 如果要表現出或者的概念使用 OR 進行連接,表示兩個條件有一個滿足即可。
SELECT * FROM emp WHERE sal>1500 OR comm IS NOT NULL ;
基本工資大于 1500,或者可以領取獎金
之前使用 NOT 可以取反,把真的條件變為假的,假的變為真的。
2.1.6 范例:要求查詢出,基本工資不大于 1500,同時不可以領取獎金的雇員信息。
· 此時相當于是整體的條件取反。
SELECT * FROM emp WHERE NOT (sal>1500 AND comm IS NOT NULL) ;
基本工資不大于 1500,同時不可以領取獎金
從程序中可以發現,通過括號表示一組的條件。
2.1.7 范例:查詢基本工資大于 1500,但是小于 3000 的全部雇員信息
· 滿足兩個:sal > 1500 ,sal < 3000
SELECT * FROM emp WHERE sal>1500 AND sal<3000 ;
工資大于 1500,但是小于 3000 的全部雇員
在 SQL 語法中,提供了一個專門的指定范圍查詢的過濾語句:BETWEEN...AND....
語法格式:
字段 BETWEEN 最小值 AND 最大值
2.1.8 范例:使用 BETWEEN...AND 修改之前的操作
SELECT * FROM emp WHERE sal BETWEEN 1500 AND 3000;
1500-3000
實際上 BETWEEN ... AND 操作等價:sal>=1500 AND sal<=3000,包含了等于的功能。
2.1.9 范例:查詢出在 1981 年雇傭的全部雇員信息
· 1981年1月1日 ~ 1981年12月31日之間雇傭的雇員· 日期表示的時候要加“ ' ”
SELECT * FROM empWHERE hiredate BETWEEN '1-1 月 -81' AND '31-12 月-81' ;
1981年1月1日 ~ 1981年12月31日
結論:BETWEEN ... AND 查詢除了可以支持數字之外,也可以支持日期的查詢· 隨著深入的學習會發現,日期實際上也是以數字的形式表示出來。
2.1.10 范例:要求查詢出姓名是 smith 的雇員信息· 此時告訴了要查詢的名字,條件:ename='smith'
SELECT * FROM emp WHERE ename='smith' ;
執行以上的查詢語句之后,并不會返回查詢結果,再次查詢數據庫表的信息,發現 smith 是采用大寫的形式表示的,在 Oracle 中是對大小寫敏感的,所以此時在查詢的時候必須以大寫的形式進行條件的編寫。代碼修改如下:
SELECT * FROM emp WHERE ename='SMITH' ;
大小寫敏感
2.1.11 范例:要求查詢出雇員編號是 7369、7499、7521 的雇員的具體信息· 如果此時按照之前的做法,則設置條件要使用 OR 連接:
|- empno=7369 OR empno=7499 OR empno=7521
SELECT * FROM empWHERE empno=7369 OR empno=7499 OR empno=7521 ;
多條件用OR連接
實際上,此時是指定了查詢的范圍,那么既然有范圍了在 SQL 語法中就可以使用 IN 操作符完成。
語法格式:
字段 IN (值 1,值 2,.....,值 n)
如果現在要求查詢的內容不在此范圍之中,則可以使用 NOT IN,語法如下:
字段 NOT IN (值 1,值 2,.....,值 n)
范例:使用以上的格式進行修改
SELECT * FROM empWHERE empno IN (7369,7499,7521) ;
IN 和 NOT IN
2.1.12 范例:要求查詢出雇員編號不是 7369、7499、7521 的雇員的具體信息
SELECT * FROM empWHERE empno NOT IN (7369,7499,7521) ;
查詢出雇員編號不是
另外,需要說明的是,使用 IN 操作符不光可以用在數字上,也可以用在字符串的信息上。
2.1.13 范例:要求查詢出姓名是 SMITH、ALLEN、KING 的雇員信息
SELECT * FROM empWHERE ename IN ('SMITH','ALLEN','KING') ;
85E0FF9C-1338-4822-8CC0-E3F04B6D4D7F.png
提示: 如果在指定的查詢范圍中指定了額外的內容,則不影響程序運行。
SELECT * FROM empWHERE ename IN ('SMITH','ALLEN','KING','#$#$$##$') ;
在一般的日常見到的站點中經常發現有模糊查找功能,即:輸入一個指定的關鍵字,把符合的內容全部查詢出來,在 SQL 中使用 LIKE 語句完成。
在使用 LIKE 語句的時候要注意通配符的問題,在 LIKE 語句中主要使用以下兩種通配符:
· “%”:可以匹配任意長度的內容
· “_”:可以匹配一個長度的內容
2.1.14 范例:查詢出所有雇員姓名中第二個字母包含“M”的雇員信息
SELECT * FROM empWHERE ename LIKE '_M%' ;
查詢出所有雇員姓名中第二個字母包含“M”的雇員信息
2.1.15 范例:查詢出雇員姓名中包含字母 M 的雇員信息· 此時,表示可以在任意的位置上出現字母 M
SELECT * FROM empWHERE ename LIKE '%M%' ;
任意的位置上出現字母 M
但是,要提醒大家的是:“如果在使用 LIKE 的時候沒有指定查詢的關鍵字,則表示查詢全部”
SELECT * FROM empWHERE ename LIKE '%%' ;
將所有的記錄都查詢出來了。
所有記錄
使用 LIKE 還可以方便的進行日期的查找功能。
2.1.16 范例:要求查詢出在 1981 年雇傭的雇員信息
SELECT * FROM empWHERE hiredate LIKE '%81%' ;
在 1981 年雇傭的雇員信息
2.1.17 范例:查詢工資中包含 6 的雇員信息
SELECT * FROM empWHERE sal LIKE '%5%' ;
工資中包含 6 的雇員信息
在操作條件中還可以使用:>、>=、=、”、“!=”范例:查詢雇員編號不是 7369 的雇員信息
· 使用“<>”完成
SELECT * FROM emp WHERE empno<>7369
· 使用“!=”完成
SELECT * FROM emp WHERE empno!=7369 ;
不等于
2.2 對結果進行排序(ORDER BY子句)
在 SQL 中可以使用 ORDER BY 子句對查詢的結果進行排序,例如,現在使用查詢全部的語句:
SELECT * FROM emp ;
返回所有數據
此時,從查詢結果可以發現,是按照雇員的編號進行排序的,那么此時如果要對使用指定的列進行排序,則就必須使用 ORDER BY 語句,語法格式如下:
SELECT {DISTINCT} * | 具體的列 別名 FROM 表名稱 {WHERE 條件(s)} {ORDER BY 排序的字段 1,排序的字段 2 ASC|DESC} ASC 表示升序、DESC 表示降序
范例:要求按照工資由低到高排序
SELECT * FROM emp ORDER BY sal ;
排序后返回
之前是按照由低到高的順序完成,是采用的升序的形式,現在要求使用降序的形式完成。實際上如果在排序的時候沒有指定排序規則,則默認的排序規則是升序排列。
SELECT * FROM emp ORDER BY sal ASC ;
默認是升序
要想使用降序的方式完成,則使用 DESC 即可。
SELECT * FROM emp ORDER BY sal DESC ;
降序
范例:要求查詢出 10 部門的所有雇員信息,查詢的信息按照工資由高到低排序,如果工資相等,則按照雇傭日期由早到晚排序。
· 此時存在兩個排序條件,第一個是降序,第二個升序
SELECT * FROM emp WHERE deptno=10 ORDER BY sal DESC,hiredate ASC ;
兩個條件排序
3. 單行函數
數據庫系統中,每個數據庫之間唯一不同的最大區別點就在與函數的支持上,使用函數可以完成一系列的操作功能。
單行函數語法:
function_name(column|expression,[arg1,arg2,...])
參數說明:
· function_name:函數名稱
· column:數據庫列名
· expression:字符串或計算表達式
· arg1,arg2:在函數中使用參數
單行函數分類:
· 字符函數:接受字符輸入并且返回字符或數值
· 數值函數:接受數值輸入并返回數值
· 日期函數:對
·日期型數據進行操作
· 轉換函數:從一種數據類型轉換為另一種數據類型
· 通用函數:NVL 函數、DECODE 函數
3.1 字符函數
字符函數是專門處理字符的,例如,可以將大寫字符變為小 ,還能求出字符的長度。
范例:將小寫字母變為大寫字母
SELECT UPPER('smith') FROM DUAL ;
返回
范例:一般用戶在查詢一個人姓名的時候有可能考慮到這個人的姓名是大寫字母存的還是小寫字母保存的呢?
· 那么此時,為了方便用戶的使用就可以使用 upper 函數完成。
SELECT * FROM emp WHERE ename=UPPER('Smith') ;
返回
還可以使用 lower()函數將一個字符串變為小寫字母表示。
SELECT LOWER('HELLO WORLD') FROM dual ;
返回
還可以使用 initcap()函數將單詞的第一個字母大寫
SELECT INITCAP('HELLO WORLD') FROM dual ;
返回
范例;使用此函數將雇員表中的雇員姓名變為開頭字母大寫
SELECT INITCAP(ename) FROM emp ;
大寫字母開頭
字符串除了可以使用“||”連接之外,還可以使用 CONCAT()函數進行連接操作。
SELECT CONCAT('hello ','world') FROM DUAL ;
連接
此時已經完成了連接,但是此種方式肯定不如“||”好使。在字符函數中可以進行字符串的截取、求出字符串的長度、進行指定內容的替換
· 字符串截取:substr()
· 字符串長度:length()
· 內容替換:replace()
SELECT substr('hello',1,3) 截取字符串 , length('hello') 字符串長度 , replace('hello','l','x') 字符串替換 FROM DUAL ;
截取字符串
· Oracle 中 substr()函數的截取點是從 0 還是從 1 開始。
|- 從 0 或從 1 開始效果是一樣的,因為 Oracle 比較智能。
范例:要求顯示所有雇員的姓名及姓名的后三個字符
· 因為雇員姓名的字符串長度不一樣,所以只能求出整個的長度再減去 2,這樣進行截取操作。
SELECT ename,SUBSTR(ename,LENGTH(ename)-2) FROM emp ;
截取
此時,功能已經實現了,但是操作比較麻煩。實際上在 substr()函數中提供了一種非常方便的機制,可以采用倒著截取的方式,只要輸入的位置是負數就表示倒著進行。
SELECT ename,SUBSTR(ename,-3,3) FROM emp ;
3.2 數值函數
數值函數只要是包含以下幾種:
· 四舍五入:ROUND()
· 截斷小數位:TRUNC()
· 取余(取模):MOD
范例:執行四舍五入操作
SELECT ROUND(789.536) FROM dual ;
四舍五入
當然,在 ROUND()函數中也可以指定四舍五入的位數
范例:保留兩位小數
SELECT ROUND(789.536,2) FROM dual ;
保留兩位小數
在使用 ROUND()函數中還有一點非常有意思,可以直接對整數進行四舍五入的進位。
SELECT ROUND(789.536,-2) FROM dual ;
back
TRUNC()與 ROUND()不同的是,在 TRUNC()操作中,不會保留任何的小數,而且小數點也不會執行四舍五入的操作。
范例:驗證 TRUNC()函數
SELECT TRUNC(789.536) FROM DUAL ;
back
范例:通過 TRUNC()也可以指定小數點的保留位數
SELECT TRUNC(789.536,2) FROM DUAL ;
back
范例:使用負數表示位數
SELECT TRUNC(789.536,-2) FROM DUAL ;
back
范例:使用 MOD()函數可以進行取余的操作
SELECT MOD(10,3) FROM DUAL ;
back
喜歡的朋友可以點一點關注。
總結
以上是生活随笔為你收集整理的oracle sql 常用语句大全,SQL常用语句大全的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android实现gif背景透明,透明G
- 下一篇: led灯什么牌子的质量好?能够护眼的LE