SQLite基礎(chǔ)語(yǔ)法速用大法(Flutter)

前記

(可跳過(guò)這段來(lái)自本up的羅里吧嗦州丹。醋安。。)

在做上一個(gè)項(xiàng)目的時(shí)候墓毒,需要用到本地?cái)?shù)據(jù)庫(kù)吓揪,以前做公司項(xiàng)目用的是輕量級(jí)數(shù)據(jù)庫(kù)Realm,做自己小項(xiàng)目用的是greenDAO所计,大學(xué)學(xué)的是SQL server磺芭,但是在flutter中,相關(guān)插件用的數(shù)據(jù)庫(kù)是SQLite(sqflite插件)醉箕,但本人還沒(méi)接觸過(guò)SQLite钾腺,問(wèn)了后臺(tái)同事徙垫,他們用的也是SQLite,說(shuō)大同小異放棒,我就想著僅憑大學(xué)記憶姻报,快速過(guò)一遍SQLite知識(shí)點(diǎn),應(yīng)該挺快的间螟,想著抓點(diǎn)重要的就夠了∥庑現(xiàn)在項(xiàng)目告一段落,就來(lái)寫(xiě)這篇博客記錄一下(感覺(jué)有點(diǎn)標(biāo)題黨了哈哈哈)厢破。

正文

小重點(diǎn):

1荣瑟、SQLite 是不區(qū)分大小寫(xiě)的,但也有一些命令是大小寫(xiě)敏感的摩泪,比如 GLOBglob 在 SQLite 的語(yǔ)句中有不同的含義笆焰。

2、注釋大法:

(1)-- 這是一句注釋

(2)/* 這是一句注釋 */

一见坑、數(shù)值類(lèi)型

用于指定任何對(duì)象的數(shù)據(jù)類(lèi)型的屬性嚷掠。

1、存儲(chǔ)類(lèi)

(1)NULL:NULL值(空值)荞驴。

(2)INTEGER:帶符號(hào)的整數(shù)不皆。

(3)REAL:浮點(diǎn)值。

(4)TEXT:文本字符串值熊楼。

(5)BLOB:二進(jìn)制大對(duì)象霹娄,Binary Large Object。

2鲫骗、親和類(lèi)型(優(yōu)先采用)

當(dāng)數(shù)據(jù)插入時(shí)犬耻,該字段的數(shù)據(jù)將會(huì)優(yōu)先采用親緣類(lèi)型作為該值的存儲(chǔ)方式。

(1)TEXT:數(shù)值型數(shù)據(jù)插入前先轉(zhuǎn)為文本格式再插入挎峦。

(2)NUMERIC:如果轉(zhuǎn)換操作不會(huì)導(dǎo)致數(shù)據(jù)丟失以及完全可逆,則會(huì)轉(zhuǎn)換為INTEGER和REAL合瓢,如果失敗則會(huì)以TEXT存儲(chǔ)坦胶。對(duì)于NULL和BLOB類(lèi)型則不作類(lèi)型轉(zhuǎn)換存儲(chǔ)。注意:浮點(diǎn)類(lèi)型的文本晴楔,如"300.0"顿苇,轉(zhuǎn)為INTEGER不會(huì)丟失數(shù)值信息,則會(huì)轉(zhuǎn)換為INTEGER類(lèi)型存儲(chǔ)税弃。

(3)INTEGER:基本等同于NUMERIC纪岁,區(qū)別在于執(zhí)行CAST表達(dá)式(轉(zhuǎn)換類(lèi)型)時(shí)。

eg: 將column字段 文本類(lèi)型轉(zhuǎn)換為INTEGER類(lèi)型则果。

SELECT * FROM Table ORDER BY CAST (column as INTEGER);

(4)REAL:基本等同于NUMERIC幔翰,區(qū)別在于不會(huì)將"300.0"這樣的文本數(shù)據(jù)轉(zhuǎn)為INTEGER類(lèi)型存儲(chǔ)漩氨。

(5)NONE:不做轉(zhuǎn)換,以數(shù)據(jù)本身的數(shù)據(jù)類(lèi)型存儲(chǔ)遗增。

3叫惊、SQLite 親和類(lèi)型(Affinity)及類(lèi)型名稱(chēng)(以下作了解)

(1)親和類(lèi)型:INTEGER
對(duì)應(yīng)數(shù)據(jù)類(lèi)型:

  • INT
  • INTEGER
  • TINYINT
  • SMALLINT
  • MEDIUMINT
  • BIGINT
  • UNSIGNED BIG INT
  • INT2
  • INT8

(2)親和類(lèi)型:TEXT
對(duì)應(yīng)數(shù)據(jù)類(lèi)型:

  • CHARACTER(20)
  • VARCHAR(255)
  • VARYING CHARACTER(255)
  • NCHAR(55)NATIVE
  • CHARACTER(70)
  • NVARCHAR(100)
  • TEXT
  • CLOB

(3)親和類(lèi)型:NONE
對(duì)應(yīng)數(shù)據(jù)類(lèi)型:

  • BLOB
  • no datatype specified

(4)親和類(lèi)型:REAL
對(duì)應(yīng)數(shù)據(jù)類(lèi)型:

  • REAL
  • DOUBLE
  • DOUBLE PRECISION
  • FLOAT

(5)親和類(lèi)型:NUMERIC
對(duì)應(yīng)數(shù)據(jù)類(lèi)型:

  • NUMERIC
  • DECIMAL(10,5)
  • BOOLEAN
  • DATE
  • DATETIME

4、Boolean數(shù)據(jù)類(lèi)型

SQLite 沒(méi)有單獨(dú)的 Boolean 存儲(chǔ)類(lèi)做修。相反霍狰,布爾值被存儲(chǔ)為整數(shù) 0(false)和 1(true)。

注:在我的項(xiàng)目中饰及,直接存儲(chǔ)為INTEGER類(lèi)型蔗坯,0為false,1為true燎含。

5宾濒、Date 與 Time數(shù)據(jù)類(lèi)型

SQLite 沒(méi)有一個(gè)單獨(dú)的用于存儲(chǔ)日期和/或時(shí)間的存儲(chǔ)類(lèi),但 SQLite 能夠把日期和時(shí)間存儲(chǔ)為 TEXT瘫镇、REAL 或 INTEGER 值鼎兽。

注:在我的項(xiàng)目中,存儲(chǔ)的是時(shí)間戳铣除,要用時(shí)取出時(shí)間戳轉(zhuǎn)換為具體的時(shí)間格式 [文本字符串] 顯示谚咬。

Date 與 Time 數(shù)據(jù)類(lèi)型

存儲(chǔ)類(lèi) 日期格式
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ù)择卦。

二、數(shù)據(jù)庫(kù)相關(guān)操作語(yǔ)句

1郎嫁、創(chuàng)建秉继、附加、分離數(shù)據(jù)庫(kù)

在此教程不作sqlite的數(shù)據(jù)操作的詳細(xì)講解泽铛,后續(xù)有時(shí)間補(bǔ)充尚辑。

原因:移動(dòng)端的數(shù)據(jù)庫(kù)操作一般根據(jù)插件的語(yǔ)句來(lái)。

三盔腔、表相關(guān)操作語(yǔ)句

SQLite語(yǔ)句是以關(guān)鍵字開(kāi)始杠茬,分號(hào)結(jié)束的語(yǔ)句。

關(guān)鍵字:SELECT弛随、INSERT瓢喉、UPDATE、DELETE舀透、ALTER栓票、DROP。

注: 在此提出關(guān)注 ALTER 關(guān)鍵字愕够,本人因?yàn)榘?ALTER 寫(xiě)成 ALERT 導(dǎo)致語(yǔ)句執(zhí)行錯(cuò)誤走贪。

1佛猛、表的創(chuàng)建

基本語(yǔ)法:(每一字段用逗號(hào)隔開(kāi),最后一個(gè)字段不用寫(xiě)逗號(hào))

CREATE TABLE database_name.table_name(
   column1 datatype  PRIMARY KEY(one or more columns),
   column2 datatype,
   column3 datatype,
   .....
   columnN datatype
);

eg:創(chuàng)建三張公司表厉斟,字段id自增挚躯,名稱(chēng)不為空,年齡不為空擦秽,工作崗位码荔,工資。(結(jié)合Flutter中 sqflite 插件的語(yǔ)句寫(xiě)法感挥。)

CREATE TABLE Company(
   id INTEGER PRIMARY KEY AUTOINCREMENT,
   name TEXT NOT NULL,
   age INTEGER NOT NULL,
   job TEXT,
   salary REAL,
   hobby TEXT
);
CREATE TABLE Unimportant(
   id INTEGER PRIMARY KEY AUTOINCREMENT,
   name TEXT NOT NULL,
   age INTEGER NOT NULL,
   job TEXT,
   salary REAL,
   hobby TEXT
);
CREATE TABLE Company_Second (
   id INTEGER PRIMARY KEY AUTOINCREMENT,
   name TEXT NOT NULL,
   age INTEGER NOT NULL,
   job TEXT,
   salary REAL,
   hobby TEXT
);

2缩搅、表的刪除

注:謹(jǐn)慎使用,一旦刪了重要的表触幼,可能會(huì)G硼瓣!因?yàn)橐坏┮粋€(gè)表被刪除,表中所有信息也將永遠(yuǎn)丟失置谦。3(重要事情說(shuō)三遍L美稹!C较俊)涉及刪除操作的(無(wú)論是刪除庫(kù)瘟栖、表,還是數(shù)據(jù))一定要慎之又慎A掳ⅰ0胗础!*

我的項(xiàng)目里沒(méi)有刪除操作的語(yǔ)句签餐。創(chuàng)建了寓涨,即使不用也留著,萬(wàn)一后續(xù)又要用了呢氯檐。

基本語(yǔ)法:

DROP TABLE database_name.table_name;

eg:刪除不重要表戒良。

DROP TABLE Unimportant;

3、表的數(shù)據(jù)插入

(1)基本語(yǔ)法:

i. 該語(yǔ)句適用于所有字段均插入數(shù)據(jù)或指定字段插入數(shù)據(jù)冠摄。

INSERT INTO TABLE_NAME [(column1, column2, column3,...columnN)]  
VALUES (value1, value2, value3,...valueN);

ii. 或者不需要指定列糯崎,即每個(gè)字段都有值插入。但用該語(yǔ)句耗拓,字段一定要一 一對(duì)應(yīng)拇颅,否則數(shù)據(jù)容易插入錯(cuò)誤奏司。

INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);

eg:往Company表中插入幾組數(shù)據(jù)乔询。

INSERT INTO Company(id, name, age, job, salary, hobby)
VALUES (1, 'Paul', 32, 'CEO', 20000.00, 'basketball');

INSERT INTO Company(id, name, age, job, salary, hobby)
VALUES (2, 'Allen', 25, 'COO', 15000.00, 'soccer');

INSERT INTO Company(id, name, age, job, salary)
VALUES (3, 'Teddy', 23, 'CFO', 10000.00);

INSERT INTO Company(id, name, age, job, salary, hobby)
VALUES (4, 'Mark', 25, 'CTO', 65000.00, 'badminton');

INSERT INTO Company(id, name, age, job, salary)
VALUES (5, 'David', 27, 'CIO', 25000.00);

INSERT INTO Company(id, name, age, job, salary)
VALUES (6, 'Kim', 22, 'CHO', 15000.00);

或:

INSERT INTO Company VALUES (7, 'James', 24, 'COO', 30000.00);

(2)用一個(gè)表填充另一個(gè)表:

通過(guò)在一個(gè)有一組字段的表上使用 select 語(yǔ)句,填充數(shù)據(jù)到另一個(gè)表中韵洋。WHERE 引出條件竿刁,可寫(xiě)可不寫(xiě)黄锤。

INSERT INTO first_table_name [(column1, column2, ... columnN)] 
   SELECT column1, column2, ...columnN 
   FROM second_table_name
   [WHERE condition];

eg:把Company表中id為1的人員的id、名字食拜、年齡鸵熟、工作崗位、工資填充到Company_Second表中负甸。

INSERT INTO Company_Second [(id, name, age, job, salary, hobby)] 
   SELECT id, name, age, job, salary, hobby
   FROM Company
   WHERE id = 1;

4流强、表的數(shù)據(jù)選擇

注:選擇的返回結(jié)果是一個(gè)結(jié)果集,一般為列表類(lèi)型呻待。

(1)基本語(yǔ)法:

SELECT column1, column2, columnN FROM table_name;

想獲取所有的字段打月,可以用:

SELECT * FROM table_name;

eg:選擇Company表中所有人的id、名稱(chēng)蚕捉、工作崗位奏篙。

SELECT id, name, job FROM Company;

eg2:選擇Company表中所有人的所有信息。

SELECT * FROM Company;

5迫淹、運(yùn)算符

(1)算術(shù)運(yùn)算符(+秘通、-敌卓、夹厌、/、%)*

i. +丁稀、-荸型、*盹靴、/:就是加、減瑞妇、乘稿静、除以。

ii. %:取模辕狰。被除數(shù) 除以 除數(shù) 得到的余數(shù)改备。

eg:6 % 2 = 0

eg2: 5 % 2 = 1

(2)比較運(yùn)算符(加粗為常用的比較運(yùn)算符)
假設(shè)變量 a=10,變量 b=20蔓倍,則:
比較運(yùn)算符列表

運(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) 為真。

(3)邏輯運(yùn)算符(常用直晨,重點(diǎn)掌握)

例子結(jié)合WHERE子句使用搀军。

邏輯運(yùn)算符列表

運(yùn)算符 描述
AND AND 運(yùn)算符允許在一個(gè) SQL 語(yǔ)句的 WHERE 子句中的多個(gè)條件的存在
BETWEEN BETWEEN 運(yùn)算符用于在給定最小值和最大值范圍內(nèi)的一系列值中搜索值勇皇。
EXISTS EXISTS 運(yùn)算符用于在滿(mǎn)足一定條件的指定表中搜索行的存在罩句。
IN IN 運(yùn)算符用于把某個(gè)值與一系列指定列表的值進(jìn)行比較。
NOT IN IN 運(yùn)算符的對(duì)立面敛摘,用于把某個(gè)值與不在一系列指定列表的值進(jìn)行比較门烂。
LIKE LIKE 運(yùn)算符用于把某個(gè)值與使用通配符運(yùn)算符的相似值進(jìn)行比較。
GLOB GLOB 運(yùn)算符用于把某個(gè)值與使用通配符運(yùn)算符的相似值進(jìn)行比較兄淫。GLOB 與 LIKE 不同之處在于屯远,它是區(qū)分大小寫(xiě)的。
NOT NOT 運(yùn)算符是所用的邏輯運(yùn)算符的對(duì)立面捕虽。比如 NOT EXISTS慨丐、NOT BETWEEN、NOT IN泄私,等等房揭。它是否定運(yùn)算符挨措。
OR OR 運(yùn)算符用于結(jié)合一個(gè) SQL 語(yǔ)句的 WHERE 子句中的多個(gè)條件。
IS NULL NULL 運(yùn)算符用于把某個(gè)值與 NULL 值進(jìn)行比較崩溪。
IS IS 運(yùn)算符與 = 相似。
IS NOT IS NOT 運(yùn)算符與 != 相似斩松。
雙豎線
連接兩個(gè)不同的字符串伶唯,得到一個(gè)新的字符串。
UNIQUE UNIQUE 運(yùn)算符搜索指定表中的每一行惧盹,確保唯一性(無(wú)重復(fù))乳幸。

(4)位運(yùn)算符(不常用)
假設(shè)變量 a=10,變量 b=20钧椰,則:

位運(yùn)算符列表

運(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é)果中。
將得到 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

6、表達(dá)式

表達(dá)式是一個(gè)或多個(gè)值您宪、運(yùn)算符和計(jì)算值的SQL函數(shù)的組合奈懒。

(1)基本語(yǔ)法:

SELECT column1, column2, columnN 
FROM table_name 
WHERE [CONDITION | EXPRESSION];

(2)布爾表達(dá)式

基本語(yǔ)法:

SELECT column1, column2, columnN 
FROM table_name 
WHERE SINGLE VALUE MATCHING EXPRESSION;

eg:查詢(xún)Company表中 工資為15000 的人員的所有信息。

SELECT * FROM Company WHERE salary = 15000;

(3)數(shù)值表達(dá)式

基本語(yǔ)法:

SELECT numerical_expression as  OPERATION_NAME
[FROM table_name WHERE CONDITION] ;

eg:以下數(shù)值表達(dá)式的結(jié)果為:ADDITION = 21

SELECT (15 + 6) AS ADDITION

注:有幾個(gè)內(nèi)置的函數(shù)宪巨,比如 avg()磷杏、sum()count()捏卓,等等极祸,執(zhí)行被稱(chēng)為對(duì)一個(gè)表或一個(gè)特定的表列的匯總數(shù)據(jù)計(jì)算慈格。

eg:查詢(xún)Company表中數(shù)據(jù)的總條數(shù),并賦值給RECORDS遥金,結(jié)果為:RECORDS = 7

SELECT COUNT(*) AS "RECORDS" FROM Company; 

(4)日期表達(dá)式

基本語(yǔ)法:以下日期表達(dá)式的結(jié)果為:datetime('now','localtime') = 2022-09-21 16:47:36

SELECT datetime('now','localtime');

7浴捆、WHERE 子句

用于指定從一個(gè)表或多個(gè)表中獲取數(shù)據(jù)的條件。

基本語(yǔ)法:

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

eg:查詢(xún)Company表中 年齡大于等于25稿械,并且工資大于等65000的人員所有信息选泻。

SELECT * FROM Company WHERE Age >= 25 AND Salary >= 65000;

eg2:查詢(xún)Company表中年齡大于等于25,或者工資大于等65000的人員所有信息美莫。

SELECT * FROM COMPANY WHERE AGE >= 25 OR SALARY >= 65000;

eg3:查詢(xún)Company表中 name 字段以 'Ja' 開(kāi)始页眯,'Ja' 之后的字符不做限制 的所有人員的所有信息。

SELECT * FROM Company WHERE name LIKE 'Ja%';

或:

SELECT * FROM Company WHERE name GLOB 'ja*';

eg4:查詢(xún)Company表中 age 的值為 25 或 27 的所有人員的所有信息厢呵。

SELECT * FROM Company WHERE age IN (25, 27);

eg5:查詢(xún)Company表中 age 的值既不是 25 也不是 27 的所有人員的所有信息窝撵。

SELECT * FROM Company WHERE age NOT IN (25, 27);

eg6:查詢(xún)Company表中 age 的值在 25 和 27 之間 的所有人員的所有信息。

SELECT * FROM Company WHERE age BETWEEN 25 AND 27;

eg7:查詢(xún)Company表中 工資大于55000 的人員的年齡襟铭。

SELECT age FROM Company 
        WHERE EXISTS (SELECT age FROM Company WHERE salary > 55000);

解析:查詢(xún)從內(nèi)往外剝碌奉,就是從最小的條件語(yǔ)句開(kāi)始看起(最后一個(gè)條件看起),即 WHERE salary > 55000寒砖,查詢(xún)存在的工資大于55000人員的年齡道批,查詢(xún)結(jié)果集是age列。

eg8:查詢(xún)Company表中 年齡大于【工資大于55000 的人員的年齡】的所有人員的所有信息入撒。

SELECT * FROM Company 
        WHERE age > (SELECT age FROM Company WHERE salary > 55000);

解析:同理隆豹,從內(nèi)往外剝,最底層的查詢(xún)條件為小括號(hào)中的 SELECT age FROM Company WHERE salary > 55000;茅逮,即查詢(xún)工資大于55000的年齡璃赡,假設(shè)查詢(xún)結(jié)果為年齡 25。接著繼續(xù)上一層的條件查詢(xún):age > (...)献雅,即為 age > 25碉考,所以最后一層的查詢(xún)可以簡(jiǎn)化為:SELECT * FROM Company WHERE age > 25;, 結(jié)果就是查詢(xún) 年齡大于25 的所有員工的所有信息挺身。

8侯谁、AND 和 OR 運(yùn)算符

允許在一個(gè) SQL 語(yǔ)句的 WHERE 子句中的多個(gè)條件的存在。

(1)AND 運(yùn)算符

使用 AND 運(yùn)算符時(shí)章钾,只有當(dāng)所有條件都為真(true)時(shí)墙贱,整個(gè)條件為真(true)。例如贱傀,只有當(dāng) condition1 和 condition2 都為真(true)時(shí)惨撇,[condition1] AND [condition2] 為真(true)。

基本語(yǔ)法:

SELECT column1, column2, columnN 
FROM table_name
WHERE [condition1] AND [condition2]...AND [conditionN];

eg:查詢(xún)Company表中 age大于等于25 并且 salary大于等于65000 的所有員工的所有信息府寒。

SELECT * FROM Company WHERE age >= 25 AND salary >= 65000;

(2)OR 運(yùn)算符

使用 OR 運(yùn)算符時(shí)魁衙,只要當(dāng)條件中任何一個(gè)為真(true)時(shí)报腔,整個(gè)條件為真(true)。例如剖淀,只要當(dāng) condition1 或 condition2 有一個(gè)為真(true)時(shí)纯蛾,[condition1] OR [condition2] 為真(true)。

基本語(yǔ)法:

SELECT column1, column2, columnN 
FROM table_name
WHERE [condition1] OR [condition2]...OR [conditionN]

eg:查詢(xún)Company表中 age大于等于 25 或salary大于等于 65000 的所有員工的所有信息纵隔。

SELECT * FROM Company WHERE age >= 25 OR salary >= 65000;

9翻诉、UPDATE 語(yǔ)句

用于修改表中已有的記錄【揠可以使用帶有 WHERE 子句的 UPDATE 查詢(xún)來(lái)更新選定行,否則所有的行都會(huì)被更新剑令。

基本語(yǔ)法:

UPDATE table_name
SET column1 = value1, column2 = value2...., columnN = valueN
WHERE [condition];

eg:更新Company表中 id為6的員工的hobby為Football 糊啡。

UPDATE Company SET hobby = 'Football' WHERE id = 6;

eg2:更新Company表中 所有hobby 和 salary 列的值

UPDATE Company SET hobby = 'Badminton', salary = 20000.00;

執(zhí)行以上語(yǔ)句吁津,Company表中hobby 和 salary 列的值全部都為Badminton和20000.00棚蓄。

10、DELETE 語(yǔ)句

用于刪除表中已有的記錄碍脏。(輕易不使用K笠馈!典尾!若要?jiǎng)h除數(shù)據(jù)役拴,可使用軟刪除,即用一個(gè)字段來(lái)標(biāo)識(shí)該數(shù)據(jù)是否被刪除)

基本語(yǔ)法:

DELETE FROM table_name
WHERE [condition];

eg:刪除Company表中 id為7 的員工數(shù)據(jù)钾埂。

DELETE FROM Company WHERE id = 7;

eg2:刪除Company表中 所有 數(shù)據(jù)河闰。

DELETE FROM Company;

11、LIKE 子句(不區(qū)分大小寫(xiě))

用來(lái)匹配通配符指定模式的文本值褥紫。LIKE 運(yùn)算符將返回真(true)姜性,也就是 1。以下兩個(gè)通配符與 LIKE 運(yùn)算符一起使用(這兩個(gè)符號(hào)可以被組合使用)髓考。

(1)百分號(hào) (%):表示零個(gè)部念、一個(gè)或多個(gè)數(shù)字或字符。

(2)下劃線 (_):表示一個(gè)單一的數(shù)字或字符氨菇。

基本語(yǔ)法:

SELECT column_list 
FROM table_name
WHERE column LIKE 'XXXX%'

or 

SELECT column_list 
FROM table_name
WHERE column LIKE '%XXXX%'

or

SELECT column_list 
FROM table_name
WHERE column LIKE 'XXXX_'

or

SELECT column_list 
FROM table_name
WHERE column LIKE '_XXXX'

or

SELECT column_list 
FROM table_name
WHERE column LIKE '_XXXX_'

eg:SELECT * FROM Company + (以下語(yǔ)句)

語(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é)尾的任意值

12射赛、GLOB子句(區(qū)分大小寫(xiě))

用來(lái)匹配通配符指定模式的文本值。GLOB 運(yùn)算符將返回真(true)奶是,也就是 1楣责。以下兩個(gè)通配符與 GLOB 運(yùn)算符一起使用(這兩個(gè)符號(hào)可以被組合使用)竣灌。

(1)星號(hào) (*:表示零個(gè)、一個(gè)或多個(gè)數(shù)字或字符秆麸。

(2)問(wèn)號(hào) (?):表示一個(gè)單一的數(shù)字或字符初嘹。

基本語(yǔ)法:

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 '????'

eg:SELECT * FROM Company + (以下語(yǔ)句)

語(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è)字符的任意值
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é)尾的任意值

13、LIMIT 子句

用于限制由 SELECT 語(yǔ)句返回的數(shù)據(jù)數(shù)量房铭。
基本語(yǔ)法:

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]

eg:從Company表中提取 6名員工 的所有信息驻龟。

SELECT * FROM Company LIMIT 6;

eg2:從Company表中的 第二位開(kāi)始提取 3 名員工 的所有信息。

SELECT * FROM Company LIMIT 3 OFFSET 2;

14缸匪、ORDER BY 子句

用來(lái)基于一個(gè)或多個(gè)列按升序或降序順序排列數(shù)據(jù)翁狐。

關(guān)鍵詞:ASC | DESC

(1)ASC:從小到大,升序排列凌蔬,默認(rèn)值A(chǔ)SC露懒。

(2)DESC:從大到小,降序排列砂心。

基本語(yǔ)法:

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

可以使用多個(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 降序讀取坎弯。

SELECT
   select_list
FROM
   table
ORDER BY
    column_1,
    column_2 DESC;

eg:查詢(xún)Company表中 按照工資升序排序 的所有員工的所有信息。

SELECT * FROM Company ORDER BY salary ASC;

eg2:查詢(xún)Company表中 按 name 和 salary 升序排序 的所有員工的所有信息译暂。

SELECT * FROM Company ORDER BY name, salary ASC;

eg3:查詢(xún)Company表中 按 NAME 降序排序 的所有員工的所有信息荞怒。

SELECT * FROM Company ORDER BY name DESC;

15、GROUP BY 子句

用于對(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

eg:查詢(xún)Company表中 每個(gè)客戶(hù)的工資總額荧嵌。

SELECT name, SUM(salary) FROM Company GROUP BY name;

eg2:查詢(xún)Company表中 按 name 列進(jìn)行分組的、按 name 列 升序 的每個(gè)客戶(hù)的工資總額砾淌。

SELECT name, SUM(salary) FROM Company GROUP BY name ORDER BY name;

以上也是把 ORDER BY 子句與 GROUP BY 子句一起使用的例子啦撮。

16、HAVING 子句

指定條件來(lái)過(guò)濾將出現(xiàn)在最終結(jié)果中的分組結(jié)果汪厨。WHERE 子句在所選列上設(shè)置條件赃春,而HAVING 子句在由 GROUP BY 子句創(chuàng)建的分組上設(shè)置條件。

注:HAVING 子句必須放在 GROUP BY 子句之后劫乱,必須放在 ORDER BY 子句之前织中。

基本語(yǔ)法:

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

eg:查詢(xún)Company表中 按名稱(chēng)計(jì)數(shù)小于 2 的所有記錄锥涕。

SELECT * FROM Company GROUP BY name HAVING count(name) < 2;

17、DISTINCT 關(guān)鍵字

用來(lái)消除所有重復(fù)的記錄狭吼,并只獲取唯一一次記錄层坠。

基本語(yǔ)法:

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

eg:查詢(xún)Company表中 所有不重復(fù)的name

SELECT DISTINCT name FROM Company;

---------------------------------------------------------分割線---------------------------------------------------------------

以上刁笙,后續(xù)會(huì)再補(bǔ)充破花。各位小伙伴,歡迎提出問(wèn)題~

我的學(xué)習(xí)文檔是 菜鳥(niǎo)教程疲吸,致謝座每。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市摘悴,隨后出現(xiàn)的幾起案子峭梳,更是在濱河造成了極大的恐慌,老刑警劉巖烦租,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件延赌,死亡現(xiàn)場(chǎng)離奇詭異除盏,居然都是意外死亡叉橱,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)者蠕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)窃祝,“玉大人,你說(shuō)我怎么就攤上這事踱侣》嘈。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵抡句,是天一觀的道長(zhǎng)探膊。 經(jīng)常有香客問(wèn)我,道長(zhǎng)待榔,這世上最難降的妖魔是什么逞壁? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮锐锣,結(jié)果婚禮上腌闯,老公的妹妹穿的比我還像新娘。我一直安慰自己雕憔,他們只是感情好姿骏,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著斤彼,像睡著了一般分瘦。 火紅的嫁衣襯著肌膚如雪蘸泻。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,541評(píng)論 1 305
  • 那天擅腰,我揣著相機(jī)與錄音蟋恬,去河邊找鬼。 笑死趁冈,一個(gè)胖子當(dāng)著我的面吹牛歼争,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播渗勘,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼沐绒,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了旺坠?” 一聲冷哼從身側(cè)響起乔遮,我...
    開(kāi)封第一講書(shū)人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎取刃,沒(méi)想到半個(gè)月后蹋肮,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡璧疗,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年坯辩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片崩侠。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡漆魔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出却音,到底是詐尸還是另有隱情改抡,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布系瓢,位于F島的核電站阿纤,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏夷陋。R本人自食惡果不足惜欠拾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望肌稻。 院中可真熱鬧清蚀,春花似錦、人聲如沸爹谭。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至东揣,卻和暖如春践惑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背嘶卧。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工尔觉, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人芥吟。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓侦铜,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親钟鸵。 傳聞我的和親對(duì)象是個(gè)殘疾皇子钉稍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 原文地址 SQLite 語(yǔ)法特點(diǎn) 不區(qū)分大小寫(xiě); 每條語(yǔ)句以分號(hào)(;)結(jié)尾棺耍; SQLite 關(guān)鍵字 在Mac的終端...
    學(xué)生陳希閱讀 1,079評(píng)論 1 0
  • 什么是 SQLite贡未? SQLite是一個(gè)進(jìn)程內(nèi)的庫(kù),實(shí)現(xiàn)了自給自足的蒙袍、無(wú)服務(wù)器的俊卤、零配置的、事務(wù)性的 SQL 數(shù)...
    Showdy閱讀 509評(píng)論 0 1
  • SQLite運(yùn)算符是什么害幅? 運(yùn)算符是一個(gè)保留字或字符消恍,主要用于SQLite語(yǔ)句的where子句中執(zhí)行操作,如比較和...
    嘀嗒運(yùn)維閱讀 301評(píng)論 0 0
  • 一矫限、優(yōu)點(diǎn) 1.不需要單獨(dú)的服務(wù)器進(jìn)程或操作的系統(tǒng)哺哼;2.不需要配置安裝佩抹;3.輕量級(jí)叼风,無(wú)外部依賴(lài); 二棍苹、命令 crea...
    笨coco閱讀 375評(píng)論 0 0
  • 算數(shù)運(yùn)算符 比較運(yùn)算符 邏輯運(yùn)算符 位運(yùn)算符 SQLite算數(shù)運(yùn)算符## 實(shí)例## sqlite> .mode l...
    Flannery閱讀 948評(píng)論 0 0