Zi 字媒體
2017-07-25T20:27:27+00:00
SQLite 運算子
資料來源: http://www.runoob.com/sqlite/sqlite-operators.html
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 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,則:
運算子
描述
實例
==
檢查兩個運算元的值是否相等,如果相等則條件為真。
(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.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 子句,這將會在後邊單獨的一個章節中講解,但現在您需要明白,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 中所有的邏輯運算子清單。
運算子
描述
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.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 位運算子
位運算子作用於位,並逐位執行操作。真值表 & 和 | 如下:
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
~
二進位補數運算子是一元運算子,具有“翻轉“位效應,即0變成1,1變成0。
(~A ) 將得到 -61,即為 1100 0011,一個有符號二進位數字的補數形式。
<
二進位左移運算子。左運算元的值向左移動右運算元指定的位數。
A << 2 將得到 240,即為 1111 0000
>>
二進位右移運算子。左運算元的值向右移動右運算元指定的位數。
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
寫了
5860316篇文章,獲得
23313次喜歡