SQLite 語(yǔ)法特點(diǎn)
- 不區(qū)分大小寫;
- 每條語(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ù)方式有兩種:
- 指定列的名稱以及被插入的值;
- 只需要提供被插入的值
在終端上分別執(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ù)
-
獲取所有可用的字段:
select * from company; -
獲取部分字段:
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 inin運(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