一、數據庫是什么?
SQL語言簡潔,語法簡單,易學易用
SQL(structured query language):是一種結構化查詢語言
SQL是一種對關系型數據庫中的數據進行定義和操作的語言
二、SQLite 數據庫是什么?
三、SQL語句的種類
*1. DDL(Data Definition Language) - 數據定義語句
| 命令 |描述 |
| ------------- |:------------- -----:|
|CREATE | 創建一個新的表,一個表的視圖,或者數據庫中的其他對象 |
| ALTER | 修改數據庫中的某個已有的數據庫對象,比如一個表 |
| DROP | 刪除整個表,或者表的視圖,或者數據庫中的其他對象 |
*2. DML(Data Manipulation Language) - 數據操作語句
| 命令 |描述 |
| ------------- |:------------- -----:|
|INSERT |新增數據 |
| UPDATE | 修改數據庫中的某個已有的數據庫對象,比如一個表 |
|DELETE | 刪除整個表,或者表的視圖,或者數據庫中的其他對象 |
*3. DQL(Data Query Language) - 數據查詢語句
| 命令 |描述 |
| ------------- |:------------- -----:|
|SELECT |查詢數據 |
四、條件語句的介紹
如果只想更新或者刪除某些固定的記錄,那就必須在DML語句后加上一些條件
條件語句的常見格式
1.WHERE
| WHERE |判斷 | 注釋|
| ------------- |:------------- -----:|
|where |字段 = 某個值 | 不能用==(兩個等號) |
|where |字段 is 某個值 |is 相當于 = |
|where |字段 != 某個值 |~|
|where |字段 is not 某個值 |is not 相當于 != |
|where |字段 > 某個值|~|
|where |字段1 = 某個值 and 字段2 > 某個值 |and相當于C語言中的 && |
另外:
where 字段1 = 某個值 or 字段2 = 某個值 //or 相當于C語言中的 ||
示例
將t_zorn表中姓名等于zorn 并且電話不等于110的記錄
update t_zorn set name = 'zorn' where number != 110 ;```
####2.LIKE
| 語句 |描述 |
| ------------- |:------------- -----:|
|WHERE number LIKE '110%' | 查找以110開頭的任意值 |
| WHERE number LIKE '%110%' | 查找任意位置包含110的任意值 |
|WHERE number LIKE '_10%' |查找第二位和第三位為10的任意值|
|WHERE number LIKE '0_%_%' | 查找以0開頭,且長度至少為3個字符的任意值 |
| WHERE number LIKE '%112' |查找以112結尾的任意值 |
|WHERE number LIKE '_1%2' |查找第二位為1,且以2結尾的任意值|
|WHERE number LIKE '2__3' |查找長度為5位數,且以2開頭以3結尾的任意值|
注意:??
%是轉義字符,兩個%才表示一個%```
3.LIMIT
使用limit可以精確地控制查詢結果的數量,比如每次只查詢10條數據
格式
select * from 表名 limit 數值1, 數值2 ;
示例
select * from t_zorn limit 4, 8 ;
可以理解為:跳過最前面4條語句,然后取8條記錄
limit常用來做分頁查詢,比如每頁固定顯示5條數據,那么應該這樣取數據
| 頁數 |LIMIT | 數值|
| ------------- |:------------- -----:|
|第1頁 |limit | 0, 5 |
|第2頁 |limit |5, 5 |
|第3頁 |limit |10, 5|
|... || |
|第n頁 |limit|5*(n-1), 5|
select * from t_zorn limit 7 ;這條語句的作用相當于select * from t_student limit 0, 7 ;表示取最前面的7條記錄
五、SQLite語法介紹
1)SQLite將數據劃分為以下幾種存儲類型:
integer 整型值,根據值的大小存儲在 1、2、3、4、6 或 8 字節中。
real 浮點值,存儲為 8 字節的 IEEE 浮點數字。
text 文本字符串,使用數據庫編碼(UTF-8、UTF-16BE 或 UTF-16LE)存儲。
blob 二進制數據,根據它的輸入存儲。```
注意:實際上SQLite是無類型的,就算聲明為integer類型,還是能存儲字符串文本(主鍵除外)
建表時聲明啥類型或者不聲明類型都可以,也就意味著創表語句可以這么寫:
create table t_zorn(name, number);
提示:為了保持良好的編程規范、方便程序員之間的交流,編寫建表語句的時候最好加上每個字段的具體類型
#####2)**sqlite 的方法簡介**
sqlite3 *db, 數據庫的象征(句炳),跟文件句柄FILE很類似
sqlite3_open(), 打開數據庫,沒有數據庫時創建。
sqlite3_exec(), 執行非查詢的sql語句
Sqlite3_step(), 在調用sqlite3_prepare后,使用這個函數在記錄集中移動。
Sqlite3_close(), 關閉數據庫文件
sqlite3_stmt *stmt, 這個相當于ODBC的Command對象,用于保存編譯好的SQL語句
sqlite3_column_text(), 取text類型的數據。
sqlite3_column_blob(),取blob類型的數據
sqlite3_column_int(), 取int類型的數據```
3)SQLite語句
*1.打開數據庫
SQLITE_API int SQLITE_STDCALL sqlite3_open(
const char *filename, /* 數據庫文件路徑 (UTF-8) */
sqlite3 **ppDb /* 數據庫句炳(象征) */
);
*2.執行任何SQL語句 (除了查詢語句)
SQLITE_API int SQLITE_STDCALL sqlite3_exec(
sqlite3*, /* 一個打開的數據庫實例 */
const char *sql, /* 需要執行的SQL語句 */
int (*callback)(void*,int,char**,char**), /* SQL語句執行完畢后的回調 */
void *, /* 回調函數的第1個參數 */
char **errmsg /* 錯誤信息(用來調試) */
*3.檢查SQL語句的合法性(查詢前的準備)
SQLITE_API int SQLITE_STDCALL sqlite3_prepare_v2(
sqlite3 *db, /* 數據庫實例 */
const char *zSql, /* 需要檢查的SQL語句, UTF-8 encoded */
int nByte, /* SQL語句的最大字節長度 */
sqlite3_stmt **ppStmt, /* OUT: sqlite3_stmt實例,用來獲得數據庫數據 */
const char **pzTail /* OUT: 指向 sql 語句中未使用的部分 */
);
*4.查詢一行數據
int sqlite3_step(sqlite3_stmt*); // 如果查詢到一行數據,就會返回SQLITE_ROW``
*5.利用stmt獲得某一字段的值(字段的下標從0開始)
double sqlite3_column_double(sqlite3_stmt*, int iCol); // 浮點數據
const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol); // 字符串數據
int sqlite3_column_int(sqlite3_stmt*, int iCol); // 整型數據
sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol); // 長整型數據
const void *sqlite3_column_blob(sqlite3_stmt*, int iCol); // 二進制文本數據
六、基本操作
導入libsqlite3.tbd
1.創建表 (create)
格式
create table 表名;
create table if not exists 表名 ;
示例
create table t_zorn;
create table if not exists t_zorn;
2.插入數據(insert)
格式
insert into 表名 (字段1, 字段2, …) values (字段1的值, 字段2的值, …) ;
示例
insert into t_student (name, number) values ('zorn', 123567) ;
注意
數據庫中的字符串內容應該用單引號 ' 括住
3.刪表(drop)
格式
drop table 表名 ;
drop table if exists 表名 ;
示例
drop table t_zorn;
drop table if exists t_zorn ;
注意
上面的示例會將t_zorn表中所有記錄都刪掉
4.指定位置刪除數據(delete)
格式
delete from 表名 where 字段1 = 1 ;
示例
delete from t_zorn where id = 1 ;
5.查詢數據(select)
格式
select 字段1, 字段2, … from 表名 ;
select * from 表名; // 查詢所有的字段
示例
select name, age from t_zorn ;
select * from t_zorn ;
select * from t_zorn where number > 110 ; // 條件查詢 ```
####6.更改數據(update)
格式
update 表名 set 字段1 = 字段1的值, 字段2 = 字段2的值, … ;
示例
update t_zorn set name = 'ren', numer = 112 ;
注意
上面的示例會將t_zorn表中所有記錄的name都改為ren,number都改為112 [可添加where(相當于if)做判斷]
###總結:
####SELECT的其它用法
*select還可以起別名(適用于字段和表)
格式
select 字段1 別名 , 字段2 別名 , … from 表名 別名 ;
select 字段1 別名, 字段2 as 別名, … from 表名 as 別名 ;
select 別名.字段1, 別名.字段2, … from 表名 別名 ;
示例
select name myname, number mynumber from t_zorn t_Ren;
給name起個叫做myname的別名,給number起個叫做mynumber的別名,給t_zorn起個叫做t_Ren的別名
select w.name, w.number from t_student s ;
給t_zorn表起個別名叫做w,利用s來引用表中的字段
*select計算記錄的數量
格式
select count (字段) from 表名 ;
select count ( * ) from 表名 ;
示例
select count (number) from t_zron ;
select count ( * ) from t_zorn where number = 110;
*select排序
查詢出來的結果可以用order by進行排序
select * from t_zorn order by 字段 ;
select * from t_zorn order by age ;
默認是按照升序排序(由小到大),也可以變為降序(由大到小)
select * from t_zorn order by age desc ; //降序
select * from t_zorn order by age asc ; // 升序(默認)
也可以用多個字段進行排序
select * from t_zorn order by age asc, height desc ;
先按照年齡排序(升序),年齡相等就按照身高排序(降序)```
附上SQLite管理工具下載地址(僅供參考):
->SQLite管理工具下載
實戰:
-> SQLite3Demo