sqlite 資料庫 相關知識

weixin_33912246發表於2017-07-08

一基本簡單介紹

SQLite 是一個自持的(self-contained)、無server的、零配置的、事務型的關係型資料庫引擎。由於他非常小,所以也能夠作為嵌入式資料庫內建在你的應用程式中。

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 檔案裡

BEGIN TRANSACTION;
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

相關文章