標籤:
SQLite 運算子SQLite 運算子是什嗎?
運算子是一個保留字或字元,主要用於 SQLite 語句的 WHERE 子句中執行操作,如比較和算術運算。
運算子用於指定 SQLite 語句中的條件,並在語句中串連多個條件。
SQLite 算術運算子
假設變數 a=10,變數 b=20,則:
運算子 |
描述 |
執行個體 |
+ |
加法 - 把運算子兩邊的值相加 |
a + b 將得到 30 |
- |
減法 - 左運算元減去右運算元 |
a - b 將得到 -10 |
* |
乘法 - 把運算子兩邊的值相乘 |
a * b 將得到 200 |
/ |
除法 - 左運算元除以右運算元 |
b / a 將得到 2 |
% |
模數 - 左運算元除以右運算元後得到的餘數 |
b % a will give 0 |
執行個體
下面是 SQLite 算術運算子的簡單一實例:
sqlite> .mode linesqlite> select 10 + 20;10 + 20 = 30sqlite> select 10 - 20;10 - 20 = -10sqlite> select 10 * 20;10 * 20 = 200sqlite> select 10 / 5;10 / 5 = 2sqlite> select 12 % 5;12 % 5 = 2
SQLite 比較子
假設變數 a=10,變數 b=20,則:
運算子 |
描述 |
執行個體 |
== |
檢查兩個運算元的值是否相等,如果相等則條件為真。 |
(a == b) 不為真。 |
= |
檢查兩個運算元的值是否相等,如果相等則條件為真。 |
(a = b) 不為真。 |
!= |
檢查兩個運算元的值是否相等,如果不相等則條件為真。 |
(a != b) 為真。 |
<> |
檢查兩個運算元的值是否相等,如果不相等則條件為真。 |
(a <> b) 為真。 |
> |
檢查左運算元的值是否大於右運算元的值,如果是則條件為真。 |
(a > b) 不為真。 |
< |
檢查左運算元的值是否小於右運算元的值,如果是則條件為真。 |
(a < b) 為真。 |
>= |
檢查左運算元的值是否大於等於右運算元的值,如果是則條件為真。 |
(a >= b) 不為真。 |
<= |
檢查左運算元的值是否小於等於右運算元的值,如果是則條件為真。 |
(a <= b) 為真。 |
!< |
檢查左運算元的值是否不小於右運算元的值,如果是則條件為真。 |
(a !< b) 為假。 |
!> |
檢查左運算元的值是否不大於右運算元的值,如果是則條件為真。 |
(a !> b) 為真。 |
執行個體
假設 COMPANY 表有以下記錄:
ID NAME AGE ADDRESS SALARY---------- ---------- ---------- ---------- ----------1 Paul 32 California 20000.02 Allen 25 Texas 15000.03 Teddy 23 Norway 20000.04 Mark 25 Rich-Mond 65000.05 David 27 Texas 85000.06 Kim 22 South-Hall 45000.07 James 24 Houston 10000.0
下面的執行個體示範了各種 SQLite 比較子的用法。
在這裡,我們使用
WHERE 子句,這將會在後邊單獨的一個章節中講解,但現在您需要明白,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.05 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.03 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.04 Mark 25 Rich-Mond 65000.05 David 27 Texas 85000.06 Kim 22 South-Hall 45000.07 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.04 Mark 25 Rich-Mond 65000.05 David 27 Texas 85000.06 Kim 22 South-Hall 45000.07 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.05 David 27 Texas 85000.0
SQLite 邏輯運算子
下面是 SQLite 中所有的邏輯運算子列表。
運算子 |
描述 |
AND |
AND 運算子允許在一個 SQL 陳述式的 WHERE 子句中的多個條件的存在。 |
BETWEEN |
BETWEEN 運算子用於在給定最小值和最大值範圍內的一系列值中搜尋值。 |
EXISTS |
EXISTS 運算子用於在滿足一定條件的指定表中搜尋行的存在。 |
IN |
IN 運算子用於把某個值與一系列指定列表的值進行比較。 |
NOT IN |
IN 運算子的對立面,用於把某個值與不在一系列指定列表的值進行比較。 |
LIKE |
LIKE 運算子用於把某個值與使用萬用字元運算子的相似值進行比較。 |
GLOB |
GLOB 運算子用於把某個值與使用萬用字元運算子的相似值進行比較。GLOB 與 LIKE 不同之處在於,它是大小寫敏感的。 |
NOT |
NOT 運算子是所用的邏輯運算子的對立面。比如 NOT EXISTS、NOT BETWEEN、NOT IN,等等。它是否定運算子。 |
OR |
OR 運算子用於結合一個 SQL 陳述式的 WHERE 子句中的多個條件。 |
IS NULL |
NULL 運算子用於把某個值與 NULL 值進行比較。 |
IS |
IS 運算子與 = 相似。 |
IS NOT |
IS NOT 運算子與 != 相似。 |
|| |
串連兩個不同的字串,得到一個新的字串。 |
UNIQUE |
UNIQUE 運算子搜尋指定表中的每一行,確保唯一性(無重複)。 |
執行個體
假設 COMPANY 表有以下記錄:
ID NAME AGE ADDRESS SALARY---------- ---------- ---------- ---------- ----------1 Paul 32 California 20000.02 Allen 25 Texas 15000.03 Teddy 23 Norway 20000.04 Mark 25 Rich-Mond 65000.05 David 27 Texas 85000.06 Kim 22 South-Hall 45000.07 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.05 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.02 Allen 25 Texas 15000.04 Mark 25 Rich-Mond 65000.05 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.02 Allen 25 Texas 15000.03 Teddy 23 Norway 20000.04 Mark 25 Rich-Mond 65000.05 David 27 Texas 85000.06 Kim 22 South-Hall 45000.07 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.04 Mark 25 Rich-Mond 65000.05 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.03 Teddy 23 Norway 20000.06 Kim 22 South-Hall 45000.07 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.04 Mark 25 Rich-Mond 65000.05 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----------32252325272224
下面的 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 位元運算符
位元運算符作用於位,並逐位執行操作。真值表 & 和 | 如下:
p |
q |
p & q |
p | q |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
假設如果 A = 60,且 B = 13,現在以二進位格式,它們如下所示:
A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A|B = 0011 1101
~A = 1100 0011
下表中列出了 SQLite 語言支援的位元運算符。假設變數 A=60,變數 B=13,則:
運算子 |
描述 |
執行個體 |
& |
如果同時存在於兩個運算元中,二進位 AND 運算子複製一位到結果中。 |
(A & B) 將得到 12,即為 0000 1100 |
| |
如果存在於任一運算元中,二進位 OR 運算子複製一位到結果中。 |
(A | B) 將得到 61,即為 0011 1101 |
~ |
二進位補碼運算子是一元運算子,具有"翻轉"位效應。 |
(~A ) 將得到 -61,即為 1100 0011,2 的補碼形式,帶符號的位元。 |
<< |
二進位左移運算子。左運算元的值向左移動右運算元指定的位元。 |
A << 2 將得到 240,即為 1111 0000 |
>> |
二進位右移運算子。左運算元的值向右移動右運算元指定的位元。 |
A >> 2 將得到 15,即為 0000 1111 |
執行個體
下面的執行個體示範了 SQLite 位元運算符的用法:
sqlite> .mode linesqlite> select 60 | 13;60 | 13 = 61sqlite> select 60 & 13;60 & 13 = 12sqlite> select 60 ^ 13;10 * 20 = 200sqlite> select (~60);(~60) = -61sqlite> select (60 << 2);(60 << 2) = 240sqlite> select (60 >> 2);(60 >> 2) = 15
SQLite使用教程10 運算子