SQL是結構化查詢語言( Structured Query Language)的縮寫,它是目前關系數據庫系統中通用的標准語言。
SQL在字面上雖然稱為結構化查詢語言,實際上它還包括數據操縱、數據定義、事務控制、安全控制等一系列命令。
SQL操作的基本對象是表,也就是關系。
它可以對表中的數據進行查詢、增加、刪除、修改等常規操作,還可以維護表中數據的一致性、完整性和安全性,能夠滿足從單機到分布式系統的各種應用需求。
SQL是一種非過程化的語言,用戶在使用SQL操作數據時,只需要告訴系統做什麼,而不需要關心怎麼做,系統會根據用戶的意圖自動完成相應的操作。
由於SQL的這一特點,它被人們稱為“第四代語言”(4GL ),以區別於面向過程的高級語言。
用SQL語言編寫的SQL語句有兩種執行方式,一種是聯機交互方式, SQL語句在一定的平台上執行,例如數據庫管理系統提供的實用程序。
這個執行平台將SQL語句提交給數據庫服務器,並將從數據庫服務器返回的執行結果顯示給用戶。
另一種方式是嵌入方式,用戶在用C/C++ 、Java等高級語言編寫應用程序時,可能需要操作數據庫中的數據,這時SQL作為一種嵌入式語言,嵌入到高級語言程序中,通過數據庫接口;如ODBC 、JDBC訪問數據庫中的數據。
SQL包括一系列命令,可以滿足對數據的各種訪問。
按照通用的分類標准, SQL命令分為以下幾種類型:
·查詢命令包括SELECT命令
•DML命令包括INSERT 、DELETE 、UPDATE命令
•DDL命令包括CREATE 、D·ROP 、ALTER 、RENAME 、TRUNCATE命令
·事務控制命令包括COMMIT 、ROLLBACK 、SAVEPOINT命令
•DCL命令包括GRANT 、REVOKE命令
命令和相關的參數一起構成了SQL語句。
查詢語句
查詢語句是使用最為頻繁的數據庫訪問語句,對應的SQL命令是SELECT 。
雖然只有一條命令,但是由於它有靈活多樣的形式,以及功能強大的子句,可以組成各種復雜的查詢語句,能夠完成各種復雜的查詢。
SELECT語句可以根據用戶的要求查詢數據庫中的數據,並且可以對它們進行簡單的計算和統計。
最簡單的SELECT語句只有一個FROM子句,格式如下:
SELECT 表達式 FROM 表名稱;
其中SELECT之後引導一個或多個列名,或者表達式,用來指定需要查詢的列,或者對數據所進行的計算。
在FROM子句指定一個或多個表名,用來指定本次查詢所涉及的表。
查詢的結果是返回一行或多行數據,每行由一個或多個列的列值組成。
完整的SELECT語句包括WHERE 、ORDER 、GROUP等子句。格式如下:
SELECT 表達式
FROM 表名
WHERE 條件
GROUP BY 列名
HAVING 條件
ORDER BY 表達式
SELECT語句最靈活的用法體現在WHERE子句中的查詢條件,這個條件用來指定查詢什麼樣的數據。
查詢語句的基本用法
如果要查詢某個表中一個或多個列的數據,需要在SELECT 命令之後指定列名,並在FROM子句中指定查詢所涉及的表。
格式如下:
SELECT 列名稱列表 FROM 表名稱;
查詢的結果是從指定的表中將指定列的數據顯示出來。
這樣的語句可以在Oracle提供的實用工具SQL*Plus 中執行,也可以在其他實用工具或應用程序中執行。
SQL語句中除字符串外,各個部分是大小寫不敏感的。
如果在SQL*Plus 中執行SQL語句,還要在語句末尾加上一個分號。
分號並不是SQL語句的一部分,只是語句結束的標志。
一條句可以在一行中書寫,也可以分行書寫。
如果要查詢表中的所有的列,可以用“*”符號代替所有的列名。
如果不了解表的結構,可以在SQL*Plus 中執行命令DESCRIBE (簡寫為DESC ),查看表的結構。
這個命令的參數是表名,或者其他對象名。
注意,這條命令不是SQL 命令,而是SQL*Plus 中的命令。
在默認情況下,在顯示數據時,各列的標題就是列的名稱。
在SELECT語句中可以定義列的別名,這樣在顯示數據時,列的標題就是這個別名,在整個SQL語句中都可以使用這個別名。
使用別名的SELECT語句格式為:
SELECT 列1 AS 別 名1 ,列2 AS 別名2 •••
或者在列名後直接指定別名,省略AS 關鍵字。
在查詢結果中如果有重復行,可以使用DISTINCT關鍵字去掉重復行的顯示。
重復行是指在SELECT語句中涉及的所有列的列值完全相同的行。
SELECT語句不僅可以進行簡單的查詢,還可以對查詢的列進行簡單的計算,也可以在兩個列之間進行計算,或者將某個列與其他表達式,或者兩個表達式進行計算。
使用||運算符可以將兩個數據連接起來。
無論是數字型還是日期型數據,在進行這種運算時,都可以看做是字符型數據。
通過||運算符,用戶可以設計自己喜歡的數據顯示方式,如將兩個列的值連接起來,也可以將列的值與其他文字連接起來。
連接以後所得的數據可以當做一個列來顯示。
如果在SQL語句中使用了字符串,必須用一對單引號將字符串限定,並且字符串中的字符是大小寫敏感的。
加減乘除四則運算在SELECT語句中比較簡單,需要住意的是空值的計算。
空值與其他數據進行四則運算時,結果將得到空值,而不管它與什麼樣的數據運算。
為了解決空值的計算問題, SQL提供了一個函數,這個函數是NVL ,它的功能是把空值轉換為其他可以參加運算的數據。
這個函數的調用格式是:
NVL (表達式,替代值)
當表達式的結果為空時,這個函數就把表達式的值用指定的值代替。
SELECT命令還可以用來計算一個普通表達式的值,這個表達式可能與表沒有任何關系。
為了解決表達式與表無關的問題,Oracle提供了一個特殊的表dual。
查詢語句中的條件
如果希望只查詢一部分行,那麼可以通過WHERE子句指定條件。WHERE子句的作用是通過指定條件,使SELECT語句僅僅查詢符合條件的行。
在更多情況下,都需要根據指定的條件對數據進行查詢。
WHERE子句指定的條件是一個關系表達式,如果關系表達式的結果為真,則條件成立,否則條件不成立。
關系表達式用於比較兩個表達式的大小,或者進行模糊匹配,或者將一個表達式的值與一個集合中的元素進行匹配。
關系運算符
=!=>=<=
LIKE
IN
BETWEEN
AND OR
NOT
IS NULL
LIKE運算符通常用來進行字符串的模糊匹配,而“=”運算符只能對字符串進行精確比較。
在LIKE指定的關系表達式中可以使用兩個通配得:%和_,其中%可以代替多個字符,_可以代替一個字符。
注意,%用來代替多個連續的字符,包括空字符串,而_只能用來代替一個字符,包括空字符。
IN運算符用來與一個集合中的元素進行比較。
SELECT語句將指定的表達式與集合中的元素一一比較,只要與其中-個相等,則條件成立。
如果沒有任何一個元素與表達式的值相等,則條件不成立。
BETWEEN運算符用於將表達式的值與兩個指定數據進行比較,如果表達式的值在這兩個數據之間,則條件成立。
這兩個數據和表達式必須能夠比較大小,而且後一個數據必須大於前一個數據。
在復雜的查詢語句中,可能需要多個條件,這些條件通過AND或OR運算符連接。
多個條件表達式連接起來以後,就構成一個邏輯表達式。
邏輯表達式的結果要麼為真,要麼為假,它是與兩個關系表達式的值和所使用的連接運算有關的。
NOT運算符的作用是對關系表達式的值取反。
它的用法是在關系表達式之前加上NOT運算符。
注:取反運算符- 是對數值型數據取反。
在默認情況下, NOT運算符只對最近的一個關系表達式取反,如果要對已經通過AND或OR連接的多個關系表達式同時取反,則要用一對圓括號將多個關系表達式限定。
在WHERE子句中構造條件時,還要注意空值的運算。空值與任何數據進行賦值運算、四則運算以及關系運算時,結果都為空值。
查詢語句中的單行函數
在SELECT語句中不僅可以對數據進行前面講述的各種運算,還可以把數據作為函數的參數,進行其他的計算。
所謂單行函數,就是分別作用於查詢結果中的每一行,對於每一行,分別得到一個計算結果。
這些函數都是Oracle提供的系統函數,用戶可以在SELECT語句或其他SQL語句中直接使用它們。
Oracle提供的函數很多,這裡僅僅把最常用的函數進行分類介紹。
在函數中處理的數據可以是某個列的列值,也可以是某個表達式。
1.字符串處理函數
顧名思義,這類函數以字符串為處理對象,處理的結果是另一字符串或者一個數字。
(1)CONCAT函數
這個函數的參數是兩個字符串,計算的結果是將兩個字符串連接在一起,生成一個新的字符串。
例如
SELECT CONCAT('A', 'B') FROM dual;
(2)CHR與ASCII函數
CHR函數的參數是一個正整數,它將這個正整數作為ASCII碼,返回對應的字母。
ASCII 函數的作用正好相反,它以一個字符為參數,返回這個字符對應的ASCII碼。
例如:
SELECT CHR(32), ASCII('A') FROM dual;
(3)INSTR函數
這個函數在一個字符串中查找另一個字符串,如果找到,則返回出現的位置,否則返回0,位置的編號從l 開始。
這個函數的語法格式為:
INSTR(字符串, 子字符串, start, occurrence)
其中前兩個參數是必需的,這個函數在第一個參數中查找第二個參數,得到的結果是第二個參數在第一個參數中出現的位置,如果沒有找到,則返回0 。
後兩個參數是可選的,參數start指定從第一個參數的什麼位置開始查找,默認從l 開始,即第一個字符。
參數occurrence指定查找子字符串的第幾次出現。
(4)LENGTH函數
這個函數的作用是求得一個字符串的長度。
(5)LOWER和UPPER函數
這兩個函數的作用是進行字符串的大小寫轉換,它們的參數都是一個字符串。
其中LOWER 函數將字符串中的字母轉換為對應的小寫字母, UPPER 函數將字符串中的字母轉換為對應的大寫字母。
(6)LPAD和RPAD函數
這兩個函數的作用是在字符串中填充指定的字符,使字符串達到指定的長度。
LPAD 函數從左邊填充, RPAD 函數從右邊填充,處理的結果是得到一個新的字符串。
這兩個函數的語法格式為:
LPAD(字符串,長度,填充字符)
RPAD(字符串,長度,填充字符)
這兩個函數在字符串中填充指定的字符,使其達到指定的長度,默認是填充空格。
如果指定的長度比字符串本來的長度小,則將字符串截斷,只保留新的長度。
注:在截斷字符串時,都是截斷字符串右邊的部分。
(7)LTRIM、RTRIM函數和TRIM函數
這三個函數的作用是去掉字符串左邊或右邊連續的空格,並得到一個新的字符串。
TRIM 函數的作用是同時去掉字符串左邊和右邊的連續空格,它相當於對字符串先執行LTRIM 函數,再執行RTRIM 函數,或者先執行RTRIM 函數,再執行LTRIM 函數。
注:這三個函數只能去除字符串左邊或右邊的空格,對於字符串中間的空格是不能去除的。
(8)REPLACE函數
這個函數的作用是在一個字符串中查找另一個字符串,並將找到的字符串用第三個字符串代替。
這個函數的語法格式為:
REPLACE(字符串,子字符串,替換字符串)
如果在字符串沒有找到子字符串,則不做任何處理,如果找到,則用替換字符串代替。
如果沒有指定替換字符串,就將找到的子字符串從原字符串中刪除。
(9)SUBSTR函數
這個函數的作用是根據指定的開始位置和長度,返回一個字符串的子字符串。
它的語法格式為:
SUBSTR(字符串,開始位置,長度)
位置編號從l 開始。
開始位置可以是正整數或負整數。
如果是負整數,則從字符串的右邊開始數。
長度是可選的,如果缺省,則返回從開始位置到字符串末尾的所有字符。
注:開始位置是負整數時,從字符串右邊開始數,但是長度扔往右邊算。
2.數學函數
數學函數的處理對象是數字型數據,處理的結果一般也是數字型數據。
(1)ABS函數
這個函數的作用是求得一個數字的絕對值。
(2)CEIL和FLOOP函數
這兩個函數都以一個數字為參數, CEIL 函數返回大於或等於這個數字的最小整數。
FLOOR 函數返回小於或等於這個數字的最大整數。
(3)MOD函數
這個函數有兩個參數,結果是兩個數相除所得的余數。
(4)ROUND和TRUNC函數
ROUND 函數的作用是對數據進行四捨五入計算。
這個函數的語法結構為:
ROUND(數據,捨入位置)
其中捨入位置可以是正整數,也可以是負整數。
如果是正整數,則從小數點開始向右數,一直到捨人位置,從這一位開始四捨五入。
如果是負整數,則從小數點開始向左數,然後進行四捨五入。
TRUNC 函數的用法與ROUND 函數類似,只不過它的功能是對數據進行截取運算,只捨不入,也就是把一個數據的指定位之後的數字全部捨去。
3.日期型函數
日期型函數的處理對象是日期型數據,處理的結果一般也是日期型數據。
(1)ADD_MONTHS函數
這個函數在某個日期的基礎上,加上一個指定的月數,返回一個新的日期。
它的格式為:
ADD_MONTHS(日期,月數)
這個函數是在指定的日期上加上若干個整月數,所以日期中的日應該保持不變。
但是指定的日期如果是當月的最後一天,函數會做相應的調整,以保證返回的日期也是當月的最後一天。
在ADD_MONTHS 函數中,不能直接使用類似“ 12-05-1 。”這樣的日期型數據,因為Oracle把這樣的數據是當做字符串來處理的,所以首先要調用to_date 函數將它轉換為真正的日期型數據。
(2)LAST_DAY函數
這個函數返回指定日期所在月份的最後一天。
(3)MONTHS_BETWEEN函數
這個函數有兩個參數,都是日期型數據,返回的結果是兩個日期之間相差的月數。
這個函數的語法格式為: months_between (日期1 ,日期2 )。
如果兩個日期中的日相同,或者都是當月的最後一天,則返回結果是一個整數,否則將返回一個小數。
第一個參數如果比第二個參數小,則返回的結果為負數。
(4)NEXT_DAY函數
這個函數有兩個參數,一個是日期,一個是與星期幾對應的整數,返回的結果是這個日期之後最近的星期幾所對應的日期。
函數的調用格式為:
NEXT_DAY(日期,整數)
(5)ROUND函數
這個函數對指定的日期進行四捨五入處理。
它有兩個參數,一個是日期,一個是表示日期某個組成部分的格式字符串。
函數的語法格式為:
ROUND(日期,格式字符串)
其中格式字符串用於指定從日期的哪一部分開始四捨五入。
Oracle支持的格式宇符串包括yy (或yyyy )、mm 、dd 、hh ,分別表示從年、月、日、時位進行四捨五入。
(6)SYSDATE函數
這是個很常用的函數,它用來獲得系統當前時間。
在有些日志操作中,常常需要記錄當前時間,使用這個函數是很方便的。
這個函數沒有任何參數。
這個函數返回的時間可以精確到秒,但在顯示時可能只顯示到日,根據系統的不同顯示格式有所變化。
如果希望得到時、分、秒,則需要通過to_char 函數進行數據類型轉換。
(7)TRUNC函數
這個函數的功能類似於ROUND 函數,但是它不進行四捨五入,而是從指定位開始,截斷其後面的部分,它的語法格式與ROUND 函數相同。
類型轉換函數
在進行數據處理時,常常需要對數據進行類型轉換。
數據類型轉換主要涉及字符型、數字型和日期型數據之間的相互轉換, 涉及的函數有to_char 、to_date和to_number 。
(1)TO_CHAR
to_char函數的作用是將一個日期型或者數字型數據轉換為字符串。
如果操作對象是日期型數據,這個函數的語法格式為:
TO_CHAR(日期,格式字符串)
其中格式字符串是由日期格式元素和隔離符號組成的字符串,用來規定轉換的格式。
如果沒有指定格式字符串,則按照當前系統默認的時間格式轉換為字符串。
格式元素 說明
-/| 日期中不同部分的分隔符。實際上除數字、字母以外的任何可顯示字符都可以作為分隔符
yyyy yy 年的表示。其中yyyy表示4位數的年. yy表示兩位數的年
month mon mm 月的表示。month表示月份的全稱。mon表示月份名稱的縮寫。mm表示兩位數字的月份
dd ddd 日的表示。dd表示兩位數字的日. ddd表示在一年中的編號
d dy day 星期的表示。d表示數字編號, dy 表示星期的縮寫, day星期的全稱
hh hh24 小時的表示,分別表示12小時制和24小時制
am pm 分別表示12小時制中的上午和下午
mi SS 分別表示兩位數的分、秒
如果操作對象是數字型數據, to_char 函數的語怯格式為:
TO_CHAR(數字,格式字符串)
其中格式字符串是由數字格式元素和小數點、分隔符組成的字符串,用來控制轉換的格式。
這種轉換主要用在財務報表中。
(2)TO_DATE函數
這個函數的作用是把一個字符串轉換為一個日期型數據,它有兩個參數,處理的結果是一個日期型數據。
這個函數的語法格式為:
TO_DATE(字符串,格式字符串)
格式字符串中的每部分對字符串中的每部分是一一對應地進行解釋的,所以日期字符串中的每一部分對於格式字符串中的對應部分來說,必須是合法的數據。
(3)TO_NUMBER函數
這個函數的作用是把一個字符串轉換為數字,它有兩個參數,處理的結果是一個數字型數據。
這個函數的語法格式為:
TO_NUMBER(字符串,格式字符串)
格式元素 說明
, 格式化數字中逗號的位置
. 小數點的位置
9 代表一位十進制數
0 代表一位十進制數,當對應位沒有數字時,以0填充
$ 在數字前面加上$符號
L 在數字前面加上本地貨幣符號
分組函數與分組統計
分組函數又稱為聚集函數,是一種多行函數。
之所以稱為多行函數,是與單行函數對應的,因為這種函數對多行數據一起進行計算,只返回一個結果,而不是每行都返回一個結果。
聚集函數主要用來進行數據的統計,常用的聚集函數有以下幾個:
•AVG 求平均值
•MIN 求最小值
•MAX 求最大值
•SUM 求和
•COUNT 計數
(1) AVG 函數
AVG 函數用來求指定列上的平均值,它將自動忽略列上的空值。
如果要去掉重復值的計算,可在列名前加上DISTINCE選項。
(2) MIN與MAX 函數
MIN 函數的作用是求指定列的最小值, MAX 函數的作用是求指定列的最大值。
這兩個函數都自動忽略空行。
(3) COUNT 函數
COUNT函數用來計算數據的行數。
在默認情況下,這個函數不計算空行。
如果要計算空行,可以用“*”代替列名。
如果要去掉重復值的計算,可在列名前加上DISTINCE選項,這樣如果遇到重復值,只計算一次。
(4) SUM 函數
SUM 函數的作用是對指定列求和,它將自動忽略空值。
如果要去掉重復值的計算,可在列名前加上DISTINCE選項。
2.分組統計
分組函數最常見的用法是與GROUP子句一起使用,用來對表中的數據進行分組統計。
GROUP子句的語法格式為:
GROUP BY 列 1 ,列 2 •••
GROUP子句根據指定的列對數據進行分組統計。
首先根據第二個列進行分組統計,第一個列相同時再進一步根據第二個列進行分組統計。
與GROUP子句一起使用的還有一個子句,即HAVING子句。
這個子句是可選的,它不能單獨使用,只能配合GROUP子句使用,作用是對GROUP子句設置條件,對統計後的結果進行限制。
HAVING子句中的關系表達式必須使用分組函數,可以是在SELECT語句中己經出現的分組函數,也可以是沒有出現的函數。
雖然HAVING子句和WHERE子句都是用來設置條件的,但是WHERE子句設置的條件是在查詢時起作用的,它決定b,如果要進行統計,這樣的條件是在統計之前就已經起作用了。
而HAVING子句設置的條件只有在進行統計後才起作用,它決定了對於統計產生的數據,哪些需要顯示給用戶。
數據的排序
SELECT語句可以使用的最後一個子句是ORDER子句。
以前在查詢數據時,數據顯示的順序是不可預知的。
如果要對數據進行某種方式的排序,就要借助於ORDER子句。
ORDER子句的語法格式為:
ORDER BY 列1 排序方式,列2 排序方式...
ORDER子句對查詢到的數據按照指定列的大小排序。
如果指定了多個排序列,則首先按照第一個排序列排序,如果這個列的值相同,則再按照第二個排序列繼續排序。
排序方式包括ASC 和DESC ,分別表示升序排序和降序排序,二者可選其一,默認的排序方式是升序排序。
如果指定了多個排序列,可以為每個排序列單獨指定排序方式。
ORDER子句中的排序列可以是列名,可以是列的別名,也可以是其他的表達式,還可以
是它在SELECT語句中的排列序號。
如果在SELECT語句中用到了所有的子句,那麼將構成一條復雜的SQL語句。
這些子句的使用順序是: WHERE子句、GROUP子句、HAVING子句、ORDER子句。
多表查詢
以前講述的查詢語句都只涉及一個表的數據。
在很多情況下 ,需要查詢的數據往往涉及多個表,這時需要對多個表進行連接查詢。
表間的連接關系有相等連接、非相等連接、外連接和子連接等多種形式,其中最常用的連接形式是相等連接。
相等連接體現在WHERE子句中指定的條件上,在條件中要指定兩個表通過哪些列進行連接。
一般情況下進行連接查詢的兩個表是通過主鍵和外鍵進行關聯的,所以最簡單的條件是一個表的外鍵與另一個表的主鍵相等。
如果一個列在兩個表中同時存在,那麼在SELECT語句中要用表名進行限定(表名. 列名或者表的別名.列名),否則系統將無法確定是哪個表中的列。
在構造查詢語句時,首先要仔細分析這個查詢要涉及哪些表,
以及這些表通過哪些列進行連接,然後在SELECT語句中指定所有涉及的表,在WHERE子句中指定連接條件。
外連接是一種特殊的連接方式。
假設有兩個表A和B ,用相等連接查詢可以返回表A中的所有行,而表B 中的部分行因為不滿足相等條件,所以是不會被查詢到的,但是利用外連接可以返回表B中的所有行。
對於表A和B來說,外連接的條件表達式的格式為:
WHERE A. 列名(+)= B. 列名
如果要顯示表B 中所有行,包括使用相等連接無法顯示的行,則在表A的列名之後指定外連接的標志“(+)”。
自連接是一種特殊的相等連接。相等連接一般涉及多個不同的表,白連接也涉及多個表,但是它們是同一個表。
由於要把同一個表看成兩個不同的表進行連接,所以在FROM子句中要為表定義兩個不同的別名。
子查詢
子查詢就是嵌套在另一個SELECT語句中的查詢。
在SELECT語句中, WHERE子句或者HAVING子句中的條件往往不能用一個確定的表達式來確定,而要依賴於另一個查詢,這個被嵌套使用的查詢就是子查詢,它在形式上是被一對圓括號限定的SELECT語句。
在子查詢中還可以再嵌套子查詢。
這種復雜的SELECT語句的執行過程為:首先執行子查詢,將執行的結果返回給主查詢,然後再根據條件執行主查詢。
子查詢一般出現在SELECT語句的WHERE子句或HAVING子句中,作為條件表達式的一部分。
子查詢的結果是返回一行或多行數據,可以被看做一個集合。
條件表達式就是要將某個表達式與這個集合中的元素進行某種比較運算,根據運算的結果是真或是假來決定是否執行上一層查詢。
常用的運算符如下:
運算符 用法 說明
EXISTS EXISTS S 如果集合S不為空,條件表達式的值為真,否則為假
IN 表達式 IN S 如果表達式的值在集合S中,則條件表達式的值為真,否則為假
= 表達式=S 如果表達式的值與集合S中唯一一個元素相等,則條件表達式的值為真,集合S必須確保最多只有一個元素
> < <= >= 與=相同 進行相應的關系運算
ANY(SOME) 用在集合名之前 指定要與集合中的任一個元素進行比較
ALL 用在集合名之前 指定要與集合中的所有元素進行比較
其中EXISTS 運算符測試子查詢的返回結果,只要結果不為空,條件就為真,而主查詢和子查詢之間可能沒有直接關系。
IN運算符將某個列的值與子查詢的返回結果進行比較,只要與其中的一個結果相等,條件即為真。
=”運算符號比較特殊,它將某個列的值與集合中的元素進行精確匹配。
如果子查詢只返回單行結果,那麼將這個列與這一行進行比較。
如果子查詢返回多行結果,那麼必須用ANY或ALL進行限定,否則將出錯。
ANY運算符的作用是,只要列值與返回結果中的任何一個相等,條件即為真。
ALL運算符的作用是,列值要與返回結果中的所有行都要進行比較。
運算符〉、〈、〉=和〈=與=的用法相似,子查詢可以返回單行結果,也可以返回多行結果。
如果是多行結果,必須用ANY或ALL進行限定。