SQLite WHERE子句用于指定從一個或多個表中獲取數(shù)據(jù)時的條件。
如果滿足給定條件,即為true,那么它將從表中返回特定值。您將必須使用WHERE子句來過濾記錄并僅提取必要的記錄。
WHERE子句不僅在SELECT語句中使用,而且在UPDATE,DELETE語句等中使用,這將在后續(xù)章節(jié)中介紹。
以下是帶有WHERE子句的SQLite SELECT語句的基本語法。
SELECT column1, column2, columnN FROM table_nameWHERE [condition]
您可以使用比較運(yùn)算符或邏輯運(yùn)算符(例如>,<,=,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
以下是顯示SQLite邏輯運(yùn)算符用法的簡單示例。以下SELECT語句列出AGE(年齡)大于或等于25 和 SALARY (薪水)大于或等于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語句列出AGE(年齡)大于或等于25 或 SALARY (薪水)大于或等于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語句列出了AGE(年齡)不為NULL的所有記錄,這意味著將顯示所有記錄,因?yàn)闆]有記錄的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語句列出了NAME以'Ki'開頭的所有記錄,而與'Ki'之后的任意記錄。
sqlite> SELECT * FROM COMPANY WHERE NAME LIKE 'Ki%'; ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 6 Kim 22 South-Hall 45000.0
以下SELECT語句列出了NAME以'Ki'開頭的所有記錄,與'Ki'之后的記錄無關(guān)。
sqlite> SELECT * FROM COMPANY WHERE NAME GLOB 'Ki*'; ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 6 Kim 22 South-Hall 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 Rich-Mond 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 South-Hall 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 Rich-Mond 65000.0 5 David 27 Texas 85000.0
以下SELECT語句使用SQL子查詢,其中子查詢查找AGE(年齡)字段的SALARY> 65000的所有記錄,隨后WHERE子句與EXISTS運(yùn)算符一起使用,以列出外部查詢存在AGE的所有記錄在子查詢返回的結(jié)果中-
sqlite> SELECT AGE FROM COMPANY WHERE EXISTS (SELECT AGE FROM COMPANY WHERE SALARY > 65000); AGE ---------- 32 25 23 25 27 22 24
以下SELECT語句使用SQL子查詢,其中子查詢查找AGE字段的SALARY> 65000的所有記錄,以及與 > 運(yùn)算符一起使用的where子句列出外部查詢的AGE大于子查詢返回的結(jié)果中的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