日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL查询条件中的各种运算符/操作符说明

發布時間:2023/12/3 数据库 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

  • % 表示匹配任意數量(包含 0 個)的任意字符,跟 like 配合使用
  • _ 下劃線表示匹配任意 1 字符
  • select * from emp_xxx where lower(job) like '%sales%'; select * from emp_xxx where job like '_a%';

    (三)轉義字符

    查詢表名以 S_ 開頭的表的總數:

    select count(*) from user_tables where table_name like 'S\_%' escape '\';

    說明:
    _ 是特殊符號,需要轉義成普通字符。如果要查詢的數據中有特殊字符(比如 _ 或 %),在做模糊查詢時,需要加上反斜杠 \ 符號表示轉義,并且用 escape 短語指明轉義符號 \。

    二、單行比較運算符

    單行比較運算符:>、<、>=、<=、=、<>、<=>,單行比較運算符只能和一個值比較,即后面只能跟著“一個值”。

    注意:SQL 語句中的等號 = 不是賦值表達式,而是相等比較表達式(比較表達式/相等關系式/相等表達式/相等關系表達式)

    (一)安全等號 <=>

    1. 和 = 的相同點

    像常規等于號 = 一樣,兩個值進行比較,如果比較結果是真,即比較關系成立,兩邊的值相等,則返回結果值 1,比較結果是假,即比較關系不成立,兩邊的值不相等,則返回結果值 0。

    'A' <=> 'B' 這個比較表達式,比較結果為假,返回 0 'a' <=> 'a' 這個比較表達式,比較結果為真,返回 1

    2. 和 = 的不同點

    <=> 和 = 不同的是,空值 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冪運算、乘方運算

    注意:

  • 在除法運算和模運算中,如果除數為0,將是非法除數,返回結果為NULL。
  • 加法運算時,若含有字符串,而字符串以數字開頭,轉換成數字,如下:
  • mysql> select 1+'5a'; +--------+ | 1+'5a' | +--------+ | 6 | +--------+ 1 row in set, 1 warning (0.00 sec)
  • 加法運算時,若含有字符串,而字符串以字母開頭的,轉換成 0,如下所示:
  • mysql> select 1+'a5'; +--------+ | 1+'a5' | +--------+ | 1 | +--------+ 1 row in set, 1 warning (0.00 sec)

    (一)除 /

    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
    4NOT
    5BETWEEN、CASE、WHEN、THEN、ELSE
    6=(比較運算)、<=>、>=、>、<=、<、<>、!=、 IS、LIKE、REGEXP、IN
    7|
    8&
    9<<、>>
    10-(減號)、+
    11*、/、DIV、%、MOD
    12^
    13-(一元減號)、?(一元比特反轉)
    14!、BINARY、 COLLATE

    可以看出,不同運算符的優先級是不同的。一般情況下,級別高的運算符優先進行計算,如果級別相同,MySQL 按表達式的順序從左到右依次計算。

    另外,在無法確定優先級的情況下,可以使用圓括號 () 來改變優先級,并且這樣會使計算過程更加清晰。

    總結

    以上是生活随笔為你收集整理的MySQL查询条件中的各种运算符/操作符说明的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。