Latest web development tutorials

SQLite Where 子句

SQLite的WHERE子句用於指定從一個表或多個表中獲取數據的條件。

如果滿足給定的條件,即為真(true)時,則從表中返回特定的值。 您可以使用WHERE 子句來過濾記錄,只獲取需要的記錄。

WHERE 子句不僅可用在SELECT 語句中,它也可用在UPDATE、DELETE 語句中,等等,這些我們將在隨後的章節中學習到。

語法

SQLite 的帶有WHERE 子句的SELECT 語句的基本語法如下:

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

下面的實例演示了SQLite 邏輯運算符的用法。 下面的SELECT語句列出了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語句列出了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 語句列出了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 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' 之後的字符不做限制:

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 子查詢,子查詢查找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