鍍金池/ 教程/ 數(shù)據(jù)庫/ SQLite 運算符
SQLite Having 子句
SQLite 運算符
SQLite 注入
SQLite Delete 語句
SQLite – Python
SQLite 數(shù)據(jù)類型
SQLite 簡介
SQLite 創(chuàng)建數(shù)據(jù)庫
SQLite Vacuum
SQLite Group By
SQLite 日期 & 時間
SQLite AND/OR 運算符
SQLite 刪除表
SQLite Distinct
SQLite Alter 命令
SQLite PRAGMA
SQLite 約束
SQLite 創(chuàng)建表
SQLite Like 子句
SQLite Limit 子句
SQLite Autoincrement
SQLite 子查詢
SQLite – C/C++
SQLite – PHP
SQLite 命令
SQLite Order By
SQLite Select 語句
SQLite Unions 子句
SQLite – Perl
SQLite – Java
SQLite 別名
SQLite 常用函數(shù)
SQLite Explain(解釋)
SQLite NULL 值
SQLite Glob 子句
SQLite 表達式
SQLite 視圖
SQLite Where 子句
SQLite Truncate Table
SQLite 索引
SQLite Insert 語句
SQLite 安裝
SQLite Indexed By
SQLite 分離數(shù)據(jù)庫
SQLite 觸發(fā)器
SQLite 語法
SQLite Joins
SQLite Update 語句
SQLite 附加數(shù)據(jù)庫
SQLite 事務

SQLite 運算符

SQLite 運算符是什么?

運算符是一個保留字或字符,主要用于 SQLite 語句的 WHERE 子句中執(zhí)行操作,如比較和算術運算。

運算符用于指定 SQLite 語句中的條件,并在語句中連接多個條件。

  • 算術運算符
  • 比較運算符
  • 邏輯運算符
  • 位運算符

SQLite 算術運算符

假設變量 a=10,變量 b=20,則:

運算符描述實例
+加法 - 把運算符兩邊的值相加 a + b 將得到 30
-減法 - 左操作數(shù)減去右操作數(shù) a - b 將得到 -10
乘法 - 把運算符兩邊的值相乘 a b 將得到 200
/除法 - 左操作數(shù)除以右操作數(shù) b / a 將得到 2
%取模 - 左操作數(shù)除以右操作數(shù)后得到的余數(shù) b % a will give 0

實例

下面是 SQLite 算術運算符的簡單實例:

sqlite> .mode line
sqlite> select 10 + 20;
10 + 20 = 30

sqlite> select 10 - 20;
10 - 20 = -10

sqlite> select 10 * 20;
10 * 20 = 200

sqlite> select 10 / 5;
10 / 5 = 2

sqlite> select 12 %  5;
12 %  5 = 2

SQLite 比較運算符

假設變量 a=10,變量 b=20,則:

運算符描述實例
==檢查兩個操作數(shù)的值是否相等,如果相等則條件為真。 (a == b) 不為真。
=檢查兩個操作數(shù)的值是否相等,如果相等則條件為真。 (a = b) 不為真。
!=檢查兩個操作數(shù)的值是否相等,如果不相等則條件為真。 (a != b) 為真。
<>檢查兩個操作數(shù)的值是否相等,如果不相等則條件為真。 (a <> b) 為真。
>檢查左操作數(shù)的值是否大于右操作數(shù)的值,如果是則條件為真。 (a > b) 不為真。
<檢查左操作數(shù)的值是否小于右操作數(shù)的值,如果是則條件為真。 (a < b) 為真。
>=檢查左操作數(shù)的值是否大于等于右操作數(shù)的值,如果是則條件為真。 (a >= b) 不為真。
<=檢查左操作數(shù)的值是否小于等于右操作數(shù)的值,如果是則條件為真。 (a <= b) 為真。
!<檢查左操作數(shù)的值是否不小于右操作數(shù)的值,如果是則條件為真。 (a !< b) 為假。
!>檢查左操作數(shù)的值是否不大于右操作數(shù)的值,如果是則條件為真。 (a !> b) 為真。

實例

假設 COMPANY 表有以下記錄:

    ID          NAME        AGE         ADDRESS     SALARY
    ----------  ----------  ----------  ----------  ----------
    1           Paul        32          California  20000.0
    2           Allen       25          Texas       15000.0
    3           Teddy       23          Norway      20000.0
    4           Mark        25          Rich-Mond   65000.0
    5           David       27          Texas       85000.0
    6           Kim         22          South-Hall  45000.0
    7           James       24          Houston     10000.0

下面的實例演示了各種 SQLite 比較運算符的用法。

在這里,我們使用 WHERE 子句,這將會在后邊單獨的一個章節(jié)中講解,但現(xiàn)在您需要明白,WHERE 子句是用來設置 SELECT 語句的條件語句。

下面的 SELECT 語句列出了 SALARY 大于 50,000.00 的所有記錄:

    sqlite> SELECT * FROM COMPANY WHERE SALARY > 50000;
    ID          NAME        AGE         ADDRESS     SALARY
    ----------  ----------  ----------  ----------  ----------
    4           Mark        25          Rich-Mond   65000.0
    5           David       27          Texas       85000.0

下面的 SELECT 語句列出了 SALARY 等于 20,000.00 的所有記錄:

    sqlite>  SELECT * FROM COMPANY WHERE SALARY = 20000;
    ID          NAME        AGE         ADDRESS     SALARY
    ----------  ----------  ----------  ----------  ----------
    1           Paul        32          California  20000.0
    3           Teddy       23          Norway      20000.0

下面的 SELECT 語句列出了 SALARY 不等于 20,000.00 的所有記錄:

    sqlite>  SELECT * FROM COMPANY WHERE SALARY != 20000;
    ID          NAME        AGE         ADDRESS     SALARY
    ----------  ----------  ----------  ----------  ----------
    2           Allen       25          Texas       15000.0
    4           Mark        25          Rich-Mond   65000.0
    5           David       27          Texas       85000.0
    6           Kim         22          South-Hall  45000.0
    7           James       24          Houston     10000.0

下面的 SELECT 語句列出了 SALARY 不等于 20,000.00 的所有記錄:

    sqlite> SELECT * FROM COMPANY WHERE SALARY <> 20000;
    ID          NAME        AGE         ADDRESS     SALARY
    ----------  ----------  ----------  ----------  ----------
    2           Allen       25          Texas       15000.0
    4           Mark        25          Rich-Mond   65000.0
    5           David       27          Texas       85000.0
    6           Kim         22          South-Hall  45000.0
    7           James       24          Houston     10000.0

下面的 SELECT 語句列出了 SALARY 大于等于 65,000.00 的所有記錄:

    sqlite> SELECT * FROM COMPANY WHERE SALARY >= 65000;
    ID          NAME        AGE         ADDRESS     SALARY
    ----------  ----------  ----------  ----------  ----------
    4           Mark        25          Rich-Mond   65000.0
    5           David       27          Texas       85000.0

SQLite 邏輯運算符

下面是 SQLite 中所有的邏輯運算符列表。

運算符描述
ANDAND 運算符允許在一個 SQL 語句的 WHERE 子句中的多個條件的存在。
BETWEENBETWEEN 運算符用于在給定最小值和最大值范圍內的一系列值中搜索值。
EXISTSEXISTS 運算符用于在滿足一定條件的指定表中搜索行的存在。
ININ 運算符用于把某個值與一系列指定列表的值進行比較。
NOT ININ 運算符的對立面,用于把某個值與不在一系列指定列表的值進行比較。
LIKELIKE 運算符用于把某個值與使用通配符運算符的相似值進行比較。
GLOBGLOB 運算符用于把某個值與使用通配符運算符的相似值進行比較。GLOB 與 LIKE 不同之處在于,它是大小寫敏感的。
NOTNOT 運算符是所用的邏輯運算符的對立面。比如 NOT EXISTS、NOT BETWEEN、NOT IN,等等。它是否定運算符。
OROR 運算符用于結合一個 SQL 語句的 WHERE 子句中的多個條件。
IS NULLNULL 運算符用于把某個值與 NULL 值進行比較。
ISIS 運算符與 = 相似。
IS NOTIS NOT 運算符與 != 相似。
||連接兩個不同的字符串,得到一個新的字符串。
UNIQUEUNIQUE 運算符搜索指定表中的每一行,確保唯一性(無重復)。

實例

假設 COMPANY 表有以下記錄:

    ID          NAME        AGE         ADDRESS     SALARY
    ----------  ----------  ----------  ----------  ----------
    1           Paul        32          California  20000.0
    2           Allen       25          Texas       15000.0
    3           Teddy       23          Norway      20000.0
    4           Mark        25          Rich-Mond   65000.0
    5           David       27          Texas       85000.0
    6           Kim         22          South-Hall  45000.0
    7           James       24          Houston     10000.0

下面的實例演示了 SQLite 邏輯運算符的用法。

下面的 SELECT 語句列出了 AGE 大于等于 25 工資大于等于 65000.00 的所有記錄:

    sqlite> SELECT * FROM COMPANY WHERE AGE >= 25 AND SALARY >= 65000;
    ID          NAME        AGE         ADDRESS     SALARY
    ----------  ----------  ----------  ----------  ----------
    4           Mark        25          Rich-Mond   65000.0
    5           David       27          Texas       85000.0

下面的 SELECT 語句列出了 AGE 大于等于 25 工資大于等于 65000.00 的所有記錄:

    sqlite> SELECT * FROM COMPANY WHERE AGE >= 25 OR SALARY >= 65000;
    ID          NAME        AGE         ADDRESS     SALARY
    ----------  ----------  ----------  ----------  ----------
    1           Paul        32          California  20000.0
    2           Allen       25          Texas       15000.0
    4           Mark        25          Rich-Mond   65000.0
    5           David       27          Texas       85000.0

下面的 SELECT 語句列出了 AGE 不為 NULL 的所有記錄,結果顯示所有的記錄,意味著沒有一個記錄的 AGE 等于 NULL:

    sqlite>  SELECT * FROM COMPANY WHERE AGE IS NOT NULL;
    ID          NAME        AGE         ADDRESS     SALARY
    ----------  ----------  ----------  ----------  ----------
    1           Paul        32          California  20000.0
    2           Allen       25          Texas       15000.0
    3           Teddy       23          Norway      20000.0
    4           Mark        25          Rich-Mond   65000.0
    5           David       27          Texas       85000.0
    6           Kim         22          South-Hall  45000.0
    7           James       24          Houston     10000.0

下面的 SELECT 語句列出了 NAME 以 'Ki' 開始的所有記錄,'Ki' 之后的字符不做限制:

    sqlite> SELECT * FROM COMPANY WHERE NAME LIKE 'Ki%';
    ID          NAME        AGE         ADDRESS     SALARY
    ----------  ----------  ----------  ----------  ----------
    6           Kim         22          South-Hall  45000.0

下面的 SELECT 語句列出了 NAME 以 'Ki' 開始的所有記錄,'Ki' 之后的字符不做限制:

    sqlite> SELECT * FROM COMPANY WHERE NAME GLOB 'Ki*';
    ID          NAME        AGE         ADDRESS     SALARY
    ----------  ----------  ----------  ----------  ----------
    6           Kim         22          South-Hall  45000.0

下面的 SELECT 語句列出了 AGE 的值為 25 或 27 的所有記錄:

    sqlite> SELECT * FROM COMPANY WHERE AGE IN ( 25, 27 );
    ID          NAME        AGE         ADDRESS     SALARY
    ----------  ----------  ----------  ----------  ----------
    2           Allen       25          Texas       15000.0
    4           Mark        25          Rich-Mond   65000.0
    5           David       27          Texas       85000.0

下面的 SELECT 語句列出了 AGE 的值既不是 25 也不是 27 的所有記錄:

    sqlite> SELECT * FROM COMPANY WHERE AGE NOT IN ( 25, 27 );
    ID          NAME        AGE         ADDRESS     SALARY
    ----------  ----------  ----------  ----------  ----------
    1           Paul        32          California  20000.0
    3           Teddy       23          Norway      20000.0
    6           Kim         22          South-Hall  45000.0
    7           James       24          Houston     10000.0

下面的 SELECT 語句列出了 AGE 的值在 25 與 27 之間的所有記錄:

    sqlite> SELECT * FROM COMPANY WHERE AGE BETWEEN 25 AND 27;
    ID          NAME        AGE         ADDRESS     SALARY
    ----------  ----------  ----------  ----------  ----------
    2           Allen       25          Texas       15000.0
    4           Mark        25          Rich-Mond   65000.0
    5           David       27          Texas       85000.0

下面的 SELECT 語句使用 SQL 子查詢,子查詢查找 SALARY > 65000 的帶有 AGE 字段的所有記錄,后邊的 WHERE 子句與 EXISTS 運算符一起使用,列出了外查詢中的 AGE 存在于子查詢返回的結果中的所有記錄:

    sqlite> SELECT AGE FROM COMPANY
            WHERE EXISTS (SELECT AGE FROM COMPANY WHERE SALARY > 65000);
    AGE
    ----------
    32
    25
    23
    25
    27
    22
    24

下面的 SELECT 語句使用 SQL 子查詢,子查詢查找 SALARY > 65000 的帶有 AGE 字段的所有記錄,后邊的 WHERE 子句與 > 運算符一起使用,列出了外查詢中的 AGE 大于子查詢返回的結果中的年齡的所有記錄:

    sqlite> SELECT * FROM COMPANY
            WHERE AGE > (SELECT AGE FROM COMPANY WHERE SALARY > 65000);
    ID          NAME        AGE         ADDRESS     SALARY
    ----------  ----------  ----------  ----------  ----------
    1           Paul        32          California  20000.0

SQLite 位運算符

位運算符作用于位,并逐位執(zhí)行操作。真值表 & 和 | 如下:

pqp & qp | q
0000
0101
1111
1001

假設如果 A = 60,且 B = 13,現(xiàn)在以二進制格式,它們如下所示:

A = 0011 1100

B = 0000 1101

\-----------------

A&B = 0000 1100

A|B = 0011 1101

~A  = 1100 0011

下表中列出了 SQLite 語言支持的位運算符。假設變量 A=60,變量 B=13,則:

運算符描述實例
&如果同時存在于兩個操作數(shù)中,二進制 AND 運算符復制一位到結果中。 (A & B) 將得到 12,即為 0000 1100
|如果存在于任一操作數(shù)中,二進制 OR 運算符復制一位到結果中。 (A | B) 將得到 61,即為 0011 1101
~二進制補碼運算符是一元運算符,具有"翻轉"位效應。 (~A ) 將得到 -61,即為 1100 0011,2 的補碼形式,帶符號的二進制數(shù)。
<<二進制左移運算符。左操作數(shù)的值向左移動右操作數(shù)指定的位數(shù)。 A << 2 將得到 240,即為 1111 0000
>> 二進制右移運算符。左操作數(shù)的值向右移動右操作數(shù)指定的位數(shù)。 A >> 2 將得到 15,即為 0000 1111

實例

下面的實例演示了 SQLite 位運算符的用法:

    sqlite> .mode line
    sqlite> select 60 | 13;
    60 | 13 = 61

    sqlite> select 60 & 13;
    60 & 13 = 12

    sqlite> select  60 ^ 13;
    10 * 20 = 200

    sqlite>  select  (~60);
    (~60) = -61

    sqlite>  select  (60 << 2);
    (60 << 2) = 240

    sqlite>  select  (60 >> 2);
    (60 >> 2) = 15