sqlite3SQL語句的特點
- 不區分大小寫(比如數據庫認為user和UsEr是一樣的)
每條語句都必須以分號 “ ; ” 就是分號結尾。
SQL中的常用關鍵字有
- select、insert、update、delete、from、create、where、desc、order、by、group、table、alter、view、index等等
- 數據庫中不可以使用關鍵字來命名表、字段
數據定義語句 DDL、DML、DQL
- DDL:(Data Definition Language)包括create和drop等操作
在數據庫中創建新表或刪除表(create table或 drop table)
- DQL: ( Data Query Language)可以用于查詢獲得表中的數據
關鍵字select是DQL(也是所有SQL)用得最多的操作, 其他DQL常用的關鍵字有where,order by,group by和having
- DML: ( Data Manipulation Language)包括insert、update、delete等操作
上面的3種操作分別用于添加、修改、刪除表中的數據
創表---格式
- create table 表名 (字段名1 字段類型1, 字段名2 字段類型2, …) ;
create table if not exists 表名 (字段名1 字段類型1, 字段名2 字段類型2, …) ;
示例:
create table t_student (id integer, name text, age inetger, score real)
字段類型
- SQLite將數據劃分為以下幾種存儲類型:
integer : 整型值
real : 浮點值
text : 文本字符串
blob : 二進制數據(比如文件)
實際上SQLite是無類型的
就算聲明為integer類型,還是能存儲字符串文本(主鍵除外)
建表時聲明啥類型或者不聲明類型都可以,也就意味著創表語句可以這么寫:
create table t_student(name, age);
為了保持良好的編程規范、方便程序員之間的交流,編寫建表語句的時候最好加上每個字段的具體類型
刪表---格式
- drop table 表名 ;
drop table if exists 表名 ;
// 示例
drop table t_student ;
插入數據(insert)---格式
- 格式: insert into 表名 (字段1, 字段2, …) values (字段1的值, 字段2的值, …) ;
// 示例
insert into t_student (name, age) values (‘mj’, 10) ;
- 注意
數據庫中的字符串內容應該用單引號 ’ 括住
更新數據(update)---格式
- update 表名 set 字段1 = 字段1的值, 字段2 = 字段2的值, … ;
// 示例
update t_student set name = ‘jack’, age = 20 ;
- 注意
上面的示例會將t_student表中所有記錄的name都改為jack,age都改為20
刪除數據(delete)---格式
- delete from 表名 ;
// 示例
delete from t_student ;
- 注意
上面的示例會將t_student表中所有記錄都刪掉
數據庫相對 plist的好處
- 分頁查詢指令
limit 指令用于限制查詢出來的結果數量
- 第一個數值表示從哪條記錄開始(起始是0)
- 第二個數值表示一次取多少條記錄,如果要分頁顯示,通常第二個數值固定不變,表示每頁需要顯示的記錄條數
- 第一頁
select * from t_person limit 0, 3; - 第二頁
select * from t_person limit 3, 3; - 第三頁
select * from t_person limit 6, 3;
查詢排序
- ASC 升序(默認的排序方法)
- DESC 降序
- 由左至右排序的優先級依次降低,也就是第一個排序列的優先級是最高的
SELECT * FROM t_person ORDER BY age ASC, id DESC;
能夠定向地查到具體需要的內容
- 從數據庫查出名字叫做wangwu的記錄
select * from t_person where name = 'wangwu';
- 從數據庫查出名字以wang開頭的記錄
select * from t_person where name like 'wangwu%';
- 從數據庫查出名字中包含a的記錄,通常用于模糊查詢,建議不要搞太多字段組合模糊查詢,那樣性能會非常差!
select * from t_person where name like '%a%';
可以對數據進行統計
- 取出所有數據的總數目
select count(*) from t_person;
- 統計符合條件的記錄條數
select count(*) from t_person where name like 'wang%'; - 選擇指定列的最大值
select max(age) from t_person; - 選擇指定列的最小值
select min(age) from t_person; - 計算指定列的平均值
select avg(age) from t_person; - 計算指定列數值的總數
select sum(age) from t_person;
更新指令
- 更新一個字段
update t_person set name = 'xiaofang' where name = 'wangwu';
- 更新多個字段,每個字段之間使用,分隔
update t_person set age = 20, height = 2.0 where name = 'xiaofang';
1、需要注意的是:使用更新指令時,最好能夠準確地知道唯一的一條要更新的記錄,否則其他所有滿足條件的記錄都會被修改。
2、自動增長是由服務器來控制的。
關系
為什么要有關系
- 數據“冗余”,所謂數據冗余,就是存儲了多余的數據
- 在數據庫中的關系有:
- 一對一
- 一對多
- 多對一
通常,一對多和多對一關系存儲在時,就需要使用多個表表示。
關于left jion和jion的選擇
left join
1)如果要查詢左邊表中的所有符合條件的數據,使用left jion
- 通常查詢出來的結果會多,因為右邊表不存在的記錄,同樣可能會被查詢出來,查詢出來之后,右邊表不存在的記錄,全部為NULL
join
1)如果要兩個表中同時存在的符合條件的數據,使用jion
- 通常查詢出來的結果會比左連接少,因為右邊表不存在的記錄,不會顯示出來
通常在使用時,左邊的表是主要信息表,右邊的表是輔助修飾的信息表,其內容可有可無,因此,在實際應用中,left jion使用的比較頻繁!如果用join的話,有可能會“丟(有些存在的數據不顯示)”數據
在使用連接查詢多個表時,如果有重名的字段,可以使用 as 的方法,給字段起一個別名,示例代碼如下:
select s.name, s.age, s.phone, b.name as bookname, b.price from t_student s
join t_book b on b.id = s.book_id