1. sqlite 運(yùn)算符是什么?
運(yùn)算符是一個(gè)保留字或字符,主要用于 sqlite 語句的 where 子句中執(zhí)行操作,如比較和算術(shù)運(yùn)算。
運(yùn)算符用于指定 sqlite 語句中的條件,并在語句中連接多個(gè)條件。
- 算術(shù)運(yùn)算符
- 比較運(yùn)算符
- 邏輯運(yùn)算符
- 位運(yùn)算符
2. sqlite 算術(shù)運(yùn)算符
假設(shè)變量 a=10,變量 b=20,則:
運(yùn)算符 | 描述 | 范例 |
---|---|---|
+ | 加法 - 把運(yùn)算符兩邊的值相加 | a + b 將得到 30 |
- | 減法 - 左操作數(shù)減去右操作數(shù) | a - b 將得到 -10 |
* | 乘法 - 把運(yùn)算符兩邊的值相乘 | a * b 將得到 200 |
/ | 除法 - 左操作數(shù)除以右操作數(shù) | b / a 將得到 2 |
% | 取模 - 左操作數(shù)除以右操作數(shù)后得到的余數(shù) | b % a will give 0 |
下面是 sqlite 算術(shù)運(yùn)算符的簡單范例:
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
3. sqlite 比較運(yùn)算符
假設(shè)變量 a=10,變量 b=20,則:
運(yùn)算符 | 描述 | 范例 |
---|---|---|
== | 檢查兩個(gè)操作數(shù)的值是否相等,如果相等則條件為真。 | (a == b) 不為真。 |
= | 檢查兩個(gè)操作數(shù)的值是否相等,如果相等則條件為真。 | (a = b) 不為真。 |
!= | 檢查兩個(gè)操作數(shù)的值是否相等,如果不相等則條件為真。 | (a != b) 為真。 |
<> | 檢查兩個(gè)操作數(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) 為真。 |
假設(shè) 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 比較運(yùn)算符的用法。
在這里,我們使用 where 子句,這將會(huì)在后邊單獨(dú)的一個(gè)章節(jié)中講解,但現(xiàn)在您需要明白,where 子句是用來設(shè)置 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
4. sqlite 邏輯運(yùn)算符
下面是 sqlite 中所有的邏輯運(yùn)算符列表。
運(yùn)算符 | 描述 |
---|---|
and | and 運(yùn)算符允許在一個(gè) sql 語句的 where 子句中的多個(gè)條件的存在。 |
between | between 運(yùn)算符用于在給定最小值和最大值范圍內(nèi)的一系列值中搜索值。 |
exists | exists 運(yùn)算符用于在滿足一定條件的指定表中搜索行的存在。 |
in | in 運(yùn)算符用于把某個(gè)值與一系列指定列表的值進(jìn)行比較。 |
not in | in 運(yùn)算符的對(duì)立面,用于把某個(gè)值與不在一系列指定列表的值進(jìn)行比較。 |
like | like 運(yùn)算符用于把某個(gè)值與使用通配符運(yùn)算符的相似值進(jìn)行比較。 |
glob | glob 運(yùn)算符用于把某個(gè)值與使用通配符運(yùn)算符的相似值進(jìn)行比較。glob 與 like 不同之處在于,它是大小寫敏感的。 |
not | not 運(yùn)算符是所用的邏輯運(yùn)算符的對(duì)立面。比如 not exists、not between、not in,等等。它是否定運(yùn)算符。 |
or | or 運(yùn)算符用于結(jié)合一個(gè) sql 語句的 where 子句中的多個(gè)條件。 |
is null | null 運(yùn)算符用于把某個(gè)值與 null 值進(jìn)行比較。 |
is | is 運(yùn)算符與 = 相似。 |
is not | is not 運(yùn)算符與 != 相似。 |
|| | 連接兩個(gè)不同的字符串,得到一個(gè)新的字符串。 |
unique | unique 運(yùn)算符搜索指定表中的每一行,確保唯一性(無重復(fù))。 |
假設(shè) 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 邏輯運(yùn)算符的用法。
下面的 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 的所有記錄,結(jié)果顯示所有的記錄,意味著沒有一個(gè)記錄的 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 運(yùn)算符一起使用,列出了外查詢中的 age 存在于子查詢返回的結(jié)果中的所有記錄:
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 子句與 > 運(yùn)算符一起使用,列出了外查詢中的 age 大于子查詢返回的結(jié)果中的年齡的所有記錄:
sqlite> select * from company where age > (select age from company where salary > 65000); id name age address salary ---------- ---------- ---------- ---------- ---------- 1 paul 32 california 20000.0
5. sqlite 位運(yùn)算符
位運(yùn)算符作用于位,并逐位執(zhí)行操作。真值表 & 和 | 如下:
p | q | p & q | p | q |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 |
1 | 1 | 1 | 1 |
1 | 0 | 0 | 1 |
假設(shè)如果 a = 60,且 b = 13,現(xiàn)在以二進(jìn)制格式,它們?nèi)缦滤荆?/p>
a = 0011 1100
b = 0000 1101
-----------------
a&b = 0000 1100
a|b = 0011 1101
~a = 1100 0011
下表中列出了 sqlite 語言支持的位運(yùn)算符。假設(shè)變量 a=60,變量 b=13,則:
運(yùn)算符 | 描述 | 范例 |
---|---|---|
& | 如果同時(shí)存在于兩個(gè)操作數(shù)中,二進(jìn)制 and 運(yùn)算符復(fù)制一位到結(jié)果中。 | (a & b) 將得到 12,即為 0000 1100 |
| | 如果存在于任一操作數(shù)中,二進(jìn)制 or 運(yùn)算符復(fù)制一位到結(jié)果中。 | (a | b) 將得到 61,即為 0011 1101 |
~ | 二進(jìn)制補(bǔ)碼運(yùn)算符是一元運(yùn)算符,具有"翻轉(zhuǎn)"位效應(yīng),即0變成1,1變成0。 | (~a ) 將得到 -61,即為 1100 0011,一個(gè)有符號(hào)二進(jìn)制數(shù)的補(bǔ)碼形式。 |
<< | 二進(jìn)制左移運(yùn)算符。左操作數(shù)的值向左移動(dòng)右操作數(shù)指定的位數(shù)。 | a << 2 將得到 240,即為 1111 0000 |
>> | 二進(jìn)制右移運(yùn)算符。左操作數(shù)的值向右移動(dòng)右操作數(shù)指定的位數(shù)。 | a >> 2 將得到 15,即為 0000 1111 |
下面的范例演示了 sqlite 位運(yùn)算符的用法:
sqlite> .mode line sqlite> select 60 | 13; 60 | 13 = 61 sqlite> select 60 & 13; 60 & 13 = 12 sqlite> select (~60); (~60) = -61 sqlite> select (60 << 2); (60 << 2) = 240 sqlite> select (60 >> 2); (60 >> 2) = 15