SQLite語句(二):INSERT DELETE UPDATE SELECT

zcbin發表於2018-03-03

一、INSERT語句

SQLite 的 INSERT INTO 語句用於向資料庫的某個表中新增新的資料行。

INSERT INTO TABLE_NAME [(column1, column2, column3,...columnN)]  
VALUES (value1, value2, value3,...valueN);
複製程式碼

在這裡,column1, column2,...columnN 是要插入資料的表中的列的名稱。

如果要為表中的所有列新增值,也可以不需要在 SQLite 查詢中指定列名稱。但要確保值的順序與列在表中的順序一致。語法如下:

INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);
複製程式碼

二、DELETE語句

SQLite 的 DELETE 查詢用於刪除表中已有的記錄。可以使用帶有 WHERE 子句的 DELETE 查詢來刪除選定行,否則所有的記錄都會被刪除。

DELETE FROM <表名> [WHERE 條件表示式]
複製程式碼

示例:

-- 刪除Id小於10的資料記錄
DELETE FROM Student WHERE Id<10;
複製程式碼

三、UPDATE語句

SQLite 的 UPDATE 查詢用於修改表中已有的記錄。可以使用帶有 WHERE 子句的 UPDATE 查詢來更新選定行,否則所有的行都會被更新。

UPDATE table_name
SET column1 = value1, column2 = value2...., columnN = valueN
WHERE [condition];
複製程式碼

示例:

-- 將Id在(10,100)的Age加1
UPDATE Student SET Age= Age+1 WHERE Id>10 AND Id<100
複製程式碼

四、SELECT語句

SQLite 的 SELECT 語句用於從 SQLite 資料庫表中獲取資料,以結果表的形式返回資料。這些結果表也被稱為結果集。 SQLite 的 SELECT 語句的基本語法如下:

SELECT column1, column2, columnN FROM table_name;
複製程式碼

SELECT語句可以與WHERE,ORDER BY等子句結合使用。語法如下:

SELECT [ALL | DISTINCT] <目標列表示式>[,<目標列表示式>]…
  FROM <表名或檢視名>[,<表名或檢視名>]…
  [WHERE <條件表示式>]
  [GROUP BY <列名> [HAVING <條件表示式>]]
  [ORDER BY <列名> [ASC|DESC]…]
複製程式碼

SQL查詢語句的順序:SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY。其中SELECT、FROM是必須的,HAVING子句只能與GROUP BY搭配使用

下圖表明瞭SELECT語句的處理過程:

SELECT語句的處理過程

DISTINCT

DISTINCT 關鍵字同 SELECT 語句一起使用,可以去除所有重複記錄,只返回唯一項。 有時候,資料表中可能會有重複的記錄。在檢索這些記錄的時候,應該只取回唯一的記錄,而不是重複的。

使用 DISTINCT 關鍵字去除查詢結果中的重複記錄的基本語法如下所示:

SELECT DISTINCT column1, column2,.....columnN 
FROM table_name
WHERE [condition]
複製程式碼

示例:

SELECT DISTINCT SALARY FROM CUSTOMERS
 ORDER BY SALARY
--去除(SALARY 欄位)重複記錄。
複製程式碼
WHERE

WHERE 子句用於有條件地從單個表中取回資料或者將多個表進行合併。 如果條件滿足,則查詢只返回表中滿足條件的值。你可以用 WHERE 子句來過濾查詢結果,只獲取必要的記錄。 WHERE 子句不僅可以用於 SELECT 語句,還可以用於 UPDATE、DELETE 等語句。

SELECT [ALL | DISTINCT] <目標列表示式>[,<目標列表示式>]…
FROM <表名或檢視名>[,<表名或檢視名>]…
WHERE <條件表示式>
複製程式碼

在指定條件時,可以使用關係運算子和邏輯運算子,例如 >、<、=、LIKE、NOT 等。

示例:

SELECT ID, NAME, SALARY 
FROM CUSTOMERS
WHERE SALARY > 2000;
複製程式碼
LIKE

LIKE 子句通過萬用字元來將一個值同其他相似的值作比較。可以同 LIKE 運算子一起使用的萬用字元有兩個:

  • 百分號(%)
  • 下劃線(_)

百分號代表零個、一個或者多個字元。下劃線則代表單個數字或者字元。兩個符號可以一起使用。

示例:

LIKE語句示例

Glob

SQLite 的 GLOB 運算子是用來匹配萬用字元指定模式的文字值。如果搜尋表示式與模式表示式匹配,GLOB 運算子將返回真(true),也就是 1。與 LIKE 運算子不同的是,GLOB 是大小寫敏感的,對於下面的萬用字元,它遵循 UNIX 的語法。

  • 星號 (*)
  • 問號 (?)

星號(*)代表零個、一個或多個數字或字元。問號(?)代表一個單一的數字或字元。這些符號可以被組合使用。

示例:

GLOB示例

LIMIT和OFFSET

LIMIT和OFFSET限定結果集的大小和範圍。LIMIT指定返回記錄的最大數量,OFFSET指定偏移的記錄數。 LIMIT和OFFSET一起使用時,可以用逗號代替OFFSET關鍵字。

SELECT * FROM students LIMIT 10 OFFSET 2;
-- 從第二條記錄開始選取10條記錄
複製程式碼
GROUP BY

SQLite 的 GROUP BY 子句用於與 SELECT 語句一起使用,來對相同的資料進行分組。 在 SELECT 語句中,GROUP BY 子句放在 WHERE 子句之後,放在 ORDER BY 子句之前。

示例: 假設有下圖的一張表company:

SQLite語句(二):INSERT DELETE UPDATE SELECT

執行語句:

SELECT name, SUM(salary) FROM company GROUP BY name
複製程式碼

得到如下結果:

SQLite語句(二):INSERT DELETE UPDATE SELECT

HAVING

HAVING 子句允許指定條件來過濾將出現在最終結果中的分組結果。 WHERE 子句在所選列上設定條件,而 HAVING 子句則在由 GROUP BY 子句建立的分組上設定條件。

在一個查詢中,HAVING 子句必須放在 GROUP BY 子句之後,必須放在 ORDER BY 子句之前。

示例: 還是company,執行語句:

SELECT * FROM company GROUP BY name HAVING count(name) > 2;
複製程式碼

結果如下:

SQLite語句(二):INSERT DELETE UPDATE SELECT

ORDER BY

SQLite 的ORDER BY子句是用來基於一個或多個列按升序或降序順序排列資料。 當要對查詢結果排序時,使用ORDER BY子句。

SELECT * FROM students ORDER BY age desc;
複製程式碼

按照age將查詢結果降序排列。預設是asc(升序)。

相關文章