SQLite 語法特點
- 不區(qū)分大小寫;
- 每條語句以分號(;)結尾典徊;
SQLite 關鍵字
命令 | 描述 |
---|---|
create | 創(chuàng)建一個新的表,一個表的視圖,或者數據庫中的其他對象咐汞。 |
alter | 修改數據庫中的某個已有的數據庫對象,比如一個表儒鹿。 |
drop | 刪除整個表化撕,或者表的視圖,或者數據庫中的其他對象约炎。 |
insert | 創(chuàng)建一條記錄植阴。 |
update | 修改記錄。 |
delete | 刪除記錄圾浅。 |
select | 從一個或多個表中檢索某些記錄掠手。 |
在Mac的終端上輸入sqlite3
,出現如下提示:
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
,出現幫助命令
.help
顯示幫助信息.exit
退出應用程序.quit
退出應用程序.headers on | off
是否顯示頭部信息-
.mode MODE ?TABLE?
設置輸出模式喷鸽,MODE 可以是下列之一:- csv 逗號分隔的值
- column 左對齊的列
- html HTML 的 <table>代碼
- insert TABLE 表的 SQL 插入(insert)語句
- line 每行一個值
- list 由 .separator 字符串分隔的值
- tabs 由 Tab 分隔的值
- tcl TCL 列表元素
.databases
列舉出所有的數據庫.tables
列舉出所有的表
以下所有命令都在Mac終端下執(zhí)行
SQLite 創(chuàng)建數據庫
sqlite3 DatabaseName.db
SQLite 創(chuàng)建表
SQLite 的 CREATE TABLE 語句
用于在任何給定的數據庫創(chuàng)建一個新表。創(chuàng)建基本表灸拍,涉及到命名表做祝、定義列及每一列的數據類型。
create table company (
id integer primary key autoincrement,
name text not null,
age int not null,
address text default 'TianTongYuan' ,
salary real
);
它創(chuàng)建了一個 company 表鸡岗,id
, name
, age
, address
, salary
五個字段混槐;
primary key
約束唯一標識數據庫表中的每條記錄, 主鍵必須包含唯一的值, 主鍵列不能包含 NULL 值, 每個表有且只能擁有一個主鍵。
autoincrement
會在新記錄插入表中時生成一個唯一的數字, 默認初始值是1轩性,該數字會自動增長纵隔;
not null
約束表示在表中創(chuàng)建紀錄時這些字段不能為 null
;
default
約束用于向列中插入默認值;
SQLite 插入數據
插入數據方式有兩種:
- 指定列的名稱以及被插入的值炮姨;
- 只需要提供被插入的值
在終端上分別執(zhí)行如下命令捌刮,插入8條數據;
# 添加數據舒岸,省略id字段绅作,默認是1
insert into company (name, age, address, salary) values
('Paul', 32, 'California', 20000.00);
# 添加數據,省略address字段蛾派,默認是'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 查詢數據
-
獲取所有可用的字段:
select * from company;
-
獲取部分字段:
select id, name, salary from company;
使用 where
子句查詢記錄:
基本語法如下:
select column1, column2, columnN from table_name where [condition];
比較運算符
== 檢查兩個操作數的值是否相等俄认,如果相等則條件為真个少。
= 檢查兩個操作數的值是否相等,如果相等則條件為真眯杏。
!= 檢查兩個操作數的值是否相等夜焦,如果不相等則條件為真。
> 檢查左操作數的值是否大于右操作數的值岂贩,如果是則條件為真茫经。
>= 檢查左操作數的值是否大于等于右操作數的值,如果是則條件為真萎津。
< 檢查左操作數的值是否小于右操作數的值卸伞,如果是則條件為真。
<= 檢查左操作數的值是否小于等于右操作數的值锉屈,如果是則條件為真荤傲。
!< 檢查左操作數的值是否不小于右操作數的值,如果是則條件為真颈渊。
-
!> 檢查左操作數的值是否不大于右操作數的值遂黍,如果是則條件為真。
邏輯運算符
and
用于結合一個 SQL 語句的 WHERE 子句中的多個條件俊嗽。or
用于結合一個 SQL 語句的 WHERE 子句中的多個條件雾家。between
用于在給定最小值和最大值范圍內的一系列值中搜索值。exists
用于在滿足一定條件的指定表中搜索行的存在乌询。in
用于把某個值與一系列指定列表的值進行比較榜贴。not in
in
運算符的對立面豌研。like
用于把某個值與使用通配符運算符的相似值進行比較妹田。
查詢 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 語句返回的數據數量。
查詢所有 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 限制符:
用來基于一個或多個列按升序或降序順序排列數據鹃共。
基本語法:
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;
常用函數
計算數據庫中某一個表的行數:
select count (*) from company;
計算數據庫中某一列的最大值:
select max(age) from company;
計算數據庫中某一列的最小值:
select min(id) from company;
計算數據庫中某一列的平均值:
select avg(salary) from company;
計算數據庫中某一列的總和:
select sum(salary) from company;
把數據庫中某一列的值轉換成大寫:
select upper(name) from company;
把數據庫中某一列的值轉換成小寫:
select lower(address) from company;
計算數據庫中某一列的值字符串長度:
select address, length(address) from company;
SQLite 修改數據
基本語法:
update table_name set column1 = value1, column2 = value2 ...., columnN = valueN where [condition];
修改 age
> 26 并且 salary
= 24000 的所有字段, 把其中的 address
的值設置為 BeiJing
鬼佣。
update company set address = 'BeiJing' where age > 26 and salary = 24000;
SQLite 刪除數據
基本語法:
delete from table where [condition];
刪除 id 為 7 的用戶:
delete from company where id = 7;
刪除整張表:
delete from company;
練習腳本:
#!/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