SQLite語句學習筆記

Joerrot發表於2018-09-03

1.建立資料庫和表:

首先在cmd下,進入sqlite的安裝路徑,我的是D:\sqlite,然後

輸入sqlite3.exe DatabaseName.db( .db字尾名可以命名為其它的,例如DatabaseName.dll)回車,執行完後,命令提示符自動跳轉到"sqlite>"狀態
注意:這時DatabaseName.db資料庫已經建立好了,但是還是個臨時資料庫,在資料夾中還看不到。

通過SQL命令 ,建立一個表,例如:

這時就能在D:\sqlite資料夾中看到剛才建立的資料庫了。

進入sqlite狀態,輸入.tables就可以檢視當前路徑下的所有的表了

通過drop table testtable就可以將testtable刪除;

通過.databases命令可以檢視當前路徑D:\sqlite的資料庫路徑:

使用  .quit 命令退出 sqlite 提示符,回到D:\sqlite路徑下

假設一種情況:

如果您在公司上班期間對資料庫操作工作沒有做完,回到家裡附加到家裡的電腦上使用,這樣的情況可以考慮分離資料庫。

分離資料庫是指將資料庫從刪除,但該資料庫的檔案(.MDF)和對應的日誌檔案(.LDF)完好無損。分離成功後,我們就可以把該資料庫檔案(.MDF)和對應的日誌檔案(.LDF)拷貝到其它磁碟中作為備份儲存。

附加資料庫就是將一個備份磁碟中的資料庫檔案(.MDF)和對應的日誌檔案(.LDF)拷貝到需要的計算機,並將其新增到某個SQL Server資料庫伺服器中,由該伺服器來管理和使用這個資料庫。

插入:

insert into company (id, name, age, address, salary) values (1, 'Paul', 32, 'Beijing', 20000.00);
insert into company values (1, 'Paul', 32, 'Beijing', 20000.00);
--插入所有欄位時可省略列名
insert into company_bkp select * from company;
--將company表中的所有記錄全部插入到company_bkp表中, 兩表結構必須相似

更新記錄:

update company set address='Texas' where id=6; 
--將id為6的記錄更新address欄位為Texas
update company set address='Texas', salary=20000.00; 
--將所有記錄的address欄位更新為Texas, salary欄位為20000

查詢:

select * from company;
select id, name from company; 
--查詢company表中id和name欄位
select tbl_name from sqlite_master where type='table'; 
--查詢當前資料庫存在的表
select current_timestamp; 
--查詢當前時間戳
select * from company limit 6;
--只顯示查詢結果的前6行
select * from company limit 3 offset 2;
--只顯示從第3行起, 再多2行, 一共3行
select * from company order by salary asc;
--以salary欄位升序顯示記錄, desc為降序
select * from company order by name, salary asc;
--將結果按name和salary欄位升序顯示, 即name相同的按salary排序
select name, sum(salary) from company group by name;
--將結果中相同name的salary相加, 再構成name, sum(salary)列表
select name, sum(salary) from company group by name order by name;
--同上, 將結果以name升序顯示
select * from company group by name having count(name) < 2;
--以name分組, 相同name記錄數小於2, having設定分組的過濾條件
select distinct name from company;
--去重, 相同name不顯示
select * from company where salary>10000 group by name having count(name)>=2 order by name
--相同name的記錄數大於或等於2, 且salary大於10000, 以name升序顯示
select * from company cross join department;
select * from company, department;
--將company的每一行與第二個表的每一行進行匹配, 分別有x和y行, 則結果有x*y行, 分別有x和y列, 則結果有x+y列. 交叉連線可能產生非常大的表
select * from company [inner] join department on company.id=department.emp_id;
--選取company的id列與department的emp_id列相等的行進行連線, 內連線是預設連線, 可省略inner, 橫向連線
select * from company join department using (id);
--使用兩表共有的id列進行相同值連線
select * from company natural join department;
--自動測試存在兩個表中的每一列的值之間相等值 
select * from company left outer join department on company.id=department.emp_id;
--不同於內連線, 左外連線還會合並進第一個表的非匹配行, 這些行多餘的列, 即對應第二個表的列為null. 之所以第一表顯示, 因為是left嘛.
select col1, col2, ... from table1 where conditions
union [all]
select col1, col2, ... from table2 where conditions;
--不侷限於上面的語句, 事實上union將兩個select的結果縱向連線去重.因此這要求結果必須列相同, 列型別相同. join則是橫向連線. union all不去重.
select c.id, c.name, c.age, d.dept from company as c, department as d where c.id=d.emp_id;
select c.id, c.name, c.age, d.dept from company as c join department as d on c.id=d.emp_id;
--通過as給表起別名
select * from company where id in (select id from company where salary > 45000);
select * from company where salary > 45000;
--子查詢, `()`中的select先執行, 此處兩個查詢相同, 可與select, insert, update, delete混合使用
select * from company age like '2%';
--顯示 COMPANY 表中 AGE 以 2 開頭的所有記錄

刪除:

delete from company where id==7
--刪除id為7的記錄
delete from company;
--刪除所有記錄

 

相關文章