MySQL查询条件中的各种运算符/操作符说明
文章目錄
- 一、比較運算符
- (一)正則表達式
- (二)模糊匹配 LIKE
- (三)轉義字符
- 二、單行比較運算符
- (一)安全等號 <=>
- 1. 和 = 的相同點
- 2. 和 = 的不同點
- (二)區間運算符 between...and...
- (三)為空 is null
- (四)不為空 is not null
- (五)空字符串
- (六)二進制數比較 binary
- 三、多行比較運算符
- (一)> ALL
- (二)> ANY
- (三)在集合中 IN
- (四)不在集合中 NOT IN
- 四、算術運算符
- (一)除 /
- (二)求商 DIV
- (三)冪運算 power
- (四)取模
- 五、邏輯運算符
- (一)邏輯與
- (二)邏輯或
- (三)非
- (四)異或
- 六、位運算符
- (一)按位右移
- (二)按位異或
- (三)按位取反
- 七、運算符優先級
一、比較運算符
SELECT 語句中的條件語句經常要使用比較運算符。通過這些比較運算符,可以判斷表中的哪些記錄是符合條件的。比較結果為真(即比較關系成立),則返回 1,比較結果為假(即比較關系不成立)則返回 0,比較結果不確定則返回 NULL。
| = | 等于 | |
| binary | 二進制數比較 | 例如,使用 = 比較時,前面加上 binary,則會比較兩者的二進制數 |
| <> 或 != | 不等于 | 在 SQL 的一些版本中,該操作符可被寫成 !=,<> 在任何 SQL 中都起作用,但是 != 在 sql2000 中則是語法錯誤,不兼容,推薦使用 <>。 |
| > | 大于 | |
| < | 小于 | |
| <= | 小于等于 | |
| >= | 大于等于 | |
| BETWEEN...AND... | 在兩值之間 | >=min && <=max |
| NOT BETWEEN...AND... | 不在兩值之間 | |
| IN | 在集合中 | |
| NOT IN | 不在集合中 | |
| <=> | 安全等于 | 與 = 的區別在于當兩個操作碼均為 NULL 時,其所得值為 1 而不為 NULL,而當一個操作碼為 NULL 時,其所得值為 0 而不為 NULL。 |
| LIKE | 匹配某種模式,通常結合通配符使用。篩查出匹配某種模式的 | |
| NOT LIKE | 篩查出不匹配某種模式的,即過濾掉匹配某種模式的 | |
| REGEXP 或 RLIKE | 正則式匹配 | |
| IS NULL | 為空 | |
| IS NOT NULL | 不為空 | |
| LEAST | 最小的 | 當有兩個或多個參數時,返回最小值 |
| GREATEST | 最大的 | 當有兩個或多個參數時,返回最大值 |
(一)正則表達式
能夠匹配到文本,則返回 1,如下所示:
mysql> select 'beijing' regexp 'jing'; +-------------------------+ | 'beijing' regexp 'jing' | +-------------------------+ | 1 | +-------------------------+ 1 row in set (0.00 sec)注:‘beijing’ 是被匹配的源字符串,‘jing’ 是正則表達式。
mysql> select 'beijing' regexp 'xi'; +-----------------------+ | 'beijing' regexp 'xi' | +-----------------------+ | 0 | +-----------------------+ 1 row in set (0.00 sec)(二)模糊匹配 LIKE
(三)轉義字符
查詢表名以 S_ 開頭的表的總數:
select count(*) from user_tables where table_name like 'S\_%' escape '\';說明:
_ 是特殊符號,需要轉義成普通字符。如果要查詢的數據中有特殊字符(比如 _ 或 %),在做模糊查詢時,需要加上反斜杠 \ 符號表示轉義,并且用 escape 短語指明轉義符號 \。
二、單行比較運算符
單行比較運算符:>、<、>=、<=、=、<>、<=>,單行比較運算符只能和一個值比較,即后面只能跟著“一個值”。
注意:SQL 語句中的等號 = 不是賦值表達式,而是相等比較表達式(比較表達式/相等關系式/相等表達式/相等關系表達式)
(一)安全等號 <=>
1. 和 = 的相同點
像常規等于號 = 一樣,兩個值進行比較,如果比較結果是真,即比較關系成立,兩邊的值相等,則返回結果值 1,比較結果是假,即比較關系不成立,兩邊的值不相等,則返回結果值 0。
'A' <=> 'B' 這個比較表達式,比較結果為假,返回 0 'a' <=> 'a' 這個比較表達式,比較結果為真,返回 12. 和 = 的不同點
<=> 和 = 不同的是,空值 NULL 是沒有任何意義的,所以等號 = 運算符不能把 NULL 作為有效的結果,任何數值與空值通過等號 = 比較的結果都是 NULL,但是很多時候我們并不希望得到這樣的結果,所以可以使用安全等號 <=>。
例如,'a' <=> NULL 得 0;NULL<=> NULL 得出 1。而等號 = 運算符規則是 'a' = NULL 結果是 NULL;甚至 NULL = NULL 結果也是 NULL。
除了 <=>,還有兩個其他的操作符用來處理某個值和 NULL 做比較,也就是 IS NULL 和 IS NOT NULL。他們是 ANSI 標準中的一部分,因此也可以用在其他數據庫中。而 <=> 只能在 Mysql 中使用。
你可以把 <=> 當作 Mysql 中的方言。
'a' IS NULL ==> 'a' <=> NULL 'a' IS NOT NULL ==> NOT('a' <=> NULL)據此,你可以把下面的查詢語句的條件改的更具移植性一點:
where t1.name is null(二)區間運算符 between…and…
select * from emp_xxx where salary between 5000 and 10000; select * from emp_xxx where salary not between 5000 and 8000;(三)為空 is null
select * from emp_xxx where bonus is null;(四)不為空 is not null
select * from emp_xxx where bonus is not null;(五)空字符串
查詢字段 bonus 為空串的所有記錄信息:
select * from emp_xxx where bonus = '';(六)二進制數比較 binary
mysql> select binary 'b'='B'; +----------------+ | binary 'b'='B' | +----------------+ | 0 | +----------------+ 1 row in set (0.00 sec)mysql> select 'b'='B'; +---------+ | 'b'='B' | +---------+ | 1 | +---------+ 1 row in set (0.00 sec)說明:使用 = 比較字符時,默認不區分大小寫,所以小寫 b 和大寫 B,相等比較結果為真,返回 1;如果前面加上 binary,則是比較兩者的二進制數,肯定是不同的,所以比較結果為假,返回 0。
三、多行比較運算符
多行比較運算符:> ALL、> ANY、< ALL、< ANY、IN,可以和多個值比較,后面可以跟著“多個值”
(一)> ALL
select ename from emp_xxx where salary > ALL(500,1000,2500);(二)> ANY
select ename from emp_xxx where salary > ANY(500,1000,2500);(三)在集合中 IN
select * from emp_xxx where job in ('Manager' , 'Analyst');(四)不在集合中 NOT IN
select * from emp_xxx where depno not in (20 , 30);注意:
not in(列表)的列表中有 null 值 , 將沒有結果返回,所以列表中不能含有 null,in(列表)則沒有關系。
四、算術運算符
| + | 加法 |
| - | 減法 |
| * | 乘法 |
| / | 除法運算,商如果是小數,最多會保留小數點的后四位,且會四舍五入 |
| DIV | 除法運算,整除,商如果是小數,只保留整數部分,且不會四舍五入 |
| % | 求余 |
| MOD | 取模,余數和模數實際運算是有區別的,詳見《求余和取模的計算公式》 |
| power | 冪運算、乘方運算 |
注意:
(一)除 /
mysql> select 8/3; +--------+ | 8/3 | +--------+ | 2.6667 | +--------+(二)求商 DIV
mysql> select 8 div 3; +---------+ | 8 div 3 | +---------+ | 2 | +---------+ 1 row in set (0.00 sec)(三)冪運算 power
mysql> select power(2,3); +------------+ | power(2,3) | +------------+ | 8 | +------------+ 1 row in set (0.00 sec)(四)取模
mysql> select 10 MOD 4; +----------+ | 10 MOD 4 | +----------+ | 2 | +----------+五、邏輯運算符
邏輯運算符用來判斷表達式的真假。如果表達式是真,結果返回 1。如果表達式是假,結果返回 0。
| NOT 或 ! | 邏輯非 |
| AND 或 && | 邏輯與 |
| OR 或 || | 邏輯或 |
| XOR 或 ^ | 邏輯異或 |
(一)邏輯與
&& 或者 AND 是“與”運算的兩種表達方式。如果所有數據不為0且不為空值(NULL),則結果返回1;如果存在任何一個數據為0,則結果返回0;如果存在一個數據為NULL且沒有數據為0,則結果返回NULL。“與”運算符支持多個數據同時進行運算。
mysql> select 2 and 0; +---------+ | 2 and 0 | +---------+ | 0 | +---------+ 1 row in set (0.00 sec)mysql> select 2 and 3; +---------+ | 2 and 3 | +---------+ | 1 | +---------+ 1 row in set (0.00 sec)(二)邏輯或
兩者只要有一個數是大于 0 的,表達式就是真,返回 1。如下所示:
mysql> select 2 or 0; +--------+ | 2 or 0 | +--------+ | 1 | +--------+mysql> select 0 or 0; +--------+ | 0 or 0 | +--------+ | 0 | +--------+mysql> select 1 || 0; +--------+ | 1 || 0 | +--------+ | 1 | +--------+mysql> select null or 1; +-----------+ | null or 1 | +-----------+ | 1 | +-----------+(三)非
mysql> select not 1; +-------+ | not 1 | +-------+ | 0 | +-------+mysql> select !0; +----+ | !0 | +----+ | 1 | +----+(四)異或
兩者的值相同,則表示假,返回 0;兩者的值不同,則表示真,返回 1。這里的值是指 1 或者 0。
mysql> select 1 xor 1; +---------+ | 1 xor 1 | +---------+ | 0 | +---------+mysql> select 0 xor 0; +---------+ | 0 xor 0 | +---------+ | 0 | +---------+mysql> select 1 xor 0; +---------+ | 1 xor 0 | +---------+ | 1 | +---------+mysql> select 1 ^ 0; +-------+ | 1 ^ 0 | +-------+ | 1 | +-------+六、位運算符
位運算符是在二進制數上進行計算的運算符。位運算會先將操作數變成二進制數,進行位運算。然后再將計算結果從二進制數變回十進制數。
| & | 按位與 |
| | | 按位或 |
| ^ | 按位異或 |
| ~ | 按位取反 |
| << | 左移 |
| >> | 右移 |
(一)按位右移
mysql> select 3>>1; +------+ | 3>>1 | +------+ | 1 | +------+(二)按位異或
mysql> select 3^5; +-----+ | 3^5 | +-----+ | 6 | +-----+(三)按位取反
mysql> select ~18446744073709551612; +-----------------------+ | ~18446744073709551612 | +-----------------------+ | 3 | +-----------------------+七、運算符優先級
| 1 | =(賦值運算)、:= |
| 2 | ||、OR、XOR |
| 3 | &&、AND |
| 4 | NOT |
| 5 | BETWEEN、CASE、WHEN、THEN、ELSE |
| 6 | =(比較運算)、<=>、>=、>、<=、<、<>、!=、 IS、LIKE、REGEXP、IN |
| 7 | | |
| 8 | & |
| 9 | <<、>> |
| 10 | -(減號)、+ |
| 11 | *、/、DIV、%、MOD |
| 12 | ^ |
| 13 | -(一元減號)、?(一元比特反轉) |
| 14 | !、BINARY、 COLLATE |
可以看出,不同運算符的優先級是不同的。一般情況下,級別高的運算符優先進行計算,如果級別相同,MySQL 按表達式的順序從左到右依次計算。
另外,在無法確定優先級的情況下,可以使用圓括號 () 來改變優先級,并且這樣會使計算過程更加清晰。
總結
以上是生活随笔為你收集整理的MySQL查询条件中的各种运算符/操作符说明的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 淘宝开店备案流程(淘宝开店备案)
- 下一篇: MySQL函数/数据库函数