柚子快報(bào)邀請(qǐng)碼778899分享:數(shù)據(jù)庫(kù) SQLite
柚子快報(bào)邀請(qǐng)碼778899分享:數(shù)據(jù)庫(kù) SQLite
SQLite語(yǔ)法
大小寫敏感性
有個(gè)重要的點(diǎn)值得注意,SQLite 是不區(qū)分大小寫的,但也有一些命令是大小寫敏感的,比如?GLOB?和?glob?在 SQLite 的語(yǔ)句中有不同的含義
注釋
SQL 注釋以兩個(gè)連續(xù)的 "-" 字符(ASCII 0x2d)開(kāi)始,并擴(kuò)展至下一個(gè)換行符(ASCII 0x0a)或直到輸入結(jié)束,以先到者為準(zhǔn)。
您也可以使用 C 風(fēng)格的注釋,以 "/*" 開(kāi)始,并擴(kuò)展至下一個(gè) "*/" 字符對(duì)或直到輸入結(jié)束,以先到者為準(zhǔn)。SQLite的注釋可以跨越多行。
sqlite>.help -- 這是一個(gè)簡(jiǎn)單的注釋
SQLite數(shù)據(jù)類型
SQLite 存儲(chǔ)類
存儲(chǔ)類描述NULL值是一個(gè) NULL 值。INTEGER值是一個(gè)帶符號(hào)的整數(shù),根據(jù)值的大小存儲(chǔ)在 1、2、3、4、6 或 8 字節(jié)中。REAL值是一個(gè)浮點(diǎn)值,存儲(chǔ)為 8 字節(jié)的 IEEE 浮點(diǎn)數(shù)字。TEXT值是一個(gè)文本字符串,使用數(shù)據(jù)庫(kù)編碼(UTF-8、UTF-16BE 或 UTF-16LE)存儲(chǔ)。BLOB值是一個(gè) blob 數(shù)據(jù),完全根據(jù)它的輸入存儲(chǔ)。
SQLite 親和(Affinity)類型
親和類型描述TEXT數(shù)值型數(shù)據(jù)在被插入之前,需要先被轉(zhuǎn)換為文本格式,之后再插入到目標(biāo)字段中。NUMERIC當(dāng)文本數(shù)據(jù)被插入到親緣性為NUMERIC的字段中時(shí),如果轉(zhuǎn)換操作不會(huì)導(dǎo)致數(shù)據(jù)信息丟失以及完全可逆,那么SQLite就會(huì)將該文本數(shù)據(jù)轉(zhuǎn)換為INTEGER或REAL類型的數(shù)據(jù),如果轉(zhuǎn)換失敗,SQLite仍會(huì)以TEXT方式存儲(chǔ)該數(shù)據(jù)。對(duì)于NULL或BLOB類型的新數(shù)據(jù),SQLite將不做任何轉(zhuǎn)換,直接以NULL或BLOB的方式存儲(chǔ)該數(shù)據(jù)。需要額外說(shuō)明的是,對(duì)于浮點(diǎn)格式的常量文本,如"30000.0",如果該值可以轉(zhuǎn)換為INTEGER同時(shí)又不會(huì)丟失數(shù)值信息,那么SQLite就會(huì)將其轉(zhuǎn)換為INTEGER的存儲(chǔ)方式。INTEGER對(duì)于親緣類型為INTEGER的字段,其規(guī)則等同于NUMERIC,唯一差別是在執(zhí)行CAST表達(dá)式時(shí)。REAL其規(guī)則基本等同于NUMERIC,唯一的差別是不會(huì)將"30000.0"這樣的文本數(shù)據(jù)轉(zhuǎn)換為INTEGER存儲(chǔ)方式。NONE不做任何的轉(zhuǎn)換,直接以該數(shù)據(jù)所屬的數(shù)據(jù)類型進(jìn)行存儲(chǔ)?! ?/p>
Date 與 Time 數(shù)據(jù)類型
SQLite 沒(méi)有一個(gè)單獨(dú)的用于存儲(chǔ)日期和/或時(shí)間的存儲(chǔ)類,但 SQLite 能夠把日期和時(shí)間存儲(chǔ)為 TEXT、REAL 或 INTEGER 值。
存儲(chǔ)類日期格式TEXT格式為 "YYYY-MM-DD HH:MM:SS.SSS" 的日期。REAL從公元前 4714 年 11 月 24 日格林尼治時(shí)間的正午開(kāi)始算起的天數(shù)。INTEGER從 1970-01-01 00:00:00 UTC 算起的秒數(shù)。
SQLite?創(chuàng)建表
?語(yǔ)法
CREATE TABLE database_name.table_name(
column1 datatype PRIMARY KEY(one or more columns),
column2 datatype,
column3 datatype,
.....
columnN datatype,
);
CREATE TABLE 是告訴數(shù)據(jù)庫(kù)系統(tǒng)創(chuàng)建一個(gè)新表的關(guān)鍵字。CREATE TABLE 語(yǔ)句后跟著表的唯一的名稱或標(biāo)識(shí)。您也可以選擇指定帶有?table_name?的?database_name。
實(shí)例
sqlite> CREATE TABLE COMPANY(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);
讓我們?cè)賱?chuàng)建一個(gè)表,我們將在隨后章節(jié)的練習(xí)中使用:
sqlite> CREATE TABLE DEPARTMENT(
ID INT PRIMARY KEY NOT NULL,
DEPT CHAR(50) NOT NULL,
EMP_ID INT NOT NULL
);
您可以使用 SQLIte 命令中的?.tables?命令來(lái)驗(yàn)證表是否已成功創(chuàng)建,該命令用于列出附加數(shù)據(jù)庫(kù)中的所有表。
sqlite>.tables
COMPANY DEPARTMENT
在這里,可以看到我們剛創(chuàng)建的兩張表 COMPANY、 DEPARTMENT。
您可以使用 SQLite?.schema?命令得到表的完整信息,如下所示:
sqlite>.schema COMPANY
CREATE TABLE COMPANY(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);
SQLite?刪除表
語(yǔ)法
DROP TABLE 語(yǔ)句的基本語(yǔ)法如下。您可以選擇指定帶有表名的數(shù)據(jù)庫(kù)名稱,如下所示:
DROP TABLE database_name.table_name;
實(shí)例
讓我們先確認(rèn) COMPANY 表已經(jīng)存在,然后我們將其從數(shù)據(jù)庫(kù)中刪除。
sqlite>.tables
COMPANY test.COMPANY
這意味著 COMPANY 表已存在數(shù)據(jù)庫(kù)中,接下來(lái)讓我們把它從數(shù)據(jù)庫(kù)中刪除,如下:
sqlite>DROP TABLE COMPANY;
sqlite>
現(xiàn)在,如果嘗試 .TABLES 命令,那么將無(wú)法找到 COMPANY 表了:
sqlite>.tables
sqlite>
SQLite Insert
語(yǔ)法
INSERT INTO 語(yǔ)句有兩種基本語(yǔ)法,如下所示:
INSERT INTO TABLE_NAME [(column1, column2, column3,...columnN)]
VALUES (value1, value2, value3,...valueN);
在這里,column1, column2,...columnN 是要插入數(shù)據(jù)的表中的列的名稱。
如果要為表中的所有列添加值,您也可以不需要在 SQLite 查詢中指定列名稱。但要確保值的順序與列在表中的順序一致。SQLite 的 INSERT INTO 語(yǔ)法如下:
INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);
實(shí)例
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Paul', 32, 'California', 20000.00 );
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (2, 'Allen', 25, 'Texas', 15000.00 );
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (3, 'Teddy', 23, 'Norway', 20000.00 );
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 );
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (5, 'David', 27, 'Texas', 85000.00 );
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (6, 'Kim', 22, 'South-Hall', 45000.00 );
您也可以使用第二種語(yǔ)法在 COMPANY 表中創(chuàng)建一個(gè)記錄,如下所示:
INSERT INTO COMPANY VALUES (7, 'James', 24, 'Houston', 10000.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
SQLite Select
語(yǔ)法
SELECT column1, column2, columnN FROM table_name;
在這里,column1, column2...是表的字段,他們的值即是您要獲取的。如果您想獲取所有可用的字段,那么可以使用下面的語(yǔ)法:
SELECT * FROM table_name;
實(shí)例
前兩個(gè)命令被用來(lái)設(shè)置正確格式化的輸出。
sqlite>.header on
sqlite>.mode column
sqlite> SELECT * FROM COMPANY;
最后,將得到以下的結(jié)果:
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 表中指定的字段,則使用下面的查詢:
sqlite> SELECT ID, NAME, SALARY FROM COMPANY;
上面的查詢會(huì)產(chǎn)生以下結(jié)果:
ID NAME SALARY
---------- ---------- ----------
1 Paul 20000.0
2 Allen 15000.0
3 Teddy 20000.0
4 Mark 65000.0
5 David 85000.0
6 Kim 45000.0
7 James 10000.0
設(shè)置輸出列的寬度
有時(shí),由于要顯示的列的默認(rèn)寬度導(dǎo)致?.mode column,這種情況下,輸出被截?cái)?。此時(shí),您可以使用?.width num, num....?命令設(shè)置顯示列的寬度,如下所示:
sqlite>.width 10, 20, 10
sqlite>SELECT * FROM COMPANY;
上面的?.width?命令設(shè)置第一列的寬度為 10,第二列的寬度為 20,第三列的寬度為 10。因此上述 SELECT 語(yǔ)句將得到以下結(jié)果:
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?運(yùn)算符
運(yùn)算符是一個(gè)保留字或字符,主要用于 SQLite 語(yǔ)句的 WHERE 子句中執(zhí)行操作,如比較和算術(shù)運(yùn)算。
運(yùn)算符用于指定 SQLite 語(yǔ)句中的條件,并在語(yǔ)句中連接多個(gè)條件。
算術(shù)運(yùn)算符 比較運(yùn)算符 邏輯運(yùn)算符 位運(yùn)算符
SQLite 算術(shù)運(yùn)算符
假設(shè)變量 a=10,變量 b=20,則:
運(yùn)算符描述實(shí)例+加法 - 把運(yùn)算符兩邊的值相加a + b 將得到 30-減法 - 左操作數(shù)減去右操作數(shù)a - b 將得到 -10*乘法 - 把運(yùn)算符兩邊的值相乘a * b 將得到 200/除法 - 左操作數(shù)除以右操作數(shù)b / a 將得到 2%取模 - 左操作數(shù)除以右操作數(shù)后得到的余數(shù)b % a 將得到 0
實(shí)例
sqlite> .mode line
sqlite> select 10 + 20;
10 + 20 = 30
sqlite> select 10 - 20;
10 - 20 = -10
sqlite> select 10 * 20;
10 * 20 = 200
sqlite> select 10 / 5;
10 / 5 = 2
sqlite> select 12 % 5;
12 % 5 = 2
SQLite 比較運(yùn)算符
假設(shè)變量 a=10,變量 b=20,則:
運(yùn)算符描述實(shí)例==檢查兩個(gè)操作數(shù)的值是否相等,如果相等則條件為真。(a == b) 不為真。=檢查兩個(gè)操作數(shù)的值是否相等,如果相等則條件為真。(a = b) 不為真。!=檢查兩個(gè)操作數(shù)的值是否相等,如果不相等則條件為真。(a != b) 為真。<>檢查兩個(gè)操作數(shù)的值是否相等,如果不相等則條件為真。(a <> b) 為真。>檢查左操作數(shù)的值是否大于右操作數(shù)的值,如果是則條件為真。(a > b) 不為真。<檢查左操作數(shù)的值是否小于右操作數(shù)的值,如果是則條件為真。(a < b) 為真。>=檢查左操作數(shù)的值是否大于等于右操作數(shù)的值,如果是則條件為真。(a >= b) 不為真。<=檢查左操作數(shù)的值是否小于等于右操作數(shù)的值,如果是則條件為真。(a <= b) 為真。!<檢查左操作數(shù)的值是否不小于右操作數(shù)的值,如果是則條件為真。(a !< b) 為假。!>檢查左操作數(shù)的值是否不大于右操作數(shù)的值,如果是則條件為真。(a !> b) 為真。
實(shí)例
假設(shè) 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 語(yǔ)句列出了 SALARY 等于 20,000.00 的所有記錄:
sqlite> SELECT * FROM COMPANY WHERE SALARY = 20000;
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
1 Paul 32 California 20000.0
3 Teddy 23 Norway 20000.0
下面的 SELECT 語(yǔ)句列出了 SALARY 不等于 20,000.00 的所有記錄:
sqlite> SELECT * FROM COMPANY WHERE SALARY <> 20000;
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
2 Allen 25 Texas 15000.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 邏輯運(yùn)算符
運(yùn)算符描述ANDAND 運(yùn)算符允許在一個(gè) SQL 語(yǔ)句的 WHERE 子句中的多個(gè)條件的存在。BETWEENBETWEEN 運(yùn)算符用于在給定最小值和最大值范圍內(nèi)的一系列值中搜索值。EXISTSEXISTS 運(yùn)算符用于在滿足一定條件的指定表中搜索行的存在。ININ 運(yùn)算符用于把某個(gè)值與一系列指定列表的值進(jìn)行比較。NOT ININ 運(yùn)算符的對(duì)立面,用于把某個(gè)值與不在一系列指定列表的值進(jìn)行比較。LIKELIKE 運(yùn)算符用于把某個(gè)值與使用通配符運(yùn)算符的相似值進(jìn)行比較。GLOBGLOB 運(yùn)算符用于把某個(gè)值與使用通配符運(yùn)算符的相似值進(jìn)行比較。GLOB 與 LIKE 不同之處在于,它是大小寫敏感的。NOTNOT 運(yùn)算符是所用的邏輯運(yùn)算符的對(duì)立面。比如 NOT EXISTS、NOT BETWEEN、NOT IN,等等。它是否定運(yùn)算符。OROR 運(yùn)算符用于結(jié)合一個(gè) SQL 語(yǔ)句的 WHERE 子句中的多個(gè)條件。IS NULLNULL 運(yùn)算符用于把某個(gè)值與 NULL 值進(jìn)行比較。ISIS 運(yùn)算符與 = 相似。IS NOTIS NOT 運(yùn)算符與 != 相似。||連接兩個(gè)不同的字符串,得到一個(gè)新的字符串。UNIQUEUNIQUE 運(yùn)算符搜索指定表中的每一行,確保唯一性(無(wú)重復(fù))
實(shí)例
下面的 SELECT 語(yǔ)句列出了 NAME 以 'Ki' 開(kāi)始的所有記錄,'Ki' 之后的字符不做限制:
sqlite> SELECT * FROM COMPANY WHERE NAME LIKE 'Ki%'; -- 或者'Ki*'
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
6 Kim 22 South-Hall 45000.0
下面的 SELECT 語(yǔ)句列出了 AGE 的值為 25 或 27 的所有記錄:
sqlite> SELECT * FROM COMPANY WHERE AGE IN ( 25, 27 );
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
2 Allen 25 Texas 15000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
下面的 SELECT 語(yǔ)句列出了 AGE 的值在 25 與 27 之間的所有記錄:
sqlite> SELECT * FROM COMPANY WHERE AGE BETWEEN 25 AND 27;
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
2 Allen 25 Texas 15000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
下面的 SELECT 語(yǔ)句使用 SQL 子查詢,子查詢查找 SALARY > 65000 的帶有 AGE 字段的所有記錄,后邊的 WHERE 子句與 EXISTS 運(yùn)算符一起使用,列出了外查詢中的 AGE 存在于子查詢返回的結(jié)果中的所有記錄:
sqlite> SELECT AGE FROM COMPANY
WHERE EXISTS (SELECT AGE FROM COMPANY WHERE SALARY > 65000);
AGE
----------
32
25
23
25
27
22
24
SQLite 位運(yùn)算符
A = 0011 1100
B = 0000 1101
運(yùn)算符描述實(shí)例&如果同時(shí)存在于兩個(gè)操作數(shù)中,二進(jìn)制 AND 運(yùn)算符復(fù)制一位到結(jié)果中。(A & B) 將得到 12,即為 0000 1100|如果存在于任一操作數(shù)中,二進(jìn)制 OR 運(yùn)算符復(fù)制一位到結(jié)果中。(A | B) 將得到 61,即為 0011 1101~二進(jìn)制補(bǔ)碼運(yùn)算符是一元運(yùn)算符,具有"翻轉(zhuǎn)"位效應(yīng),即0變成1,1變成0。(~A ) 將得到 -61,即為 1100 0011,一個(gè)有符號(hào)二進(jìn)制數(shù)的補(bǔ)碼形式。<<二進(jìn)制左移運(yùn)算符。左操作數(shù)的值向左移動(dòng)右操作數(shù)指定的位數(shù)。A << 2 將得到 240,即為 1111 0000>>二進(jìn)制右移運(yùn)算符。左操作數(shù)的值向右移動(dòng)右操作數(shù)指定的位數(shù)。A >> 2 將得到 15,即為 0000 1111
SQLite?表達(dá)式
SQLite - 布爾表達(dá)式
語(yǔ)法如下:
SELECT column1, column2, columnN
FROM table_name
WHERE SINGLE VALUE MATCHING EXPRESSION;
實(shí)例:
sqlite> SELECT * FROM COMPANY WHERE SALARY = 10000;
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
4 James 24 Houston 10000.0
SQLite - 數(shù)值表達(dá)式
語(yǔ)法如下:
SELECT numerical_expression as OPERATION_NAME
[FROM table_name WHERE CONDITION] ;
實(shí)例:
sqlite> SELECT (15 + 6) AS ADDITION
ADDITION = 21
SQLite - 日期表達(dá)式
日期表達(dá)式返回當(dāng)前系統(tǒng)日期和時(shí)間值,這些表達(dá)式將被用于各種數(shù)據(jù)操作。
sqlite> SELECT CURRENT_TIMESTAMP;
CURRENT_TIMESTAMP = 2013-03-17 10:43:35
SQLite?Where 子句
如果滿足給定的條件,即為真(true)時(shí),則從表中返回特定的值。您可以使用 WHERE 子句來(lái)過(guò)濾記錄,只獲取需要的記錄。
WHERE 子句不僅可用在 SELECT 語(yǔ)句中,它也可用在 UPDATE、DELETE 語(yǔ)句中,等等
語(yǔ)法
SELECT column1, column2, columnN
FROM table_name
WHERE [condition]
下面的 SELECT 語(yǔ)句使用 SQL 子查詢,子查詢查找 SALARY > 65000 的帶有 AGE 字段的所有記錄,后邊的 WHERE 子句與 > 運(yùn)算符一起使用,列出了外查詢中的 AGE 大于子查詢返回的結(jié)果中的年齡的所有記錄:
sqlite> SELECT * FROM COMPANY
WHERE AGE > (SELECT AGE FROM COMPANY WHERE SALARY > 65000);
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
1 Paul 32 California 20000.0
SQLite?Update 語(yǔ)句
語(yǔ)法
帶有 WHERE 子句的 UPDATE 查詢的基本語(yǔ)法如下:
UPDATE table_name
SET column1 = value1, column2 = value2...., columnN = valueN
WHERE [condition];
下面是一個(gè)實(shí)例,它會(huì)更新 ID 為 6 的客戶地址:
sqlite> UPDATE COMPANY SET ADDRESS = 'Texas' WHERE ID = 6;
現(xiàn)在,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 Texas 45000.0
7 James 24 Houston 10000.0
如果您想修改 COMPANY 表中 ADDRESS 和 SALARY 列的所有值,則不需要使用 WHERE 子句,UPDATE 查詢?nèi)缦拢?/p>
sqlite> UPDATE COMPANY SET ADDRESS = 'Texas', SALARY = 20000.00;
現(xiàn)在,COMPANY 表有以下記錄:
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
1 Paul 32 Texas 20000.0
2 Allen 25 Texas 20000.0
3 Teddy 23 Texas 20000.0
4 Mark 25 Texas 20000.0
5 David 27 Texas 20000.0
6 Kim 22 Texas 20000.0
7 James 24 Texas 20000.0
SQLite?Delete 語(yǔ)句
可以使用帶有 WHERE 子句的 DELETE 查詢來(lái)刪除選定行,否則所有的記錄都會(huì)被刪除。
語(yǔ)法
DELETE FROM table_name
WHERE [condition];
?SQLite?Like 子句
Like?運(yùn)算符是用來(lái)匹配通配符指定模式的文本值。如果搜索表達(dá)式與模式表達(dá)式匹配,Like 運(yùn)算符將返回真(true),也就是 1。這里有兩個(gè)通配符與 Like 運(yùn)算符一起使用:
百分號(hào) (%) 下劃線 (_)
百分號(hào)(%)代表零個(gè)、一個(gè)或多個(gè)數(shù)字或字符。下劃線(_)代表一個(gè)單一的數(shù)字或字符。這些符號(hào)可以被組合使用。
語(yǔ)句描述WHERE SALARY LIKE '200%'查找以 200 開(kāi)頭的任意值WHERE SALARY LIKE '%200%'查找任意位置包含 200 的任意值WHERE SALARY LIKE '_00%'查找第二位和第三位為 00 的任意值WHERE SALARY LIKE '2_%_%'查找以 2 開(kāi)頭,且長(zhǎng)度至少為 3 個(gè)字符的任意值WHERE SALARY LIKE '%2'查找以 2 結(jié)尾的任意值WHERE SALARY LIKE '_2%3'查找第二位為 2,且以 3 結(jié)尾的任意值WHERE SALARY LIKE '2___3'查找長(zhǎng)度為 5 位數(shù),且以 2 開(kāi)頭以 3 結(jié)尾的任意值
SQLite?Glob 子句
與 LIKE 運(yùn)算符不同的是,GLOB 是大小寫敏感的,對(duì)于下面的通配符,它遵循 UNIX 的語(yǔ)法。
*:匹配零個(gè)、一個(gè)或多個(gè)數(shù)字或字符。?:代表一個(gè)單一的數(shù)字或字符。[...]:匹配方括號(hào)內(nèi)指定的字符之一。例如,[abc]?匹配 "a"、"b" 或 "c" 中的任何一個(gè)字符。[^...]:匹配不在方括號(hào)內(nèi)指定的字符之一。例如,[^abc]?匹配不是 "a"、"b" 或 "c" 中的任何一個(gè)字符的字符。
以上這些符號(hào)可以被組合使用。
語(yǔ)句描述WHERE SALARY GLOB '200*'查找以 200 開(kāi)頭的任意值WHERE SALARY GLOB '*200*'查找任意位置包含 200 的任意值WHERE SALARY GLOB '?00*'查找第二位和第三位為 00 的任意值WHERE SALARY GLOB '2??'查找以 2 開(kāi)頭,且長(zhǎng)度為 3 個(gè)字符的任意值,例如,它可能匹配 "200"、"2A1"、"2B2" 等值。WHERE SALARY GLOB '*2'查找以 2 結(jié)尾的任意值WHERE SALARY GLOB '?2*3'查找第二位為 2,且以 3 結(jié)尾的任意值WHERE SALARY GLOB '2???3'查找長(zhǎng)度為 5 位數(shù),且以 2 開(kāi)頭以 3 結(jié)尾的任意值
SQLite?Limit 子句
語(yǔ)法
帶有 LIMIT 子句的 SELECT 語(yǔ)句的基本語(yǔ)法如下:
SELECT column1, column2, columnN
FROM table_name
LIMIT [no of rows]
下面是 LIMIT 子句與 OFFSET 子句一起使用時(shí)的語(yǔ)法:
SELECT column1, column2, columnN
FROM table_name
LIMIT [no of rows] OFFSET [row num]
SQLite 引擎將返回從下一行開(kāi)始直到給定的 OFFSET 為止的所有行
在某些情況下,可能需要從一個(gè)特定的偏移開(kāi)始提取記錄。下面是一個(gè)實(shí)例,從第三位開(kāi)始提取 3 個(gè)記錄:
sqlite> SELECT * FROM COMPANY LIMIT 3 OFFSET 2;
這將產(chǎn)生以下結(jié)果:
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
語(yǔ)法
SELECT column-list
FROM table_name
[WHERE condition]
[ORDER BY column1, column2, .. columnN] [ASC | DESC];
ASC?默認(rèn)值,從小到大,升序排列DESC?從大到小,降序排列
您可以在 ORDER BY 子句中使用多個(gè)列,確保您使用的排序列在列清單中:
SELECT
select_list
FROM
table
ORDER BY
column_1 ASC,
column_2 DESC;
column_1 與 column_2 如果后面不指定排序規(guī)則,默認(rèn)為 ASC 升序,以上語(yǔ)句按 column_1 升序,column_2 降序讀取,等價(jià)如下語(yǔ)句:
SELECT
select_list
FROM
table
ORDER BY
column_1,
column_2 DESC;
SQLite?Group By
用于與 SELECT 語(yǔ)句一起使用,來(lái)對(duì)相同的數(shù)據(jù)進(jìn)行分組。
在 SELECT 語(yǔ)句中,GROUP BY 子句放在 WHERE 子句之后,放在 ORDER BY 子句之前。
語(yǔ)法
SELECT column-list
FROM table_name
WHERE [ conditions ]
GROUP BY column1, column2....columnN
ORDER BY column1, column2....columnN
實(shí)例
我們的表具有重復(fù)名稱的記錄,如下所示:
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 語(yǔ)句來(lái)對(duì)所有記錄按 NAME 列進(jìn)行分組,如下所示:
sqlite> SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME ORDER BY NAME;
這將產(chǎn)生以下結(jié)果:
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;
這將產(chǎn)生以下結(jié)果:
NAME SUM(SALARY)
---------- -----------
Teddy 20000
Paul 40000
Mark 65000
Kim 45000
James 20000
David 85000
Allen 15000
SQLite?Having 子句?
WHERE 子句在所選列上設(shè)置條件,而 HAVING 子句則在由 GROUP BY 子句創(chuàng)建的分組上設(shè)置條件。
SELECT column1, column2
FROM table1, table2
WHERE [ conditions ]
GROUP BY column1, column2
HAVING [ conditions ]
ORDER BY column1, column2
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
下面是一個(gè)實(shí)例,它將顯示名稱計(jì)數(shù)小于 2 的所有記錄:
sqlite > SELECT * FROM COMPANY GROUP BY name HAVING count(name) < 2;
這將產(chǎn)生以下結(jié)果:
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
下面是一個(gè)實(shí)例,它將顯示名稱計(jì)數(shù)大于 2 的所有記錄:
sqlite > SELECT * FROM COMPANY GROUP BY name HAVING count(name) > 2;
這將產(chǎn)生以下結(jié)果:
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
10 James 45 Texas 5000
SQLite?Distinct 關(guān)鍵字
與 SELECT 語(yǔ)句一起使用,來(lái)消除所有重復(fù)的記錄,并只獲取唯一一次記錄。
有可能出現(xiàn)一種情況,在一個(gè)表中有多個(gè)重復(fù)的記錄。當(dāng)提取這樣的記錄時(shí),DISTINCT 關(guān)鍵字就顯得特別有意義,它只獲取唯一一次記錄,而不是獲取重復(fù)記錄
SELECT DISTINCT column1, column2,.....columnN
FROM table_name
WHERE [condition]
?實(shí)例:
sqlite> SELECT name FROM COMPANY;
這將產(chǎn)生以下結(jié)果:
NAME
----------
Paul
Allen
Teddy
Mark
David
Kim
James
Paul
James
James
現(xiàn)在,讓我們?cè)谏鲜龅?SELECT 查詢中使用?DISTINCT?關(guān)鍵字:
sqlite> SELECT DISTINCT name FROM COMPANY;
這將產(chǎn)生以下結(jié)果,沒(méi)有任何重復(fù)的條目:
NAME
----------
Paul
Allen
Teddy
Mark
David
Kim
James
柚子快報(bào)邀請(qǐng)碼778899分享:數(shù)據(jù)庫(kù) SQLite
參考閱讀
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。