SQLite經典教學課程登入
SQLite經典教學課程
作者:php.cn  更新時間:2022-04-13 17:05:02

SQLite 運算符


SQLite 運算子是什麼?

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

運算子用於指定 SQLite 語句中的條件,並在語句中連接多個條件。

  • 算術運算子

  • 比較運算子

  • 邏輯運算子

  • 位元運算子

SQLite 算術運算子

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

#運算子描述實例
#+加法- 把運算符兩邊的值相加a + b 將得到30
#-減法- 左運算元減去右運算元a - b 將得到-10
*乘法- 把運算子兩邊的值相乘a * b 將得到200
/除法- 左運算元除以右邊運算元b / a 將會得到2
%取模- 左運算元除以右運算元後所得的餘數b % a 將 give 0

實例

以下是SQLite 算術運算子的簡單實例:

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


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


sqlite> select 10;#* 20;##1 200


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


#sqlite> .

##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  ----  ----------  ----------  ----------
1           Paul        32       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 >     AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  -------- --
4           Mark        25          )  27          Texas       85000.0

#下列的SELECT 語句列出了SALARY 等於20,000.
##/

#sqlite>  SELECT * FROM COMPANY WHERE SALARY = 20000;
ID          NAME ALARY
----------  ----------  ------ ----  ----------  ----------
1           Paul        32       dy       23          Norway      20000.0

#

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

sqlite>  SELECT * FROM COMPANY WHERE SALARY != * FROM COMPANY WHERE SALARY != 2000909090000;    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 <>>     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 >= FROM COMPANY WHERE SALARY >= FROM COMPANY WHERE SALARY >     AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ------- ---
4           Mark        25            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  ----  ----------  ----------  ----------
1           Paul        32       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 COMPAAGE WHERE > SELECT * FROM COMPAAGE WHERE > SELECT * FROM COMPAAGE WHERE ;= 25 AND SALARY >= 65000;
ID          NAME         ----------  ----------
4           Mark        25     David       27          在下的SELECT 語句列出了AGE 大於等於25

工資大於等於65000.00 的所有記錄:

sqlite> SELECT * FROM COMPANY WHERE AGE >= * FROM COMPANY WHERE AGE >= * FROM COMPARY WHERE AGE > 65000;ID          NAME        AGE         且且-------- ---  ----------1           Paul        32             25          Texas       15000.0

#4              65000.0
5           David       27        

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

sqlite>  SELECT * FROM COMPANY WHERE AGE IS NOT NULL;
ID          NAME        AGE        ------  ----------
1           Paul        32            25          Texas       15000.0
#3              20000.0
4           Mark        25   
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) %';
ID          NAME        AGE         ADDRESS  ----  ----------
6           Kim         22          South-Hall  45000.0
下面的SELECT 語句列出了NAME 以'Ki' 開始的所有記錄, 'Ki' 之後的字元不做限制:

sqlite> SELECT * FROM COMPANY WHERE NAME GLOB 'Ki*';
ID    ADDRESS     SALARY
------ ----  ----------  ----------  ----------  ----------
6           Kim         22 South-Hall  45000.0
下面的SELECT 陳述式列出了AGE 的值為25 或27 的所有記錄:

sqlite> SELECT * FROM COMPANY W##sqlite> SELECT * FROM COMPANY W##sqlite&AGE 25, 27 );
ID          NAME        AGE        ------  ----------
2           Allen       25                  25          Rich-Mond   65000.0
5               85000.0

#

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

sqlite> SELECT * FROM COMPANY WHERE AGE NOT IN ( FROM COMPANY WHERE AGE NOT IN, ( 255,  25);# #ID          NAME        AGE         ADDRESS   ---------
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 與27725 與27 之間的所有記錄:

sqlite> SELECT * FROM COMPANY WHERE AGE BETWE  AGE ADDRESS     SALARY
----------  ----------  ----------  ----------  ----- -----
2           Allen       25          Tex造成     25          Rich-Mond   65000.0
5               85000.0

##

下面的SELECT 語句使用SQL 子查詢,子查詢尋找SALARY > 65000 的所有關於AGE 欄位的記錄,後邊的WHERE 子句與EXISTS 運算子一起使用,列出了外查詢中的AGE 存在於子查詢回傳的結果中的所有記錄:

sqlite> SELECT AGE FROM COMPANY 
        WHERE EXISTS (SELECT#N1 ---------
32
25
23
25
27
22
24

下面的SELECT 語句使用SQL 子查詢,子查詢尋找SALARY > 65000 的所有帶有AGE 欄位的記錄,後邊的WHERE 子句與> 運算子一起使用,列出了外查詢中的AGE 大於子查詢傳回的結果中的年齡的所有記錄:

sqlite> SELECT * FROM COMPANY 
        WHERE WAGE > (SELECT7]]      NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32           Califor##) 運算子運算子運算元運算子運算子運算子運算元運算子運算子運算元。真值表& 與| 如下:


p

q

p & q##p | q000#0
##0#101
111# 1
100
#

假設如果A = 60,且B = 13,現在以二進位格式,它們如下所示:

A = 0011 1100

##B = 0000 1101

-----------------

A&B = 0000 1100

##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##卷##60 & 13 = 12

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



60) = -61

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

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