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 的 AND 和 OR 運算子用於編譯多個條件來縮小在 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 '*-*';
好啦,本次記錄就到這裡了。
如果感覺不錯的話,請多多點贊支援哦。。。