sqlite-sqlite3基本操作2

SQLite Like 子句

SQLite 的 LIKE 運算符是用來匹配通配符指定模式的文本值。如果搜索表達式與模式表達式匹配,LIKE 運算符將返回真(true),也就是 1。這裏有兩個通配符與 LIKE 運算符一起使用:

  • 百分號 (%)

  • 下劃線 (_)

百分號(%)代表零個、一個或多個數字或字符。下劃線(_)代表一個單一的數字或字符。這些符號可以被組合使用。

語法

% 和 _ 的基本語法如下:

SELECT FROM table_name
WHERE column LIKE 'XXXX%'

or 

SELECT FROM table_name
WHERE column LIKE '%XXXX%'

or

SELECT FROM table_name
WHERE column LIKE 'XXXX_'

or

SELECT FROM table_name
WHERE column LIKE '_XXXX'

or

SELECT FROM table_name
WHERE column LIKE '_XXXX_'

您可以使用 AND 或 OR 運算符來結合 N 個數量的條件。在這裏,XXXX 可以是任何數字或字符串值。

實例

下面一些實例演示了 帶有 '%' 和 '_' 運算符的 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 表有以下記錄:

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

下面是一個實例,它顯示 COMPANY 表中 AGE 以 2 開頭的所有記錄:

sqlite> SELECT * FROM COMPANY WHERE AGE  LIKE '2%';

這將產生以下結果:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
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

下面是一個實例,它顯示 COMPANY 表中 ADDRESS 文本里包含一個連字符(-)的所有記錄:

sqlite> SELECT * FROM COMPANY WHERE ADDRESS  LIKE '%-%';

這將產生以下結果:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
4           Mark        25          Rich-Mond   65000.0
6           Kim         22          South-Hall  45000.0

SQLite Glob 子句

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

  • 星號 (*)

  • 問號 (?)

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

語法

* 和 ? 的基本語法如下:

SELECT FROM table_name
WHERE column GLOB 'XXXX*'

or 

SELECT FROM table_name
WHERE column GLOB '*XXXX*'

or

SELECT FROM table_name
WHERE column GLOB 'XXXX?'

or

SELECT FROM table_name
WHERE column GLOB '?XXXX'

or

SELECT FROM table_name
WHERE column GLOB '?XXXX?'

or

SELECT FROM table_name
WHERE column GLOB '????'

您可以使用 AND 或 OR 運算符來結合 N 個數量的條件。在這裏,XXXX 可以是任何數字或字符串值。

實例

下面一些實例演示了 帶有 '*' 和 '?' 運算符的 GLOB 子句不同的地方:

語句 描述
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 表有以下記錄:

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

下面是一個實例,它顯示 COMPANY 表中 AGE 以 2 開頭的所有記錄:

sqlite> SELECT * FROM COMPANY WHERE AGE  GLOB '2*';

這將產生以下結果:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
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

下面是一個實例,它顯示 COMPANY 表中 ADDRESS 文本里包含一個連字符(-)的所有記錄:

sqlite> SELECT * FROM COMPANY WHERE ADDRESS  GLOB '*-*';

這將產生以下結果:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
4           Mark        25          Rich-Mond   65000.0
6           Kim         22          South-Hall  45000.0

SQLite Limit 子句

SQLite 的 LIMIT 子句用於限制由 SELECT 語句返回的數據數量。

語法

帶有 LIMIT 子句的 SELECT 語句的基本語法如下:

SELECT column1, column2, columnN 
FROM table_name
LIMIT [no of rows]

下面是 LIMIT 子句與 OFFSET 子句一起使用時的語法:

SELECT column1, column2, columnN 
FROM table_name
LIMIT [no of rows] OFFSET [row num]

SQLite 引擎將返回從下一行開始直到給定的 OFFSET 爲止的所有行,如下面的最後一個實例所示。

實例

假設 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

下面是一個實例,它限制了您想要從表中提取的行數:

sqlite> SELECT * FROM COMPANY LIMIT 6;

這將產生以下結果:

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

但是,在某些情況下,可能需要從一個特定的偏移開始提取記錄。下面是一個實例,從第三位開始提取 3 個記錄:

sqlite> SELECT * FROM COMPANY LIMIT 3 OFFSET 2;

這將產生以下結果:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
3           Teddy       23          Norway      20000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0

SQLite Order By

SQLite 的 ORDER BY 子句是用來基於一個或多個列按升序或降序順序排列數據。

語法

ORDER BY 子句的基本語法如下:

SELECT column-list 
FROM table_name 
[WHERE condition] 
[ORDER BY column1, column2, .. columnN] [ASC | DESC];

您可以在 ORDER BY 子句中使用多個列。確保您使用的排序列在列清單中。

實例

假設 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

下面是一個實例,它會將結果按 SALARY 降序排序:

sqlite> SELECT * FROM COMPANY ORDER BY SALARY ASC;

這將產生以下結果:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
7           James       24          Houston     10000.0
2           Allen       25          Texas       15000.0
1           Paul        32          California  20000.0
3           Teddy       23          Norway      20000.0
6           Kim         22          South-Hall  45000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0

下面是一個實例,它會將結果按 NAME 和 SALARY 降序排序:

sqlite> SELECT * FROM COMPANY ORDER BY NAME, SALARY ASC;

這將產生以下結果:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
2           Allen       25          Texas       15000.0
5           David       27          Texas       85000.0
7           James       24          Houston     10000.0
6           Kim         22          South-Hall  45000.0
4           Mark        25          Rich-Mond   65000.0
1           Paul        32          California  20000.0
3           Teddy       23          Norway      20000.0

下面是一個實例,它會將結果按 NAME 降序排序:

sqlite> SELECT * FROM COMPANY ORDER BY NAME DESC;

這將產生以下結果:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
3           Teddy       23          Norway      20000.0
1           Paul        32          California  20000.0
4           Mark        25          Rich-Mond   65000.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0
5           David       27          Texas       85000.0
2           Allen       25          Texas       15000.0

SQLite Group By

SQLite 的 GROUP BY 子句用於與 SELECT 語句一起使用,來對相同的數據進行分組。

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

語法

下面給出了 GROUP BY 子句的基本語法。GROUP BY 子句必須放在 WHERE 子句中的條件之後,必須放在 ORDER BY 子句之前。

SELECT column-list
FROM table_name
WHERE [ conditions ]
GROUP BY column1, column2....columnN
ORDER BY column1, column2....columnN

您可以在 GROUP BY 子句中使用多個列。確保您使用的分組列在列清單中。

實例

假設 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

如果您想了解每個客戶的工資總額,則可使用 GROUP BY 查詢,如下所示:

sqlite> SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME;

這將產生以下結果:

NAME        SUM(SALARY)
----------  -----------
Allen       15000.0
David       85000.0
James       10000.0
Kim         45000.0
Mark        65000.0
Paul        20000.0
Teddy       20000.0

現在,讓我們使用下面的 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 列進行分組,如下所示:

sqlite> 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

讓我們把 ORDER BY 子句與 GROUP BY 子句一起使用,如下所示:

sqlite>  SELECT NAME, SUM(SALARY) 
         FROM COMPANY GROUP BY NAME ORDER BY NAME DESC;

這將產生以下結果:

NAME        SUM(SALARY)
----------  -----------
Teddy       20000
Paul        40000
Mark        65000
Kim         45000
James       20000
David       85000
Allen       15000

SQLite Having 子句

HAVING 子句允許指定條件來過濾將出現在最終結果中的分組結果。

WHERE 子句在所選列上設置條件,而 HAVING 子句則在由 GROUP BY 子句創建的分組上設置條件。

語法

下面是 HAVING 子句在 SELECT 查詢中的位置:

SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY

在一個查詢中,HAVING 子句必須放在 GROUP BY 子句之後,必須放在 ORDER BY 子句之前。下面是包含 HAVING 子句的 SELECT 語句的語法:

SELECT column1, column2
FROM table1, table2
WHERE [ conditions ]
GROUP BY column1, column2
HAVING [ conditions ]
ORDER BY column1, column2

實例

假設 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
8           Paul        24          Houston     20000.0
9           James       44          Norway      5000.0
10          James       45          Texas       5000.0

下面是一個實例,它將顯示名稱計數小於 2 的所有記錄:

sqlite > SELECT * FROM COMPANY GROUP BY name HAVING count(name) < 2;

這將產生以下結果:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
2           Allen       25          Texas       15000
5           David       27          Texas       85000
6           Kim         22          South-Hall  45000
4           Mark        25          Rich-Mond   65000
3           Teddy       23          Norway      20000

下面是一個實例,它將顯示名稱計數大於 2 的所有記錄:

sqlite > SELECT * FROM COMPANY GROUP BY name HAVING count(name) > 2;

這將產生以下結果:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
10          James       45          Texas       5000

SQLite Distinct 關鍵字

SQLite 的 DISTINCT 關鍵字與 SELECT 語句一起使用,來消除所有重複的記錄,並只獲取唯一一次記錄。

有可能出現一種情況,在一個表中有多個重複的記錄。當提取這樣的記錄時,DISTINCT 關鍵字就顯得特別有意義,它只獲取唯一一次記錄,而不是獲取重複記錄。

語法

用於消除重複記錄的 DISTINCT 關鍵字的基本語法如下:

SELECT DISTINCT column1, column2,.....columnN 
FROM table_name
WHERE [condition]

實例

假設 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
8           Paul        24          Houston     20000.0
9           James       44          Norway      5000.0
10          James       45          Texas       5000.0

首先,讓我們來看看下面的 SELECT 查詢,它將返回重複的工資記錄:

sqlite> SELECT name FROM COMPANY;

這將產生以下結果:

NAME
----------
Paul
Allen
Teddy
Mark
David
Kim
James
Paul
James
James

現在,讓我們在上述的 SELECT 查詢中使用 DISTINCT 關鍵字:

sqlite> SELECT DISTINCT name FROM COMPANY;

這將產生以下結果,沒有任何重複的條目:

NAME
----------
Paul
Allen
Teddy
Mark
David
Kim
James

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章