SQLite 語(yǔ)法學(xué)習(xí)

原文地址

SQLite 語(yǔ)法特點(diǎn)

  1. 不區(qū)分大小寫;
  2. 每條語(yǔ)句以分號(hào)(;)結(jié)尾;

SQLite 關(guān)鍵字

命令 描述
create 創(chuàng)建一個(gè)新的表,一個(gè)表的視圖,或者數(shù)據(jù)庫(kù)中的其他對(duì)象。
alter 修改數(shù)據(jù)庫(kù)中的某個(gè)已有的數(shù)據(jù)庫(kù)對(duì)象,比如一個(gè)表。
drop 刪除整個(gè)表,或者表的視圖,或者數(shù)據(jù)庫(kù)中的其他對(duì)象。
insert 創(chuàng)建一條記錄。
update 修改記錄。
delete 刪除記錄。
select 從一個(gè)或多個(gè)表中檢索某些記錄。

在Mac的終端上輸入sqlite3,出現(xiàn)如下提示:

TESTdeMacBook-Pro:Desktop chenxi$ sqlite3 
SQLite version 3.24.0 2018-06-04 14:10:15
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> 

顯示幫助, 輸入.help,出現(xiàn)幫助命令

  • .help 顯示幫助信息

  • .exit 退出應(yīng)用程序

  • .quit 退出應(yīng)用程序

  • .headers on | off 是否顯示頭部信息

  • .mode MODE ?TABLE? 設(shè)置輸出模式,MODE 可以是下列之一:

    • csv 逗號(hào)分隔的值
    • column 左對(duì)齊的列
    • html HTML 的 <table>代碼
    • insert TABLE 表的 SQL 插入(insert)語(yǔ)句
    • line 每行一個(gè)值
    • list 由 .separator 字符串分隔的值
    • tabs 由 Tab 分隔的值
    • tcl TCL 列表元素
  • .databases 列舉出所有的數(shù)據(jù)庫(kù)

  • .tables 列舉出所有的表

以下所有命令都在Mac終端下執(zhí)行

SQLite 創(chuàng)建數(shù)據(jù)庫(kù)

sqlite3 DatabaseName.db

SQLite 創(chuàng)建表

SQLite 的 CREATE TABLE 語(yǔ)句
用于在任何給定的數(shù)據(jù)庫(kù)創(chuàng)建一個(gè)新表。創(chuàng)建基本表,涉及到命名表、定義列及每一列的數(shù)據(jù)類型。

create table company (
   id integer primary key   autoincrement,
   name           text      not null,
   age            int       not null,
   address        text      default 'TianTongYuan' ,  
   salary         real
);

它創(chuàng)建了一個(gè) company 表,id , name, age, address, salary 五個(gè)字段;

primary key 約束唯一標(biāo)識(shí)數(shù)據(jù)庫(kù)表中的每條記錄, 主鍵必須包含唯一的值, 主鍵列不能包含 NULL 值, 每個(gè)表有且只能擁有一個(gè)主鍵。

autoincrement 會(huì)在新記錄插入表中時(shí)生成一個(gè)唯一的數(shù)字, 默認(rèn)初始值是1,該數(shù)字會(huì)自動(dòng)增長(zhǎng);

not null 約束表示在表中創(chuàng)建紀(jì)錄時(shí)這些字段不能為 null;

default 約束用于向列中插入默認(rèn)值;

SQLite 插入數(shù)據(jù)

插入數(shù)據(jù)方式有兩種:

  1. 指定列的名稱以及被插入的值;
  2. 只需要提供被插入的值

在終端上分別執(zhí)行如下命令,插入8條數(shù)據(jù);

# 添加數(shù)據(jù),省略id字段,默認(rèn)是1
insert into company (name, age, address, salary) values 
    ('Paul', 32, 'California', 20000.00);

# 添加數(shù)據(jù),省略address字段,默認(rèn)是'TianTongYuan'
insert into company (id, name, age, salary) values
    (2, 'Allen', 25, 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', 23, 'South-Hall', 45000.00);

insert into company values (7, 'James', 24, 'Houston', 100000.00);

insert into company (name, age, address, salary) values
    ('Peak', 27, 'China', 24000.00);

SQLite 查詢數(shù)據(jù)

  1. 獲取所有可用的字段:

    select * from company;
    
  2. 獲取部分字段:

    select id, name, salary from company;
    

使用 where 子句查詢記錄:

基本語(yǔ)法如下:

select column1,  column2, columnN from table_name where [condition]; 
比較運(yùn)算符
  • == 檢查兩個(gè)操作數(shù)的值是否相等,如果相等則條件為真。

  • = 檢查兩個(gè)操作數(shù)的值是否相等,如果相等則條件為真。

  • != 檢查兩個(gè)操作數(shù)的值是否相等,如果不相等則條件為真。

  • > 檢查左操作數(shù)的值是否大于右操作數(shù)的值,如果是則條件為真。

  • >= 檢查左操作數(shù)的值是否大于等于右操作數(shù)的值,如果是則條件為真。

  • < 檢查左操作數(shù)的值是否小于右操作數(shù)的值,如果是則條件為真。

  • <= 檢查左操作數(shù)的值是否小于等于右操作數(shù)的值,如果是則條件為真。

  • !< 檢查左操作數(shù)的值是否不小于右操作數(shù)的值,如果是則條件為真。

  • !> 檢查左操作數(shù)的值是否不大于右操作數(shù)的值,如果是則條件為真。
邏輯運(yùn)算符
  • and 用于結(jié)合一個(gè) SQL 語(yǔ)句的 WHERE 子句中的多個(gè)條件。

  • or 用于結(jié)合一個(gè) SQL 語(yǔ)句的 WHERE 子句中的多個(gè)條件。

  • between 用于在給定最小值和最大值范圍內(nèi)的一系列值中搜索值。

  • exists 用于在滿足一定條件的指定表中搜索行的存在。

  • in 用于把某個(gè)值與一系列指定列表的值進(jìn)行比較。

  • not in in運(yùn)算符的對(duì)立面。

  • like 用于把某個(gè)值與使用通配符運(yùn)算符的相似值進(jìn)行比較。

查詢 age 大于等于 25 并且 salary 大于等于 65000.00 的所有記錄:

select * from company where age >= 25 and salary >= 65000;

查詢 age 大于等于 25 或者 salary 大于 65000.00 的所有記錄:

select * from company where age >= 25 or salary > 65000;

查詢 name 是以 Ki 開頭的所有記錄:

select * from company where name like 'Ki%';

查詢 age 是 25 或者 27 的所有記錄:

select * from company where age in ( 25, 27 );

查詢所有 age 在 25 到 27 之間的所有記錄:

select * from company where age between 25 and 27;

limit 限制符:

用于限制由 select 語(yǔ)句返回的數(shù)據(jù)數(shù)量。

查詢所有 age 在 25 到 27 之間的前 2 條記錄:

 select * from company where age between 25 and 27 limit 2;

查詢所有 age 在 25 到 27 之間的從第 1 條記錄之后的前 2 條記錄:

select * from company where age between 25 and 27 limit 2 offset 1;

order 限制符:

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

基本語(yǔ)法:

select column-list from table_name [where condition] [order by column1, column2, columnN] [asc | desc];

按照 age 字段升序查詢所有記錄:

select * from company order by age asc;

按照 salary > 20000 并且 age 字段降序查詢所有記錄:

select * from company where salary > 20000 order by age asc;

常用函數(shù)

計(jì)算數(shù)據(jù)庫(kù)中某一個(gè)表的行數(shù):

select count (*) from company;

計(jì)算數(shù)據(jù)庫(kù)中某一列的最大值:

select max(age) from company;

計(jì)算數(shù)據(jù)庫(kù)中某一列的最小值:

select min(id) from company;

計(jì)算數(shù)據(jù)庫(kù)中某一列的平均值:

select avg(salary) from company;

計(jì)算數(shù)據(jù)庫(kù)中某一列的總和:

select sum(salary) from company;

把數(shù)據(jù)庫(kù)中某一列的值轉(zhuǎn)換成大寫:

select upper(name) from company;

把數(shù)據(jù)庫(kù)中某一列的值轉(zhuǎn)換成小寫:

select lower(address) from company;

計(jì)算數(shù)據(jù)庫(kù)中某一列的值字符串長(zhǎng)度:

select address, length(address) from company;

SQLite 修改數(shù)據(jù)

基本語(yǔ)法:

update table_name set column1 = value1, column2 = value2 ...., columnN = valueN where [condition];

修改 age > 26 并且 salary = 24000 的所有字段, 把其中的 address 的值設(shè)置為 BeiJing 。

update company set address = 'BeiJing' where age > 26 and salary = 24000;

SQLite 刪除數(shù)據(jù)

基本語(yǔ)法:

delete from table where [condition];

刪除 id 為 7 的用戶:

delete from company where id = 7;

刪除整張表:

delete from company;

練習(xí)腳本:

#!/bin/bash

DBName="first-blood.db"

create() {
    echo "create table company (
    id integer primary key   autoincrement,
    name           text      not null,
    age            int       not null,
    address        text      default 'TianTongYuan',  
    salary         real
    );" | sqlite3 $DBName
} 

insertValue() {
    echo "insert into company (name, age, address, salary) values 
    ('Paul', 32, 'California', 20000.00);" | sqlite3 $DBName

    echo "insert into company (id, name, age, salary) values
    (2, 'Allen', 25, 15000.00);" | sqlite3 $DBName

    echo "insert into company (id, name, age, address, salary) values
    (3, 'Teddy', 23, 'Norway', 20000.00);" | sqlite3 $DBName

    echo "insert into company (id, name, age, address, salary) values
    (4, 'Mark', 25, 'Rich-Mond', 65000.00);" | sqlite3 $DBName

    echo "insert into company (id, name, age, address, salary) values
    (5, 'David', 27, 'Texas', 85000.00);" | sqlite3 $DBName

    echo "insert into company (id, name, age, address, salary) values
    (6, 'Kim', 23, 'South-Hall', 45000.00);" | sqlite3 $DBName

    echo "insert into company values (7, 'James', 24, 'Houston', 100000.00);" | sqlite3 $DBName

    echo "insert into company (name, age, address, salary) values
    ('Peak', 27, 'China', 24000.00);" | sqlite3 $DBName
}

queryValue() {
    echo "query data ..."
    echo "select * from company;" | sqlite3 $DBName
    echo ""
}

updateValue() {
    echo "update ..."
    echo "update company set address = 'BeiJing' where age > 26 and salary = 24000;" | sqlite3 $DBName
}

deleteValue() {
    echo "delete ..."
    echo "delete from company where id = 7;" | sqlite3 $DBName
}

create

insertValue 

queryValue

updateValue

queryValue

deleteValue

queryValue


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容