SQLite的 WHERE 子句用于指定從一個(gè)表或多個(gè)表中獲取數(shù)據(jù)的條件。
如果滿(mǎn)足給定的條件,即為真(true)時(shí),則從表中返回特定的值。您可以使用 WHERE 子句來(lái)過(guò)濾記錄,只獲取需要的記錄。
WHERE 子句不僅可用在 SELECT 語(yǔ)句中,它也可用在 UPDATE、DELETE 語(yǔ)句中,等等,這些我們將在隨后的章節(jié)中學(xué)習(xí)到。
SQLite 的帶有 WHERE 子句的 SELECT 語(yǔ)句的基本語(yǔ)法如下:
SELECT column1, column2, columnN FROM table_name WHERE [condition]
您還可以使用比較或邏輯運(yùn)算符指定條件,比如 >、<、=、LIKE、NOT,等等。假設(shè) 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
下面的實(shí)例演示了 SQLite 邏輯運(yùn)算符的用法。下面的 SELECT 語(yǔ)句列出了 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 語(yǔ)句列出了 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 語(yǔ)句列出了 AGE 不為 NULL 的所有記錄,結(jié)果顯示所有的記錄,意味著沒(méi)有一個(gè)記錄的 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 語(yǔ)句列出了 NAME 以 'Ki' 開(kāi)始的所有記錄,'Ki' 之后的字符不做限制:
sqlite> SELECT * FROM COMPANY WHERE NAME LIKE 'Ki%'; ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 6 Kim 22 South-Hall 45000.0
下面的 SELECT 語(yǔ)句列出了 NAME 以 'Ki' 開(kāi)始的所有記錄,'Ki' 之后的字符不做限制:
sqlite> SELECT * FROM COMPANY WHERE NAME GLOB 'Ki*'; ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 6 Kim 22 South-Hall 45000.0
下面的 SELECT 語(yǔ)句列出了 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 語(yǔ)句列出了 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 語(yǔ)句列出了 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 語(yǔ)句使用 SQL 子查詢(xún),子查詢(xún)查找 SALARY > 65000 的帶有 AGE 字段的所有記錄,后邊的 WHERE 子句與 EXISTS 運(yùn)算符一起使用,列出了外查詢(xún)中的 AGE 存在于子查詢(xún)返回的結(jié)果中的所有記錄:
sqlite> SELECT AGE FROM COMPANY WHERE EXISTS (SELECT AGE FROM COMPANY WHERE SALARY > 65000); AGE ---------- 32 25 23 25 27 22 24
下面的 SELECT 語(yǔ)句使用 SQL 子查詢(xún),子查詢(xún)查找 SALARY > 65000 的帶有 AGE 字段的所有記錄,后邊的 WHERE 子句與 > 運(yùn)算符一起使用,列出了外查詢(xún)中的 AGE 大于子查詢(xún)返回的結(jié)果中的年齡的所有記錄:
sqlite> SELECT * FROM COMPANY WHERE AGE > (SELECT AGE FROM COMPANY WHERE SALARY > 65000); ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0
更多建議: