SQLite 運算子

SQLite 運算子

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          RichMond   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          RichMond   65000.0

5           David       27          Texas       85000.0

6           Kim         22          SouthHall  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          RichMond   65000.0

5           David       27          Texas       85000.0

6           Kim         22          SouthHall  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          RichMond   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 EXISTSNOT BETWEENNOT 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          RichMond   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          RichMond   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          RichMond   65000.0

5           David       27          Texas       85000.0

6           Kim         22          SouthHall  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          SouthHall  45000.0

下面的 SELECT 語句列出了 NAME ‘Ki’ 開始的所有記錄,‘Ki’ 之後的字元不做限制:

sqlite> SELECT * FROM COMPANY WHERE NAME GLOB ‘Ki*’;

ID          NAME        AGE         ADDRESS     SALARY

———-  ———-  ———-  ———-  ———-

6           Kim         22          SouthHall  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          RichMond   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          SouthHall  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          RichMond   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變成11變成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

 

 

 

 

 

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *