延續上一篇【SQLite資料庫】#01 DB Browser安裝與操作 的內容,這篇要來說明一些常用到的SQL指令,我個人習慣將主要的計算都放在Python的Pandas上,所以在SQL這邊就只用到幾個東西,所以在這邊跟大家介紹我最常用到的SQL語法。
先想像一個資料表,目的用來儲存每檔股票的每日開高低收(OHLC)歷史資料,可以供我們進行一些日線交易的回測資料,除了基本的OHLC與成交量外,另外需要有資產類別(Type)、交易所(Exchange)與代號(Symbol)。
我們將這個表格命名為StockData_table,後面將使用此表作為範例。
INSERT
前一篇文章有示範如何利用SQLite DB Browser建立資料表,有了資料表後,第一件事就是要將我們擁有的資料放入資料表中,這時候就需要用到INSERT的這個指令,INSERT這個指令分為兩種使用方式。
非指定欄位
非指定欄位INSERT就是將資料表中所有的欄位按照順序寫入資料表中。
INSERT INTO StockData_table VALUES ('Stock','TWSE','2330','20201102',433,435.5,428,435.5,34539.576);
從上面可以看到在輸入字串的資料時,在前後均有加上單引號。
指定欄位
除了可以按照順序將所有資料欄位一起INSERT之外,另外也可以指定輸入某些欄位,而沒有被輸入的欄位則會顯示為NULL,指定要輸入的欄位要定義於StockData_table的後面,VALUES後的資料數必須與欄位數相同。
INSERT INTO StockData_table (Type, Exchange, Symbol) VALUES ('Stock','TWSE','2330');
SELECT
全部資料表輸出
透過以下指令可以將整個資料表的資料輸出,如果這個資料表相當龐大,請勿使用這個指令進行抓取,一次抓出幾十萬筆資料,電腦可能會有點崩潰。
SELECT * FROM StockData_table;
建議可以先選出前幾筆資料來看看就好,例如前100筆。
SELECT TOP 100 * FROM StockData_table;
指定資料欄位輸出
有的時候我們只需要輸出某幾個欄位,可將上面的*改為欄位名稱。
SELECT Symbol, Date, Close FROM StockData_table;
指定資料欄位條件輸出
在查找資料時最常使用的是WHERE的指令,將條件放在WHERE後面,下面範例為指令查詢代號為2330的資料。
SELECT * FROM StockData_table WHERE Symbol = '2330';
多個條件聯集式查找,例如我們要同時查找2330與2317的資料,我們可以用IN。
SELECT * FROM StockData_table WHERE Symbol IN ('2330','2317');
資料區間查找
在進行回測時,相當常使用日期區間查找的方式來抓取資料,我們可以使用BETWEEN。
SELECT * FROM StockData_table WHERE Date BETWEEN '20200101' and '20201101';
在使用多個條件查詢時,只需要使用AND來連接多個條件即可。
SQL指令其實相當多,因為大部分的內容都與Pandas有重疊,所以這邊僅列出基本的Input/Output,後續的資料計算Pandas都可以勝任,如果想要了解更多SQL指令就請大家自行Google了。