SQLite(4) SELECT 基本組合用法大全
阿新 • • 發佈:2019-01-06
//表
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 |