SQLite 語法學習
SQLite 語法特點
- 不區分大小寫;
- 每條語句以分號(; )結尾;
SQLite 關鍵字
命令 | 描述 |
---|---|
create | 建立一個新的表,一個表的檢視,或者資料庫中的其他物件。 |
alter | 修改資料庫中的某個已有的資料庫物件,比如一個表。 |
drop | 刪除整個表,或者表的檢視,或者資料庫中的其他物件。 |
insert | 建立一條記錄。 |
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終端下執行
SQLite 建立資料庫
sqlite3 DatabaseName.db
SQLite 建立表
SQLite 的 CREATE TABLE 語句
用於在任何給定的資料庫建立一個新表。建立基本表,涉及到命名錶、定義列及每一列的資料型別。
create table company ( id integer primary keyautoincrement, nametextnot null, ageintnot null, addresstextdefault 'TianTongYuan' , salaryreal );
它建立了一個 company 表,id
,name
,age
,address
,salary
五個欄位;
primary key
約束唯一標識資料庫表中的每條記錄, 主鍵必須包含唯一的值, 主鍵列不能包含 NULL 值, 每個表有且只能擁有一個主鍵。
autoincrement
會在新記錄插入表中時生成一個唯一的數字, 預設初始值是1,該數字會自動增長;
not null
約束表示在表中建立紀錄時這些欄位不能為null
;
default
約束用於向列中插入預設值;
SQLite 插入資料
插入資料方式有兩種:
- 指定列的名稱以及被插入的值;
- 只需要提供被插入的值
在終端上分別執行如下命令,插入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 keyautoincrement, nametextnot null, ageintnot null, addresstextdefault 'TianTongYuan', salaryreal );" | 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