1. 程式人生 > >sqlite3學習之where子句&AND/OR 運算子&Like 子句&Glob 子句

sqlite3學習之where子句&AND/OR 運算子&Like 子句&Glob 子句

SQLite的 WHERE 子句用於指定從一個表或多個表中獲取資料的條件。如果滿足給定的條件,即為真(true)時,則從表中返回特定的值。我們可以使用 WHERE 子句來過濾記錄,只獲取需要的記錄。WHERE 子句不僅可用在 SELECT 語句中,它也可用在 UPDATE、DELETE 語句中,等等,來看下語法格式:

SELECT column1, column2, columnN 
FROM table_name
WHERE [condition]

我們可以使用各種運算子來指定條件,比如 >、<、=、LIKE、NOT,等等,咱們先來假設 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

來看例項:

#AGE 大於等於 25 且工資大於等於 65000.00 的所有記錄
SELECT * FROM COMPANY WHERE AGE >= 25 AND SALARY >= 65000;

# AGE 大於等於 25 或工資大於等於 65000.00 的所有記錄
SELECT * FROM COMPANY WHERE AGE >= 25 OR SALARY >= 65000;

#AGE 不為 NULL 的所有記錄,結果顯示所有的記錄,意味著沒有一個記錄的 AGE 等於 NULL
SELECT * FROM COMPANY WHERE AGE IS NOT NULL;

#NAME 以 'Ki' 開始的所有記錄,'Ki' 之後的字元不做限制
SELECT * FROM COMPANY WHERE NAME LIKE 'Ki%';

#NAME 以 'Ki' 開始的所有記錄,'Ki' 之後的字元不做限制
SELECT * FROM COMPANY WHERE NAME GLOB 'Ki*';

#AGE 的值為 25 或 27 的所有記錄
SELECT * FROM COMPANY WHERE AGE IN ( 25, 27 );

#AGE 的值既不是 25 也不是 27 的所有記錄
SELECT * FROM COMPANY WHERE AGE NOT IN ( 25, 27 );

#AGE 的值在 25 與 27 之間的所有記錄
SELECT * FROM COMPANY WHERE AGE BETWEEN 25 AND 27;

#使用 SQL 子查詢,子查詢查詢 SALARY > 65000 的帶有 AGE 欄位的所有記錄
#後邊的 WHERE 子句與 EXISTS 運算子一起使用
#列出了外查詢中的 AGE 存在於子查詢返回的結果中的所有記錄
SELECT AGE FROM COMPANY WHERE EXISTS (SELECT AGE FROM COMPANY WHERE SALARY > 65000);

#使用 SQL 子查詢,子查詢查詢 SALARY > 65000 的帶有 AGE 欄位的所有記錄
#後邊的 WHERE 子句與 > 運算子一起使用
#列出了外查詢中的 AGE 大於子查詢返回的結果中的年齡的所有記錄
SELECT * FROM COMPANY WHERE AGE > (SELECT AGE FROM COMPANY WHERE SALARY > 65000);

SQLite 的 ANDOR 運算子用於編譯多個條件來縮小在 SQLite 語句中所選的資料。這兩個運算子被稱為連線運算子。這些運算子為同一個 SQLite 語句中不同的運算子之間的多個比較提供了可能。

AND 運算子允許在一個 SQL 語句的 WHERE 子句中的多個條件的存在。使用 AND 運算子時,只有當所有條件都為真(true)時,整個條件為真(true)。例如,只有當 condition1 和 condition2 都為真(true)時,[condition1] AND [condition2] 為真(true),帶有 WHERE 子句的 AND 運算子的基本語法如下:

SELECT column1, column2, columnN 
FROM table_name
WHERE [condition1] AND [condition2]...AND [conditionN];

我們可以使用 AND 運算子來結合 N 個數量的條件。SQLite 語句需要執行的動作是,無論是事務或查詢,所有由 AND 分隔的條件都必須為真(TRUE),來看例項:

#AGE 大於等於 25 且工資大於等於 65000.00 的所有記錄
SELECT * FROM COMPANY WHERE AGE >= 25 AND SALARY >= 65000;

OR 運算子也用於結合一個 SQL 語句的 WHERE 子句中的多個條件。使用 OR 運算子時,只要當條件中任何一個為真(true)時,整個條件為真(true)。例如,只要當 condition1 或 condition2 有一個為真(true)時,[condition1] OR [condition2] 為真(true),帶有 WHERE 子句的 OR 運算子的基本語法如下:

SELECT column1, column2, columnN 
FROM table_name
WHERE [condition1] OR [condition2]...OR [conditionN]

我們可以使用 OR 運算子來結合 N 個數量的條件。SQLite 語句需要執行的動作是,無論是事務或查詢,只要任何一個由 OR 分隔的條件為真(TRUE)即可,來看例項:

#AGE 大於等於 25 或工資大於等於 65000.00 的所有記錄
SELECT * FROM COMPANY WHERE AGE >= 25 OR SALARY >= 65000;

SQLite 的 LIKE 運算子是用來匹配萬用字元指定模式的文字值。如果搜尋表示式與模式表示式匹配,LIKE 運算子將返回真(true),也就是 1,其中,百分號(%)和下劃線(_)這兩個萬用字元與 LIKE 運算子一起使用,百分號(%)代表零個、一個或多個數字或字元。下劃線(_)代表一個單一的數字或字元,它們可以被組合使用,來看% 和 _ 的基本語法:

SELECT column_list 
FROM table_name
WHERE column LIKE 'XXXX%'

or 

SELECT column_list 
FROM table_name
WHERE column LIKE '%XXXX%'

or

SELECT column_list 
FROM table_name
WHERE column LIKE 'XXXX_'

or

SELECT column_list 
FROM table_name
WHERE column LIKE '_XXXX'

or

SELECT column_list 
FROM table_name
WHERE column LIKE '_XXXX_'

我們可以使用 AND 或 OR 運算子來結合 N 個數量的條件。上述程式碼中,XXXX 可以是任何數字或字串值。

來看下帶有 '%' 和 '_' 運算子的 LIKE 子句不同的地方:

語句 描述
WHERE SALARY LIKE '200%' 查詢以 200 開頭的任意值
WHERE SALARY LIKE '%200%' 查詢任意位置包含 200 的任意值
WHERE SALARY LIKE '_00%' 查詢第二位和第三位為 00 的任意值
WHERE SALARY LIKE '2_%_%' 查詢以 2 開頭,且長度至少為 3 個字元的任意值
WHERE SALARY LIKE '%2' 查詢以 2 結尾的任意值
WHERE SALARY LIKE '_2%3' 查詢第二位為 2,且以 3 結尾的任意值
WHERE SALARY LIKE '2___3' 查詢長度為 5 位數,且以 2 開頭以 3 結尾的任意值

來看例項:

#AGE 以 2 開頭的所有記錄
SELECT * FROM COMPANY WHERE AGE  LIKE '2%';

#ADDRESS 文本里包含一個連字元(-)的所有記錄
SELECT * FROM COMPANY WHERE ADDRESS  LIKE '%-%';

SQLite 的 GLOB 運算子是用來匹配萬用字元指定模式的文字值。如果搜尋表示式與模式表示式匹配,GLOB 運算子將返回真(true),也就是 1。與 LIKE 運算子不同的是,GLOB 是大小寫敏感的,對於萬用字元星號(*)和問號(?),它遵循 UNIX 的語法,星號(*)代表零個、一個或多個數字或字元。問號(?)代表一個單一的數字或字元。這些符號可以被組合使用,來看* 和 ? 的基本語法:

SELECT FROM table_name
WHERE column GLOB 'XXXX*'

or 

SELECT FROM table_name
WHERE column GLOB '*XXXX*'

or

SELECT FROM table_name
WHERE column GLOB 'XXXX?'

or

SELECT FROM table_name
WHERE column GLOB '?XXXX'

or

SELECT FROM table_name
WHERE column GLOB '?XXXX?'

or

SELECT FROM table_name
WHERE column GLOB '????'

我們可以使用 AND 或 OR 運算子來結合 N 個數量的條件。上述程式碼中,XXXX 可以是任何數字或字串值。

來看下帶有 '*' 和 '?' 運算子的 GLOB 子句不同的地方:

語句 描述
WHERE SALARY GLOB '200*' 查詢以 200 開頭的任意值
WHERE SALARY GLOB '*200*' 查詢任意位置包含 200 的任意值
WHERE SALARY GLOB '?00*' 查詢第二位和第三位為 00 的任意值
WHERE SALARY GLOB '2??' 查詢以 2 開頭,且長度至少為 3 個字元的任意值
WHERE SALARY GLOB '*2' 查詢以 2 結尾的任意值
WHERE SALARY GLOB '?2*3' 查詢第二位為 2,且以 3 結尾的任意值
WHERE SALARY GLOB '2???3' 查詢長度為 5 位數,且以 2 開頭以 3 結尾的任意值

來看例項:

#AGE 以 2 開頭的所有記錄
SELECT * FROM COMPANY WHERE AGE  GLOB '2*';

#ADDRESS 文本里包含一個連字元(-)的所有記錄
SELECT * FROM COMPANY WHERE ADDRESS  GLOB '*-*';

好啦,本次記錄就到這裡了。

如果感覺不錯的話,請多多點贊支援哦。。。