Sqlite3知識總結二(高級用法)
現有兩張表用于下面的演示:company、department.
多表查詢
SQLite 的 Join 子句用于結合兩個或多個數據庫中表的記錄。JOIN 是一種通過共同值來結合兩個表中字段的手段。
SQL 定義了三種主要類型的連接:交叉連接 - CROSS JOIN、內連接 - INNER JOIN、外連接 - OUTER JOIN。
1、交叉連接(CROSS JOIN)把第一個表的每一行與第二個表的每一行進行匹配。如果兩個輸入表分別有 x 和 y 行,則結果表有 x*y 行。
select emp_id,dept,name from company cross join department;
2、內連接(INNER JOIN)根據連接謂詞結合兩個表(table1 和 table2)的列值來創建一個新的結果表。是最常見的連接類型,是默認的連接類型。INNER 關鍵字是可選的。
基本用法:
SELECT ... FROM table1 [INNER] JOIN table2 ON conditional_expression ...
如果匹配條件有多個列,也可以使用using
表達式
SELECT ... FROM table1 JOIN table2 USING ( column1 ,... ) ...
如查詢company.id和department.emp_id相等的記錄:
select emp_id,dept,name from company inner join department on company.id = department.emp_id;
3、 外連接(OUTER JOIN)是內連接(INNER JOIN)的擴展。雖然 SQL 標準定義了三種類型的外連接:LEFT、RIGHT、FULL,但 SQLite 只支持 左外連接(LEFT OUTER JOIN)。外連接(OUTER JOIN)聲明條件的方法與內連接(INNER JOIN)是相同的,一旦主連接計算完成,外連接(OUTER JOIN)將從一個或兩個表中任何未連接的行合并進來,外連接的列使用 NULL 值,將它們附加到結果表中。
別名
您可以暫時把表或列重命名為另一個名字,這被稱為別名。
表別名用法:
SELECT column1, column2....
FROM table_name AS alias_name
WHERE [condition];
列別名用法:
SELECT column_name AS alias_name
FROM table_name
WHERE [condition];
觸發器
SQLite 觸發器(Trigger)是數據庫的回調函數,它會在指定的數據庫事件發生時自動執行/調用。
以下是關于 SQLite 的觸發器(Trigger)的要點:
1、SQLite 的觸發器(Trigger)可以指定在特定的數據庫表發生 DELETE、INSERT 或 UPDATE 時觸發,或在一個或多個指定表的列發生更新時觸發。
2、SQLite 只支持 FOR EACH ROW 觸發器(Trigger),沒有 FOR EACH STATEMENT觸發器(Trigger)。因此,明確指定 FOR EACH ROW 是可選的。
3、WHEN 子句和觸發器(Trigger)動作可能訪問使用表單 NEW.column-name 和 OLD.column-name的引用插入、刪除或更新的行元素,其中 column-name 是從與觸發器關聯的表的列的名稱。
4、 如果提供 WHEN 子句,則只針對 WHEN 子句為真的指定行執行 SQL 語句。如果沒有提供 WHEN 子句,則針對所有行執行 SQL語句。
5、BEFORE 或 AFTER 關鍵字決定何時執行觸發器動作,決定是在關聯行的插入、修改或刪除之前或者之后執行觸發器動作。
6、當觸發器相關聯的表刪除時,自動刪除觸發器(Trigger)。
7、要修改的表必須存在于同一數據庫中,作為觸發器被附加的表或視圖,且必須只使用 tablename,而不是database.tablename。
8、一個特殊的 SQL 函數 RAISE() 可用于觸發器程序內拋出異常。
基本語法:
CREATE TRIGGER trigger_name [BEFORE|AFTER] event_name
ON table_name
BEGIN
-- 觸發器邏輯....
END;
event_name 可以是在所提到的表 table_name 上的 INSERT、DELETE 和 UPDATE 數據庫操作
如我們要記錄修改薪資的日志,首先創建一個日志表:
create table log (emp_id int not null, date text not null);
然后創建觸發器:
create trigger update_log after update of salary on company
begin
insert into log values(new.id,datetime('now'));
end;
最后修改company的某個薪資,查詢結果:
如果要查詢某張表上有什么觸發器,如下查詢company表上的觸發器,如果不加company條件,則查詢數據庫所有的觸發器:
select name from sqlite_master where type='trigger' and tbl_name = 'company';
刪除觸發器
drop trigger update_log;
未完待續~~
智能推薦
Sqlite3性能測試
參考:http://blog.csdn.net/majiakun1/article/details/46607163,感謝作者分享。 Sqlite3最簡單的提升讀寫性能的方法有: 1. 關閉寫同步,也就是設置synchronous。Sqlite3是一個文件數據庫,所謂的設置寫同步就是設置每次寫完數據之后刷新IO緩存的頻率,如果寫同步設置為Full,那么每次寫都會刷新緩存,這樣保證數據總能寫到文件里...
【sqlite3】基本使用
Overview 1. 準備 1.1 Windows 1.1.1 下載 1.1.2 安裝 1.2 LINUX(Ubuntu) 2. 使用 2.1 Windows 2.2 LINUX(Ubuntu) 2.3 執行 sql 腳本文件 3. 基本配置:數據編碼等 3.1 編碼:utf-8 4. 數據庫命令對比 5. SQL 對比 5.1 數據類型 Reference 1. 準備 1.1 Windows ...
Python操作SQLite3
1、連接數據庫 2、創建數據表 3、在2的基礎上插入數據 4、在3的基礎上查找數據 更多操作:https://blog.csdn.net/hhy1107786871/article/details/86540125?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160024824419725264625847%2522%252C%2...
裸機移植sqlite3
上一篇文章中提供了vfs支持,此處主要是sqlite3移植所需的線程,信號量支持,sqlite3源碼在官方下載,需要很大的內存支持,移植基本原理就是實現sqlite3所需的linux api接口即可,可以通過宏定義去掉一些不用的功能,減少API依賴。 ucos_iii_pthread.c //ucos_iii_pthread.h 請先初始化ucos以及文件系統,然后就可以初始化sqlite3,并查...
Sqlite3交叉編譯
一、準備工作 本次使用ubuntu18.04和 "arm-fsl-linux-gnueabi-"交叉編譯器 1、下載Sqlite3 在https://www.sqlite.org/download.html里下載Sqlite3 2、將交叉編譯工具鏈安裝 1、查看交叉編譯器是否在環境變量中 加入環境變量的方法: 1、sudo vi /etc/bash.bashrc 2、輸入exp...
猜你喜歡
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...