# 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 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 |
| ~ | 二進制補碼運算符是一元運算符,具有"翻轉"位效應。 | (~A ) 將得到 -61,即為 1100 0011,2 的補碼形式,帶符號的二進制數。 |
| << | 二進制左移運算符。左操作數的值向左移動右操作數指定的位數。 | 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
```
- SQL基礎
- SQL 簡介
- SQL 語法
- SQL SELECT 語句
- SQL SELECT DISTINCT 語句
- SQL WHERE 子句
- SQL AND & OR 運算符
- SQL ORDER BY 子句
- SQL INSERT INTO 語句
- SQL UPDATE 語句
- SQL DELETE 語句
- SQL高級
- SQL TOP 子句
- SQL LIKE 操作符
- SQL 通配符
- SQL IN 操作符
- SQL BETWEEN 操作符
- SQL Alias(別名)
- SQL JOIN
- SQL INNER JOIN 關鍵字
- SQL LEFT JOIN 關鍵字
- SQL RIGHT JOIN 關鍵字
- SQL FULL JOIN 關鍵字
- SQL UNION 和 UNION ALL 操作符
- SQL SELECT INTO 語句
- SQL CREATE DATABASE 語句
- SQL CREATE TABLE 語句
- SQL 約束 (Constraints)
- SQL NOT NULL 約束
- SQL UNIQUE 約束
- SQL PRIMARY KEY 約束
- SQL FOREIGN KEY 約束
- SQL CHECK 約束
- SQL DEFAULT 約束
- SQL CREATE INDEX 語句
- SQL 撤銷索引、表以及數據庫
- SQL ALTER TABLE 語句
- SQL AUTO INCREMENT 字段
- SQL VIEW(視圖)
- SQL函數
- SQL Date 函數
- SQL NULL 值
- SQL NULL 函數
- SQL 數據類型
- SQL 服務器 - RDBMS
- SQL 函數
- SQL AVG 函數
- SQL COUNT() 函數
- SQL FIRST() 函數
- SQL LAST() 函數
- SQL MAX() 函數
- SQL MIN() 函數
- SQL SUM() 函數
- SQL GROUP BY 語句
- SQL HAVING 子句
- SQL UCASE() 函數
- SQL LCASE() 函數
- SQL MID() 函數
- SQL LEN() 函數
- SQL ROUND() 函數
- SQL NOW() 函數
- SQL FORMAT() 函數
- SQL 快速參考
- SQLite 基礎
- SQLite 簡介
- SQLite 安裝
- SQLite 命令
- SQLite 語法
- SQLite 數據類型
- SQLite 創建數據庫
- SQLite 附加數據庫
- SQLite 分離數據庫
- SQLite 創建表
- SQLite 刪除表
- SQLite Insert 語句
- SQLite Select 語句
- SQLite 運算符
- SQLite 表達式
- SQLite Where 子句
- SQLite AND/OR 運算符
- SQLite Update 語句
- SQLite Delete 語句
- SQLite Like 子句
- SQLite Glob 子句
- SQLite Limit 子句
- SQLite Order By
- SQLite Group By
- SQLite Having 子句
- SQLite Distinct 關鍵字
- SQLite 高級
- SQLite PRAGMA
- SQLite 約束
- SQLite Joins
- SQLite Unions 子句
- SQLite NULL 值
- SQLite 別名
- SQLite 觸發器(Trigger)
- SQLite 索引(Index)
- SQLite Indexed By
- SQLite Alter 命令
- SQLite Truncate Table
- SQLite 視圖(View)
- SQLite 事務(Transaction)
- SQLite 子查詢
- SQLite Autoincrement(自動遞增)
- SQLite 注入
- SQLite Explain(解釋)
- SQLite Vacuum
- SQLite 日期 & 時間
- SQLite 常用函數
- SQLite 接口
- SQLite - C/C++
- SQLite - Java
- SQLite - PHP
- SQLite - Perl
- SQLite - Python
- MySQL 教程
- MySQL 教程
- MySQL 安裝
- MySQL 管理
- MySQL PHP 語法
- MySQL 連接
- MySQL 創建數據庫
- MySQL 刪除數據庫
- MySQL 選擇數據庫
- MySQL 數據類型
- MySQL 創建數據表
- MySQL 刪除數據表
- MySQL 插入數據
- MySQL 查詢數據
- MySQL where 子句
- MySQL UPDATE 查詢
- MySQL DELETE 語句
- MySQL LIKE 子句
- MySQL 排序
- Mysql Join的使用
- MySQL NULL 值處理
- MySQL 正則表達式
- MySQL 事務
- MySQL ALTER命令
- MySQL 索引
- MySQL 臨時表
- MySQL 復制表
- MySQL 元數據
- MySQL 序列使用
- MySQL 處理重復數據
- MySQL 及 SQL 注入
- MySQL 導出數據
- MySQL 導入數據
- 免責聲明