一基本簡單介紹
SQLite 被應用在 Solaris 10作業系統、Mac OS 作業系統、iPhone 和 Skype 中。
QT4 、Python 、 PHP 都預設支援 SQLite ,Firefox Amarok 等流行的應用程式在內部也使用了 SQLite.
SQLite 資料庫引擎實現了基本的 SQL-92 標準,引擎本身僅僅有一個檔案,大小不到 300k ,可是並不作為一個獨立的程式執行,而是動態或者靜態的連結到其它應用程式中。它生成的資料庫檔案是一個普通的磁碟檔案,能夠放置在不論什麼資料夾下。SQLite 本身是 C 語言開發的,開源也跨平臺,而且被全部的主流程式語言支援,
SQLite是一個程式內的庫,實現了自給自足的、無server的、零配置的、事務性的 SQL 資料庫引擎。它是一個零配置的資料庫,這意味著與其它資料庫一樣。您不須要在系統中配置。
就像其它資料庫,SQLite 引擎不是一個獨立的程式,能夠按應用程式需求進行靜態或動態連線。SQLite 直接訪問其儲存檔案。
SQLite 經常使用約束例如以下
- NOT NULL - 非空
- UNIQUE - 唯一
- PRIMARY KEY - 主鍵
- FOREIGN KEY - 外來鍵
- CHECK - 條件檢查
- DEFAULT - 預設
二、主鍵 PRIMARY KEY
我們還是進入 SQLite 命令列環境。建立一個 test.db 資料庫用來做實驗,例如以下
myqiao@ubuntu:~/My Documents/db$ sqlite3 test.db -- Loading resources from /home/myqiao/.sqliterc SQLite version 3.7.4 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> .tables sqlite>
執行 .tables 命令沒有返回,說明資料庫是空的。假設你的資料庫裡面有內容並影響到以下的實驗, 你能夠用我們上一篇學的 DROP TABLE 來刪除造成影響的表, 或者用 ALTER TABLE ... RENAME TO ... 來改名。
以下言歸正轉,我們來說說主鍵 PRIMARY KEY 。
- 首先。資料表中每一條記錄都有一個主鍵。 這就像我們每的身份證號碼、員工號、銀行帳號。 反過來也能夠說,每個主鍵相應著一條資料記錄。 所以,主鍵必須是唯一的。
- 其次,普通情況下主鍵同一時候也是一個索引,所以通過主鍵查詢記錄速度比較快。
- 第三,在關係型資料庫中。一個表的主鍵能夠作為另外一個表的外來鍵, 這樣,這兩個表之間就通過這個鍵建立了關係。
- 最後。主鍵通常是整數或者字串。僅僅要保證唯一即可。 在 SQLite 中,主鍵假設是整數型別,該列的值能夠自己主動增長。
以下我們來做實驗
sqlite> sqlite> CREATE TABLE Teachers(Id integer PRIMARY KEY,Name text); sqlite> .tables Teachers sqlite> INSERT INTO Teachers(Name) Values('張三'); sqlite> INSERT INTO Teachers(Name) Values('李四'); sqlite> INSERT INTO Teachers(Name) Values('王二麻子'); sqlite> SELECT * FROM Teachers; Id Name ---------- ---------- 1 張三 2 李四 3 王二麻 sqlite> INSERT INTO Teachers(Id,Name) Values(2,'孫悟空'); Error: PRIMARY KEY must be unique sqlite>
我們先新建了一個 Teachers 表,並設定了兩個欄位列。當中 Id 欄位列為主鍵列。 然後。我們向當中插入三條資料並查詢。反饋一切正常。
注意:在插入前三條資料的時候。命令中並沒有明白指明 Id 的值,系統自己主動賦值,而且數值自己主動增長。
插入第四條資料的時候。我給了一個明白的 Id 編號為 2,由於李四的編號已經是 2 了, 所以系統提示我錯誤:主鍵必須唯一。
三、預設值 DEFAULT
有一些特別的欄位列。在每一條記錄中,他的值基本上都是一樣的。僅僅是在個別情況下才改為別的值。這種欄位列我們能夠給他設一個預設值。
以下我們來做實驗
sqlite> sqlite> DROP TABLE Teachers; sqlite> .tables sqlite> sqlite> CREATE TABLE Teachers(Id integer PRIMARY KEY,Name text,Country text DEFAULT '中國'); sqlite> .tables Teachers sqlite> INSERT INTO Teachers(Name) Values('張三'); sqlite> INSERT INTO Teachers(Name) Values('李四'); sqlite> INSERT INTO Teachers(Name) Values('王二麻子'); sqlite> INSERT INTO Teachers(Name,Country) Values('孫悟空','天庭'); sqlite> SELECT * FROM Teachers; Id Name Country ---- --------------- --------------- 1 張三 中國 2 李四 中國 3 王二麻子 中國 4 孫悟空 天庭 sqlite>
先把之前的 Teachers 表刪除,然後又一次建立。這回 Teachers 表多了一個 Country 欄位, 而且設定預設值為“中國”。然後我們插入四條資料到 Teachers 表。
前三條資料都沒有明白指明 Country 欄位的值。僅僅有第四條資料指明瞭“孫悟空”的 Country 為“天庭”。
查詢資料,發現前三條資料都填上了預設值,實驗成功。
資料顯示有點走樣,命令 .width 4 15 15 設定的列寬,能夠通過 .show 檢視, 可能是由於中文的原因,所以沒有對齊。
四、非空 NOT NULL
有一些欄位我們可能一時不知到該填些什麼。同一時候它也沒設定預設值, 當加入資料時。我們把這種欄位空著不填,系統覺得他是 NULL 值。
可是還有另外一類欄位,必須被填上資料,假設不填,系統就會報錯。 這種欄位被稱為 NOT NULL 非空欄位,須要在定義表的時候事先宣告。
以下我們來做實驗
sqlite> sqlite> DROP TABLE Teachers; sqlite> .tables sqlite> sqlite> CREATE TABLE Teachers(Id integer PRIMARY KEY,Name text,Age integer NOT NULL,City text); sqlite> .tables Teachers sqlite> INSERT INTO Teachers(Name,Age) Values('Alice',23); sqlite> INSERT INTO Teachers(Name,Age) Values('Bob',29); sqlite> INSERT INTO Teachers(id,Name,Age) Values(6,'Jhon',36); sqlite> SELECT * FROM Teachers; Id Name Age City ---- --------------- --------------- --------------- 1 Alice 23 NULL 2 Bob 29 NULL 6 Jhon 36 NULL sqlite> INSERT INTO Teachers(Name) Values('Mary'); Error: Teachers.Age may not be NULL sqlite>
還是先刪除舊錶,建立新表。
這回 Teachers 表宣告瞭一個 NOT NULL 欄位 Age。同一時候另一個能夠為 NULL 的欄位 City
插入前三條資料都沒有指定 City 的值,查詢能夠看到 City 欄位所有為空
注意:這裡的 NULL 僅僅是對“什麼都沒有”的一種顯示形式, 能夠通過 .nullvalue 命令改為別的形式,詳細見第一篇
插入第四條資料時沒有指定 Age 的值,系統就報錯了: Teachers.Age 不能為空
五、 唯一 UNIQUE
這一約束非常好理解。除了主列以為,另一些列也不能有反覆值。不多說,直接看程式碼
sqlite> sqlite> DROP TABLE Teachers; sqlite> .tables sqlite> sqlite> CREATE TABLE Teachers(Id integer PRIMARY KEY,Name text UNIQUE); sqlite> .tables Teachers sqlite> INSERT INTO Teachers(Name) VALUES('Alice'); sqlite> INSERT INTO Teachers(Name) VALUES('Bob'); sqlite> INSERT INTO Teachers(Name) VALUES('Jane'); sqlite> INSERT INTO Teachers(Name) VALUES('Bob'); Error: column Name is not unique sqlite>
這次的 Teachers 表僅僅有 Name 這一列,可是 Name 列不能有反覆值。
能夠看到,到我們第二次插入 Bob 時。系統就報錯了。
六、 條件檢查 CHECK
某些值必須符合一定的條件才同意存入,這是就須要用到這個 CHECK 約束。
sqlite> sqlite> DROP TABLE Teachers; sqlite> .tables sqlite> sqlite> CREATE TABLE Teachers(Id integer PRIMARY KEY,Age integer CHECK(Age>22)); sqlite> .tables Teachers sqlite> INSERT INTO Teachers(Age) VALUES(45); sqlite> INSERT INTO Teachers(Age) VALUES(33); sqlite> INSERT INTO Teachers(Age) VALUES(23); sqlite> INSERT INTO Teachers(Age) VALUES(21); Error: constraint failed sqlite>
Age 欄位要求必須大於 22。當插入的資料小於22時,系統報錯。
七、外來鍵 FOREIGN KEY
如今,我們的資料庫中已經有 Teachers 表了,假如我們再建立一個 Students 表, 要求 Students 表中的每個學生都相應一個 Teachers 表中的教師。
非常easy,僅僅須要在 Students 表中建立一個 TeacherId 欄位。儲存相應教師的 Id 號。 這樣。學生和教師之間就建立了關係。
問題是:我們有可能給學生存入一個不在 Teachers 表中的 TeacherId 值。 並且發現不了這個錯誤。
這樣的情況下,能夠把 Students 表中 TeacherId 欄位宣告為一個外來鍵。 讓它的值相應到 Teachers 表中的 Id 欄位上。
這樣。一旦在 Students 表中存入一個不存在的教師 Id 。系統就會報錯。
sqlite> sqlite> .tables Teachers sqlite> CREATE TABLE Students (Id integer PRIMARY KEY, TeacherId integer, FOREIGN KEY(TeacherId) REFERENCES Teachers(id) ); sqlite> .tables Students Teachers sqlite> SELECT * FROM Teachers; Id Age ---- --------------- 1 40 2 33 3 23 sqlite> INSERT INTO Students(TeacherId) VALUES(1); sqlite> INSERT INTO Students(TeacherId) VALUES(3); sqlite> INSERT INTO Students(TeacherId) VALUES(9); sqlite> SELECT * FROM Students; Id TeacherId ---- --------------- 1 1 2 3 3 9 sqlite>
這裡建立了 Students 表。而且把 TeacherId 作為外來鍵與 Teachers 表的 Id 列相相應。
問題來了:插入的前兩條資料沒問題,由於 Id 編號 1、3 都在 Teachers 表中; 可是數字 9 並不在 Teachers 表中,不但沒有報錯,系統還儲存進去了,這是為什麼呢?
據說 SQLite 的外來鍵約束預設情況下並非開啟的,假設你須要這個功能。你可能須要下載原始碼版本號,設定每一個編譯引數。然後又一次編譯,這樣你就得到支援外來鍵的 SQLite 了。
依據前面幾篇的內容,我們能夠非常輕送的建立一個資料表,並向當中插入一些資料,不多說。看樣例:
myqiao@ubuntu:~/My Documents/db$ sqlite3 test.db -- Loading resources from /home/myqiao/.sqliterc SQLite version 3.7.4 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> .tables sqlite> sqlite> CREATE TABLE Teachers( ...> Id integer PRIMARY KEY, ...> Name text NOT NULL, ...> Age integer CHECK(Age>22), ...> Country text DEFAULT 'USA'); sqlite> .tables Teachers sqlite> sqlite> INSERT INTO Teachers VALUES(1,'Alice',25,'CHN'); sqlite> INSERT INTO Teachers VALUES(2,'Bob',25,'BRA'); sqlite> INSERT INTO Teachers(Id,Name,Age,Country) VALUES(3,'Charls',33,'USA'); sqlite> INSERT INTO Teachers(Name,Age) VALUES('Jhon',43); sqlite> SELECT * FROM Teachers; Id Name Age Country ---- --------------- --------------- --------------- 1 Alice 25 CHN 2 Bob 25 BRA 3 Charls 33 USA 4 Jhon 43 USA sqlite>
非常easy,建立了一個 Teachers 表並向當中加入了四條資料,設定了一些約束。當中有自己主動新增的主鍵、預設值等等。
八、改動資料 UPDATE 表 SET 列 = '新值' 【WHERE 條件語句】
UPDATE 語句用來更新表中的某個列。假設不設定條件,則全部記錄的這一列都被更新; 假設設定了條件,則符合條件的記錄的這一列被更新。 WHERE 子句被用來設定條件。例如以下例:
sqlite> sqlite> SELECT * FROM Teachers; Id Name Age Country ---- --------------- --------------- --------------- 1 Alice 25 CHN 2 Bob 25 BRA 3 Charls 33 USA 4 Jhon 43 USA sqlite> sqlite> sqlite> UPDATE Teachers SET Country='China'; sqlite> SELECT * FROM Teachers; Id Name Age Country ---- --------------- --------------- --------------- 1 Alice 25 China 2 Bob 25 China 3 Charls 33 China 4 Jhon 43 China sqlite> sqlite> sqlite> UPDATE Teachers SET Country='America' WHERE Id=3; sqlite> SELECT * FROM Teachers; Id Name Age Country ---- --------------- --------------- --------------- 1 Alice 25 China 2 Bob 25 China 3 Charls 33 America 4 Jhon 43 China sqlite> sqlite> sqlite> UPDATE Teachers SET Country='India' WHERE Age<30; sqlite> SELECT * FROM Teachers; Id Name Age Country ---- --------------- --------------- --------------- 1 Alice 25 India 2 Bob 25 India 3 Charls 33 America 4 Jhon 43 China sqlite>
九、刪除資料 DELETE FROM 表 【WHERE 條件語句】
假設設定 WHERE 條件子句,則刪除符合條件的資料記錄;假設沒有設定條件語句。則刪除全部記錄
sqlite> sqlite> SELECT * FROM Teachers; Id Name Age Country ---- --------------- --------------- --------------- 1 Alice 25 India 2 Bob 25 India 3 Charls 33 America 4 Jhon 43 China sqlite> sqlite> sqlite> DELETE FROM Teachers WHERE Age>30; sqlite> SELECT * FROM Teachers; Id Name Age Country ---- --------------- --------------- --------------- 1 Alice 25 India 2 Bob 25 India sqlite> sqlite> sqlite> DELETE FROM Teachers; sqlite> SELECT * FROM Teachers; sqlite>
十、查詢資料 SELECT 列... FROM 表
為了後面的練習,須要一些樣本資料。 首先將以下的 SQL 語句儲存到 data.sql 檔案裡
CREATE TABLE Cars(Id integer PRIMARY KEY, Name text, Cost integer);
INSERT INTO Cars VALUES(1,'Audi',52642);
INSERT INTO Cars VALUES(2,'Mercedes',57127);
INSERT INTO Cars VALUES(3,'Skoda',9000);
INSERT INTO Cars VALUES(4,'Volvo',29000);
INSERT INTO Cars VALUES(5,'Bentley',350000);
INSERT INTO Cars VALUES(6,'Citroen',21000);
INSERT INTO Cars VALUES(7,'Hummer',41400);
INSERT INTO Cars VALUES(8,'Volkswagen',21600);
COMMIT;
BEGIN TRANSACTION;
CREATE TABLE Orders(Id integer PRIMARY KEY, OrderPrice integer CHECK(OrderPrice>0),
Customer text);
INSERT INTO Orders(OrderPrice, Customer) VALUES(1200, "Williamson");
INSERT INTO Orders(OrderPrice, Customer) VALUES(200, "Robertson");
INSERT INTO Orders(OrderPrice, Customer) VALUES(40, "Robertson");
INSERT INTO Orders(OrderPrice, Customer) VALUES(1640, "Smith");
INSERT INTO Orders(OrderPrice, Customer) VALUES(100, "Robertson");
INSERT INTO Orders(OrderPrice, Customer) VALUES(50, "Williamson");
INSERT INTO Orders(OrderPrice, Customer) VALUES(150, "Smith");
INSERT INTO Orders(OrderPrice, Customer) VALUES(250, "Smith");
INSERT INTO Orders(OrderPrice, Customer) VALUES(840, "Brown");
INSERT INTO Orders(OrderPrice, Customer) VALUES(440, "Black");
INSERT INTO Orders(OrderPrice, Customer) VALUES(20, "Brown");
COMMIT;
然後在在終端執行命令 .read data.sql,將資料匯入到資料庫中
sqlite> sqlite> .tables Friends sqlite> .read data.sql sqlite> .tables Cars Orders Teachers sqlite>
能夠看到。Cars 表和 Orders 表已經匯入到資料庫中,如今能夠查詢了
sqlite> sqlite> SELECT * FROM Cars; Id Name Cost ---- --------------- --------------- 1 Audi 52642 2 Mercedes 57127 3 Skoda 9000 4 Volvo 29000 5 Bentley 350000 6 Citroen 21000 7 Hummer 41400 8 Volkswagen 21600 sqlite> SELECT * FROM Orders; Id OrderPrice Customer ---- --------------- --------------- 1 1200 Williamson 2 200 Robertson 3 40 Robertson 4 1640 Smith 5 100 Robertson 6 50 Williamson 7 150 Smith 8 250 Smith 9 840 Brown 10 440 Black 11 20 Brown sqlite>
十一、 限制返回數量 SELECT 列... FROM 表 LIMIT 數量 OFFSET 位置
有時候資料庫中的資料太多。所有返回可不行,能夠限制返回的數量。還能夠設定返回的起始位置,例如以下:
sqlite> sqlite> SELECT * FROM Cars LIMIT 4; Id Name Cost ---- --------------- --------------- 1 Audi 52642 2 Mercedes 57127 3 Skoda 9000 4 Volvo 29000 sqlite> sqlite> SELECT * FROM Cars LIMIT 4 OFFSET 2; Id Name Cost ---- --------------- --------------- 3 Skoda 9000 4 Volvo 29000 5 Bentley 350000 6 Citroen 21000 sqlite>
十二、 別名 SELECT 列 AS 別名,列 AS 別名 FROM
我們能夠給返回資料集中的某些列起一個比較直觀的名字,比方把 Cost 改為"Price Of Car"
sqlite> sqlite> SELECT Name , Cost AS 'Price Of Car' FROM Cars; Name Price Of Car ---- --------------- Audi 52642 Merc 57127 Skod 9000 Volv 29000 Bent 350000 Citr 21000 Humm 41400 Volk 21600 sqlite>
十三、 條件查詢 SELECT 列 FROM 表 【WHERE 條件語句】
一般的條件語句都是大於、小於、等於之類的。這裡有幾個特別的條件語句
LIKE
- LIKE 用萬用字元匹配字串
- 下劃線 _ 匹配一個字串
- 百分號 % 匹配多個字串
- LIKE 匹配字串時不區分大寫和小寫
sqlite> sqlite> SELECT * FROM Cars WHERE Name Like '____'; Id Name Cost ---- --------------- --------------- 1 Audi 52642 sqlite> sqlite> SELECT * FROM Cars WHERE Name Like '%en'; Id Name Cost ---- --------------- --------------- 6 Citroen 21000 8 Volkswagen 21600 sqlite> sqlite> SELECT * FROM Cars WHERE Name Like '%EN'; Id Name Cost ---- --------------- --------------- 6 Citroen 21000 8 Volkswagen 21600 sqlite>
GLOB
- GLOB 用萬用字元匹配字串
- 下劃線 ? 匹配一個字串
- 百分號 * 匹配多個字串
- LIKE 匹配字串時,區分大寫和小寫
BETWEEN 值1 AND 值2
返回兩個值之間的資料集合。
以下的語句查詢價格在 20000 到 55000 之間的車,都是好車啊。
sqlite> sqlite> SELECT * FROM Cars WHERE Cost BETWEEN 20000 AND 55000; Id Name Cost ---- --------------- --------------- 1 Audi 52642 4 Volvo 29000 6 Citroen 21000 7 Hummer 41400 8 Volkswagen 21600 sqlite>
IN (集合)
相應列的值必須在集合中。以下的語句查詢奧迪和悍馬的價格。
sqlite> sqlite> SELECT * FROM Cars WHERE Name IN ('Audi','Hummer'); Id Name Cost ---- --------------- --------------- 1 Audi 52642 7 Hummer 41400 sqlite>
十四、 排序 ORDER BY 列 ASC (DESC)
指定某個列進行排序,ASC 為升序,DESC 為降序。以下的語句查詢汽車品牌和價格,並以價格排序
sqlite> sqlite> SELECT Name, Cost FROM Cars ORDER BY Cost DESC; Name Cost ---- --------------- Bent 350000 Merc 57127 Audi 52642 Humm 41400 Volv 29000 Volk 21600 Citr 21000 Skod 9000 sqlite>
十五、 區分 DISTINCT 列
有一些欄位的值可能會出現反覆,比方訂單表中。一個客戶可能會有好幾份訂單,因此客戶的名字會反覆出現。
究竟有哪些客戶下了訂單呢?以下的語句將客戶名字區分出來。
sqlite> sqlite> Select * FROM Orders; Id OrderPrice Customer ---- --------------- --------------- 1 1200 Williamson 2 200 Robertson 3 40 Robertson 4 1640 Smith 5 100 Robertson 6 50 Williamson 7 150 Smith 8 250 Smith 9 840 Brown 10 440 Black 11 20 Brown sqlite> sqlite> SELECT DISTINCT Customer FROM ORDERS; Customer --------------- Black Brown Robertson Smith Williamson sqlite>
十六、 分組 GROUP BY 列
分組和前面的區分有一點類似。區分不過為了去掉反覆項。而分組是為了對各類不同項進行統計計算。
比方上面的樣例,我們區分出 5 個客戶。這 5 個客戶一共下了 11 個訂單,說明非常多客戶都下了不止一個訂單。
以下的語句統計每一個客戶在訂單上總共花費了多少錢。
sqlite> sqlite> SELECT sum(OrderPrice) AS Total, Customer FROM Orders GROUP BY Customer; Total Customer --------------- --------------- 440 Black 860 Brown 340 Robertson 2040 Smith 1250 Williamson sqlite>
這裡 Sum 是 SQLite 內建的統計函式。在這個樣例中用來求每一個顧客的訂單位價格格的和。
統計結果也能夠設定返回條件。可是不能用 WHERE 子句。而是用 HAVING 子句。例如以下例,返回訂單總額大於 1000 的顧客。
sqlite> sqlite> SELECT sum(OrderPrice) AS Total, Customer FROM Orders ...> GROUP BY Customer HAVING sum(OrderPrice)>1000; Total Customer --------------- --------------- 2040 Smith 1250 Williamson sqlite>
十七、 邏輯運算子
有的查詢涉及的條件語句非常複雜。是有好幾個條件語句經過邏輯運算得來的,一共同擁有三種邏輯運算子:
- AND
- OR
- NOT
一般略微瞭解點程式設計知識的應該都沒問題。
AND 運算子
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)。
例項
如果 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
以下的 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
OR 運算子
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)就可以。
例項
如果 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
以下的 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