1. 程式人生 > >SQLite(4) SELECT 基本組合用法大全

SQLite(4) SELECT 基本組合用法大全

//表

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

1. Where 條件篩選

SELECT * FROM COMPANY WHERE AGE = 25 ;

2. AND/OR NOT/BETWEEN交併集

-- AGE 大於等於 25 且工資大於等於 65000.00 的所有記錄:
SELECT * FROM COMPANY WHERE AGE >= 25 AND SALARY >= 65000;
-- AGE 大於等於 25 或工資大於等於 65000.00 的所有記錄:
SELECT * FROM COMPANY WHERE AGE >= 25 OR SALARY >= 65000;
-- AGE 不為 NULL 的所有記錄
SELECT * FROM
COMPANY WHERE AGE IS NOT NULL;
-- AGE 的值為 25 或 27 的所有記錄:
SELECT * FROM COMPANY WHERE AGE IN ( 25, 27 );
 -- AGE 的值既不是 25 也不是 27 的所有記錄:
SELECT * FROM COMPANY WHERE AGE NOT IN ( 25, 27 );
-- AGE 的值在 25 與 27 之間的所有記錄:
SELECT * FROM COMPANY WHERE AGE BETWEEN 25 AND 27;
-- 使用 SQL 子查詢,子查詢查詢 SALARY > 65000 的帶有 AGE 欄位的所有記錄,後邊的 WHERE 子句與 EXISTS 運算子一起使用,列出了外查詢中的 AGE 存在於子查詢返回的結果中的所有記錄
SELECT AGE FROM COMPANY WHERE EXISTS (SELECT AGE FROM COMPANY WHERE SALARY > 65000);
-- 使用 SQL 子查詢,子查詢查詢 SALARY > 65000 的帶有 AGE 欄位的所有記錄,後邊的 WHERE 子句與 > 運算子一起使用,列出了外查詢中的 AGE 大於子查詢返回的結果中的年齡的所有記錄:
SELECT * FROM COMPANY WHERE AGE > (SELECT AGE FROM COMPANY WHERE SALARY > 65000);

3. Update 更新

-- 更新 ID 為 6 的客戶地址:
UPDATE COMPANY SET ADDRESS = 'Texas' WHERE ID = 6;
-- 修改 COMPANY 表中 ADDRESS 和 SALARY 列的所有值,則不需要使用 WHERE 子句
UPDATE COMPANY SET ADDRESS = 'Texas', SALARY = 20000.00;

4. Delete 刪除

-- 刪除 ID 為 7 的客戶:
DELETE FROM COMPANY WHERE ID = 7;
-- 從 COMPANY 表中刪除所有記錄,則不需要使用 WHERE 子句
DELETE FROM COMPANY;

5. Like 模糊匹配

這裡有兩個萬用字元與 LIKE 運算子一起使用:
百分號 (%)
下劃線 (_)
百分號(%)代表零個、一個或多個數字或字元。下劃線(_)代表一個單一的數字或字元。這些符號可以被組合使用。

語句描述
WHERE SALARY LIKE ‘200%’查詢以 200 開頭的任意值
WHERE SALARY LIKE ‘%200%’查詢任意位置包含 200 的任意值
WHERE SALARY LIKE ‘_00%’查詢第二位和第三位為 00 的任意值
WHERE SALARY LIKE ‘2_%_%’查詢以 2 開頭,且長度至少為 3 個字元的任意值
WHERE SALARY LIKE ‘%2’查詢以 2 結尾的任意值
WHERE SALARY LIKE ‘_2%3’查詢第二位為 2,且以 3 結尾的任意值
WHERE SALARY LIKE ‘2___3’查詢長度為 5 位數,且以 2 開頭以 3 結尾的任意值

//

-- COMPANY 表中 AGE 以 2 開頭的所有記錄:
SELECT * FROM COMPANY WHERE AGE  LIKE '2%';
--COMPANY 表中 ADDRESS 文本里包含一個連字元(s)的所有記錄
SELECT * FROM COMPANY WHERE ADDRESS  LIKE '%s%';

6. Glob 匹配指定模式

SQLite 的 GLOB 運算子是用來匹配萬用字元指定模式的文字值。如果搜尋表示式與模式表示式匹配,GLOB 運算子將返回真(true),也就是 1。與 LIKE 運算子不同的是,GLOB 是大小寫敏感的,對於下面的萬用字元,它遵循 UNIX 的語法。
星號 (*)
問號 (?)
星號(*)代表零個、一個或多個數字或字元。問號(?)代表一個單一的數字或字元。這些符號可以被組合使用。

語句描述
WHERE SALARY GLOB ‘200*’查詢以 200 開頭的任意值
WHERE SALARY GLOB ‘*200*’查詢任意位置包含 200 的任意值
WHERE SALARY GLOB ‘?00*’查詢第二位和第三位為 00 的任意值
WHERE SALARY GLOB ‘2??’查詢以 2 開頭,且長度至少為 3 個字元的任意值
WHERE SALARY GLOB ‘*2’查詢以 2 結尾的任意值
WHERE SALARY GLOB ‘?2*3’查詢第二位為 2,且以 3 結尾的任意值
WHERE SALARY GLOB ‘2???3’查詢長度為 5 位數,且以 2 開頭以 3 結尾的任意值
-- COMPANY 表中 AGE 以 2 開頭的所有記錄:
SELECT * FROM COMPANY WHERE AGE  GLOB '2*';
-- COMPANY 表中 ADDRESS 文本里包含一個連字元(-)的所有記錄:
SELECT * FROM COMPANY WHERE ADDRESS  GLOB '*-*';

7. Limit 條數限制

-- 用法1 預設從第0個開始
SELECT column1, column2, columnN FROM table_nameLIMIT rows;

-- 用法2 從第幾個開始
SELECT column1, column2, columnN FROM table_name LIMIT rows OFFSET num
-- 從表中提取的行數:
SELECT * FROM COMPANY LIMIT 6;

-- 從一個特定的偏移開始提取記錄。下面是一個例項,從第三位開始提取 6 個記錄:
SELECT * FROM COMPANY LIMIT 6 OFFSET 2;

8. Order By 排序

-- 將結果按 SALARY 升序排序:ASC(升序)
SELECT * FROM COMPANY ORDER BY SALARY ASC;
-- 將結果按 NAME 和 SALARY 升序排序:NAME的優先順序高於SALARY
SELECT * FROM COMPANY ORDER BY NAME, SALARY ASC;
-- 將結果按 NAME 降序排序:
SELECT * FROM COMPANY ORDER BY NAME DESC;

9. Group By 分組

在 SELECT 語句中,GROUP BY 子句放在 WHERE 子句之後,放在 ORDER BY 子句之前。

-- 瞭解每個客戶的工資總額,則可使用 GROUP BY 查詢
SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME;

讓我們使用下面的 INSERT 語句在 COMPANY 表中另外建立三個記錄:

INSERT INTO COMPANY VALUES (8, ‘Paul’, 24, ‘Houston’, 20000.00 );
INSERT INTO COMPANY VALUES (9, ‘James’, 44, ‘Norway’, 5000.00 );
INSERT INTO COMPANY VALUES (10, ‘James’, 45, ‘Texas’, 5000.00 );

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
8 Paul 24 Houston 20000.0
9 James 44 Norway 5000.0
10 James 45 Texas 5000.0
-- 用同樣的 GROUP BY 語句來對所有記錄按 NAME 列進行分組:
SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME ORDER BY NAME;
NAME SUM(SALARY)
Allen 15000
David 85000
James 20000
Kim 45000
Mark 65000
Paul 40000
Teddy 20000

10. Having 分組設定條件限制

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

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
8 Paul 24 Houston 20000.0
9 James 44 Norway 5000.0
10 James 45 Texas 5000.0
-- 將顯示名稱計數大於 2 的所有記錄:
SELECT * FROM COMPANY GROUP BY name HAVING count(name) > 2;
ID NAME AGE ADDRESS SALARY
10 James 45 Texas 5000

11. Distinct 消除重複

-- 沒有任何重複的條目:
SELECT DISTINCT name FROM COMPANY;
NAME
Paul
Allen
Teddy
Mark
David
Kim
James