SQLite學習筆記(四)
概述
本篇文章將繼續介紹關于 SELECT 中的一些用法。文章結構如下:
- 子查詢
- 多表連接/聯結表
- 名稱和別名
- 組合/復合查詢
- 條件結果
一、子查詢
子查詢是指 SELECT 語句中又嵌套 SELECT 語句。子查詢最常應用的地方是 WHERE 子句,特別是在 IN 操作符中。下面通過一個例子來了解下子查詢的用法和好處。
例子
列出訂購商品 RGAN01 的所有顧客。這個需求的檢索思路如下:
- 檢索包含物品 RGAN01 的所有訂單的編號。
- 檢索具有前一步步驟列出的訂單編號的所有顧客的 ID。
- 檢索前一步驟返回的所有顧客 ID 的顧客信息。
可以看到每一步查詢的條件都是上一步查詢得到的結果,我們首先進行普通的查詢:
輸入:
SELECT order_num
FROM OrderItems
WHERE prod_id = 'RGAN01';
輸出:
order_num
----------
20007
20008
可以看到包含物品 RGAN01 的訂單編號為 20007 和 20008,接下來進行第二步:
輸入:
SELECT cust_id
FROM Orders
WHERE order_num IN(20007, 20008);
輸出:
cust_id
----------
1000000004
1000000005
可以得知我們需要的顧客 ID 為 1000000004 和 100000005,接下來進行第三步:
輸入:
SELECT cust_name, cust_contact
FROM Customers
WHERE cust_id IN('1000000004', '1000000005');
輸出:
cust_name cust_contact
---------- ------------------
Fun4All Denise L. Stephens
The Toy St Kim Howard
經過這三步查詢之后,我們最終得到了我們想要的顧客信息。
接下來我們用子查詢實現同樣的效果:
輸入:
SELECT cust_name, cust_contact
FROM Customers
WHERE cust_id IN (SELECT cust_id
FROM Orders
WHERE order_num IN (SELECT order_num
FROM OrderItems
WHERE prod_id = 'RGAN01'));
輸出:
cust_name cust_contact
---------- ------------------
Fun4All Denise L. Stephens
The Toy St Kim Howard
可以看到使用子查詢我們達到了同樣的效果。實際上 DBMS 仍然執行了三條 SELECT 語句。對于子查詢來說,有以下三點需要注意:
作為子查詢的 SELECT 語句只能查詢單個列。企圖檢索多個列將返回錯誤。
SQL 語句對于能嵌套的子查詢數目沒有限制,不過在使用時由于性能的限制,不能嵌套太多子查詢。
子查詢可以用在關系表達式的任何地方,并非只能用于 WHERE 子句中。
二、多表連接/聯結表
為了方便描述下面對于該名詞統稱為聯結表。下面先來了解一下什么是聯結。
1. 聯結
SQL 最強大的功能之一就是能在數據查詢的執行中聯結(join)表,聯結的這些表我們稱之為關系表。什么是關系表,我們可以通過下面的一個例子來理解。
2. 關系表
例如,有一個包含產品目錄的數據庫表,其中每類物品占一行,對于每一種物品,要存儲的信息包括產品描述、價格,以及生產該產品的供應商。
而供應商可能不止生產這一類產品,它還有可能生產多種產品,那么供應商名、地址、聯系方法等信息又該如何存儲?
答案是最好將供應商信息和產品信息分開存儲,理由如下:
- 同一供應商生產的每個產品,其供應商信息都是相同的,對每個產品重復此信息既浪費時間又浪費存儲空間;
- 如果供應商信息發生變化,例如供應商遷址或者電話號碼變動,只需修改一次即可;
- 如果有重復數據(即每種產品都存儲供應商信息),很難保證每次輸入該數據的方式都相同。不一致的數據在報表中很難利用。
關系表的設計就是要把信息分解成多個表,一類數據一個表。各表通過某些共同的值相互關聯(所以才叫關系數據庫)。
例如在上述例子中,我們可以使用一個 Products 表只存儲產品信息,除了存儲供應商 ID(Vnedors 表主鍵)外,它不存儲其他有關供應商的信息。Vendors 表的主鍵將 Vendors 表和 Products 表相關聯。接下來我們看看如何利用它們之間的聯結來查詢相關信息。
3. 內聯結
內聯結就是通過表中的兩個字段進行聯結,它使用關系代數的一種集合操作,叫做交叉,即找出同時存在于兩個集合的元素,如下圖所示:
現在我們將 Vendors、Products 這兩個表通過 vend_id 字段進行內聯結,我們可以使用 WHERE 子句:
輸入:
SELECT vend_name, prod_name, prod_price
FROM Vendors, Products
WHERE Vendors.vend_id = Products.vend_id;
輸出:
vend_name prod_name prod_price
---------- ----------------- ----------
Bears R Us 8 inch teddy bear 5.99
Bears R Us 12 inch teddy bea 8.99
Bears R Us 18 inch teddy bea 11.99
Doll House Fish bean bag toy 3.49
Doll House Bird bean bag toy 3.49
Doll House Rabbit bean bag t 3.49
Doll House Raggedy Ann 4.99
Fun and Ga King doll 9.49
Fun and Ga Queen doll 9.49
注意:在本例中我們使用到了完全限定列名,這是因為 vend_id 在兩個表中都存在,為了避免引用的列可能出現歧義,必須使用完全限定列名。
WHERE 的作用:
在聯結兩個表時,實際上要做的就是將第一表中的每一行與第二個表中的每一行配對。WHERE 子句作為過濾條件,只包含那些匹配給定條件的行。沒有 WHERE 子句,第一個表中的每一行將于第二個表中的每一行配對,而不管它們邏輯上能否配在一起,也就是所謂的笛卡兒積,這在后面會做介紹。
根據前面關于內聯結的解釋圖,我們也可以畫出 Vendors 和 Products 的內聯結圖,如下所示:
兩個表的內聯結除了使用 WHERE 子句外,還可以使用 INNER JOIN,如下所示:
輸入:
SELECT vend_name, prod_name, prod_price
FROM Vendors INNER JOIN Products
ON Vendors.vend_id = Products.vend_id;
輸出:
vend_name prod_name prod_price
---------- ----------------- ----------
Bears R Us 8 inch teddy bear 5.99
Bears R Us 12 inch teddy bea 8.99
Bears R Us 18 inch teddy bea 11.99
Doll House Fish bean bag toy 3.49
Doll House Bird bean bag toy 3.49
Doll House Rabbit bean bag t 3.49
Doll House Raggedy Ann 4.99
Fun and Ga King doll 9.49
Fun and Ga Queen doll 9.49
結果與使用 WHERE 子句的方式一致。
此語句中的 SELECT 與前面的 SELECT 語句相同,但 FROM 子句不同。這里,兩個表之間的關系是以 INNER JOIN 指定的部分 FROM 語句。在使用這種語法時,聯結條件用特定的 ON 子句而不是 WHERE 子句給出。傳遞給 ON 的實際條件與傳遞給 WHERE 的相同。
至于選用哪種語法,答案是都可以。ANSI SQL規范首選 INNER JOIN 語法。
如果我們需要聯結2張以上的表格時,使用 WHERE 子句的方式會比使用 INNER JOIN 的方式簡便很多。我們以子查詢的例子為例:列出訂購商品 RGAN01 的所有顧客。使用子查詢的語句如下:
SELECT cust_name, cust_contact
FROM Customers
WHERE cust_id IN (SELECT cust_id
FROM Orders
WHERE order_num IN (SELECT order_num
FROM OrderItems
WHERE prod_id = 'RGAN01'));
對于這個問題,我們使用聯結表的方式同樣可以解決:
輸入:
SELECT cust_name, cust_contact
FROM Customers, Orders, OrderItems
WHERE Customers.cust_id = Orders.cust_id
AND Orders.order_num = OrderItems.order_num
AND prod_id = 'RGAN01';
輸出:
cust_name cust_contact
---------- ------------------
Fun4All Denise L. Stephens
The Toy St Kim Howard
可以看到輸出和使用子查詢的結果是一樣的。當然這道題也可以使用 INNER JOIN 的方式解決,不過由于 INNER JOIN 每次只能聯結一個表的關系,所以并不是很方便,命令如下所示:
SELECT cust_name, cust_contact
FROM Customers INNER JOIN (
Orders INNER JOIN OrderItems
ON Orders.order_num = OrderItems.order_num
AND prod_id = 'RGAN01')
ON Customers.cust_id = Orders.cust_id;
最終得到的輸出結果也是一樣的。
4. 交叉聯結
如果兩個表之間沒有通過任何方式相連,那么 SELECT 會產生一種更為基礎的聯結——交叉聯結,也成為笛卡兒積聯結。它是強制的幾乎毫無意義的聯結,即使第一個表中的所有行與第二個表中的所有行聯合起來。例子如下:
輸入:
SELECT vend_name, prod_name, prod_price
FROM Vendors, Products;
輸出:
vend_name prod_name prod_price
---------- ----------------- ----------
Bears R Us 8 inch teddy bear 5.99
Bears R Us 12 inch teddy bea 8.99
Bears R Us 18 inch teddy bea 11.99
Bears R Us Fish bean bag toy 3.49
Bears R Us Bird bean bag toy 3.49
......
Jouets et 8 inch teddy bear 5.99
Jouets et 12 inch teddy bea 8.99
Jouets et 18 inch teddy bea 11.99
Jouets et Fish bean bag toy 3.49
Jouets et Bird bean bag toy 3.49
Jouets et Rabbit bean bag t 3.49
Jouets et Raggedy Ann 4.99
Jouets et King doll 9.49
Jouets et Queen doll 9.49
從結果可以看出,FROM 在缺省的條件下產生交叉聯結,Products 中每一行都與 Vendors 的所有行組合在一起,更為關鍵的是,行之間不存在關系,也沒有聯結條件,它們僅僅是簡單地組合在一起。
在實際使用時,我們應當避免交叉聯結。因為我們往往不需要從一個表的行跨到另一表的每一行。
5. 外聯結
一般情況下,內聯結已經足以滿足我們對聯結的需求了。但是在某些情況下,我們需要在結果中包含那些沒有關聯行的那些行,這時候,內聯結就無能為力了,此時我們就需要用到外聯結。外聯結可以用于解決以下問題:
- 對每個顧客下的訂單進行計數,包括那些至今尚未下訂單的顧客;
- 列出所有產品以及訂購數量,包括沒有人訂購的產品;
- 計算平均銷售規模,包括那些至今尚未下訂單的顧客。
上述例子的聯結中均包含了相關表中沒有關聯行的行。這種聯結稱為外聯結。
注意:
在SQL中,聯結可分為左外聯結、右外聯結和全外聯結。目前 SQLite 不支持右外聯結和全外聯結。
下面我們使用一個內聯結,檢索所有顧客及其訂單:
輸入:
SELECT Customers.cust_id, Orders.order_num
FROM Customers INNER JOIN Orders
ON Customers.cust_id = Orders.cust_id;
輸出:
cust_id order_num
---------- ----------
1000000001 20005
1000000003 20006
1000000004 20007
1000000005 20008
1000000001 20009
接下來使用外聯結,檢索包括沒有訂單顧客在內的所有顧客,如下所示:
輸入:
SELECT Customers.cust_id, Orders.order_num
FROM Customers LEFT OUTER JOIN Orders
ON Customers.cust_id = Orders.cust_id;
輸出:
cust_id order_num
---------- ----------
1000000001 20005
1000000001 20009
1000000002 NULL
1000000003 20006
1000000004 20007
1000000005 20008
可以看到外聯結和內聯結的使用是非常相似的,只是在關鍵字上左外聯結使用到的是 LEFT OUTER JOIN 而內聯結使用到的是 INNER JOIN。從結果中我們也可以看出,外聯結的輸出包括了沒有訂單的顧客 1000000002。
雖然 SQLite 不支持右外聯結和全外聯結,但是這兩種外聯結的方式都可以有替代的方法。右外聯結其實可以直接使用左外聯結進行替換,畢竟只需要將兩個表的位置互換即可;而全外聯結則可以使用左外聯結+右外聯結+復合查詢的形式替換。
6. 自然聯結
自然聯結實際上是內聯結的另一種形式。它會通過表中共有的字段名稱將兩個表聯結起來。自然聯結派出多次出現,使每個列只返回一次。
完成這項工作的思路是通過對一個表使用通配符而對其它表的列使用明確的子集完成的。例子如下:
輸入:
SELECT C.*, O.order_num, O.order_date,
OI.prod_id, OI.quantity, OI.item_price
FROM Customers C, Orders O, OrderItems OI
WHERE C.cust_id = O.cust_id
AND OI.order_num = O.order_num
AND prod_id = 'RGAN01';
輸出:
cust_id cust_name cust_address cust_city cust_state cust_zip cust_country cust_contact cust_email order_num order_date prod_id quantity item_price
---------- ---------- ------------------- ---------- ---------- ---------- ------------ ------------------ --------------------- ---------- ---------- ---------- ---------- ----------
1000000004 Fun4All 829 Riverside Drive Phoenix AZ 88888 USA Denise L. Stephens dstephens@fun4all.com 20007 2012-01-30 RGAN01 50 4.49
1000000005 The Toy St 4545 53rd Street Chicago IL 54545 USA Kim Howard NULL 20008 2012-02-03 RGAN01 5 4.99
在 SELECT 語句中我們使用到了別名,在后面會對它進行介紹。
三、名稱和別名
SQL 允許對表名起別名。這樣做有兩個主要理由:
- 縮短 SQL 語句。
- 允許在一條 SELECT 語句中多次使用相同的表。
假設一種場景:在使用聯結時,我們需要聯結兩個表中相同名稱的字段,為了不產生歧義,我們需要使用完全限定列名。如果表名比較長的話,這會相當痛苦,此時我們可以考慮使用別名。
看一個例子:
SELECT cust_name, cust_contact
FROM Customers, Orders, OrderItems
WHERE Customers.cust_id = Orders.cust_id
AND OrderItems.order_num = Orders.order_num
AND prod_id = 'RGAN01';
如果使用別名,它可以縮短一些:
SELECT cust_name, cust_contact
FROM Customers C, Orders O, OrderItems OI
WHERE C.cust_id = O.cust_id
AND OI.order_num = O.order_num
AND prod_id = 'RGAN01';
在這里我們將 Customers、Orders 和 OrderItems 分別起別名為 C、O 和 OI,這樣在使用完全限定列名的時候會縮短一些語句長度。
使用別名的另一個動機是自聯結的時候。我們考慮下面一個問題:要給與 Jim Jones 同一公司的所有顧客發送一封郵件。這個問題需要兩步:
- 找出 Jim Jones 工作的公司
- 找出在該公司的顧客
我們可以使用子查詢來解決:
輸入:
SELECT cust_id, cust_name, cust_contact
FROM Customers
WHERE cust_name = (SELECT cust_name
FROM Customers
WHERE cust_contact = 'Jim Jones');
輸出:
cust_id cust_name cust_contact
---------- ---------- ------------
1000000003 Fun4All Jim Jones
1000000004 Fun4All Denise L. St
根據前面的經驗,能由子查詢解決的問題往往也能用聯結的方式解決,由于要使用自聯結,為了避免列名混淆,我們必須使用別名:
輸入:
SELECT c1.cust_id, c1.cust_name, c1.cust_contact
FROM Customers c1, Customers c2
WHERE c1.cust_name = c2.cust_name
AND c2.cust_contact = 'Jim Jones';
輸出:
cust_id cust_name cust_contact
---------- ---------- ------------
1000000003 Fun4All Jim Jones
1000000004 Fun4All Denise L. St
可以看到,輸出結果與使用子查詢是一致的。
四、組合/復合查詢
為了統一名稱下面同一稱為組合查詢。它使用到了 UNION、INTERSECT 和 EXCEPT 操作符。
1. UNION
UNION 用于將多條 SELECT 語句組合成一個結果集。有三種情況會用到 UNION:
- 在一個查詢中從不同的表返回結構數據。
- 對一個表執行多個查詢,按一個查詢返回數據。
- 對于 SQLite 中,組合查詢還會用在全外聯結上。
例子:假如需要 Illinois、Indiana 和 Michigan 等美國幾個州的所有顧客的報表,還想包括不管位于哪個州的所有的 Fun4All。我們可以使用 UNION 來完成:
輸入:
SELECT cust_name, cust_contact, cust_email
FROM Customers
WHERE cust_state IN('IL', 'IN', 'MI')
UNION
SELECT cust_name, cust_contact, cust_email
FROM Customers
WHERE cust_name = 'Fun4All';
輸出:
cust_name cust_contact cust_email
---------- ------------------ ---------------------
Fun4All Denise L. Stephens dstephens@fun4all.com
Fun4All Jim Jones jjones@fun4all.com
The Toy St Kim Howard NULL
Village To John Smith sales@villagetoys.com
當然這個要求我們也可以只使用 WHERE 來完成:
SELECT cust_name, cust_contact, cust_email
FROM Customers
WHERE cust_state IN('IL', 'IN', 'MI')
OR cust_name = 'Fun4All';
得到的輸出是相同的。在這個例子中 UNION 沒有體現出它的優勢,但是對于較復雜的過濾條件或者從多個表中檢索數據的情形,使用 UNION 處理可能會更為簡單。
最后我們示范下用 UNION 實現全外聯結。我們使用之前左外聯結使用的例子即可,下面是左外聯結的輸入:
輸入:
SELECT C.cust_id, O.order_num
FROM Customers C LEFT OUTER JOIN Orders O
ON C.cust_id = O.cust_id;
輸出:
cust_id order_num
---------- ----------
1000000001 20005
1000000001 20009
1000000002 NULL
1000000003 20006
1000000004 20007
1000000005 20008
右外聯結的輸入:
輸入:
SELECT C.cust_id, O.order_num
FROM Orders O LEFT OUTER JOIN Customers C
ON C.cust_id = O.cust_id;
輸出:
cust_id order_num
---------- ----------
1000000001 20005
1000000003 20006
1000000004 20007
1000000005 20008
1000000001 20009
全外聯結的輸入:
輸入:
SELECT C.cust_id, O.order_num
FROM Customers C LEFT OUTER JOIN Orders O
ON C.cust_id = O.cust_id
UNION
SELECT C.cust_id, O.order_num
FROM Orders O LEFT OUTER JOIN Customers C
ON C.cust_id = O.cust_id;
輸出:
cust_id order_num
---------- ----------
1000000001 20005
1000000001 20009
1000000002 NULL
1000000003 20006
1000000004 20007
1000000005 20008
UNION 的使用需要遵循以下規則:
- UNION 必須由兩條或兩條以上的 SELECT 語句組成,語句之間用關鍵字 UNION 分隔。
- UNION 中的每個查詢必須包含相同的列、表達式或聚集函數,但各個列不需要以相同的次序出現。
- 列數據類型必須兼容:類型不必完全相同,但必須是DBMS可以隱含轉換的類型。
UNION 使用的一些注意事項:
- UNION 從查詢結果集中自動去除了重復的行,這是 UNION 的默認行為,如果不想取消默認行的話,可以使用 UNION ALL。
- 在使用 UNION 組合查詢時,只能使用一條 ORDER BY 子句,它必須位于最后一條 SELECT 語句之后。
2. INTERSECT
INTERSECT 操作輸入兩個關系 A 和 B,選擇那些既在結果 A 也在 B 的行,例子如下所示:
輸入:
SELECT cust_name, cust_contact, cust_email
FROM Customers
WHERE cust_state IN('IL', 'IN', 'MI')
INTERSECT
SELECT cust_name, cust_contact, cust_email
FROM Customers
WHERE cust_name = 'Fun4All';
輸出:
cust_name cust_contact cust_email
---------- ------------ ------------------
Fun4All Jim Jones jjones@fun4all.com
可以看出客戶既滿足位于 Illinois、Indiana 和 Michigan 這三個州又是是 Fun4All 的結果就只有一條了。INTERSECT 的使用限制和 UNION 基本類似。
3. EXCEPT
EXCEPT 操作輸入兩個關系 A 和 B,找出所有在 A 但不在 B 的行。這個操作符使用比較少,因為通過聯結也同樣可以得到相同的結果。例子如下:
輸入:
SELECT cust_name, cust_contact, cust_email
FROM Customers
WHERE cust_state IN('IL', 'IN', 'MI')
EXCEPT
SELECT cust_name, cust_contact, cust_email
FROM Customers
WHERE cust_name = 'Fun4All';
輸出:
cust_name cust_contact cust_email
------------- ------------ ----------
The Toy Store Kim Howard NULL
Village Toys John Smith sales@vill
可以看到結果輸出符合我們的描述。而 EXCEPT 操作符的限制也與 UNION 的限制基本一致。
五、條件結果
CASE 表達式允許在 SELECT 語句中處理各種情況,它有兩種形式:接收靜態值和表達式中有 WHEN 的情況。
1. 接收靜態值
這是 CASE 表達式中最簡單的一種情況,它的形式如下所示:
CASE value
WHEN x THEN value_x
WHEN y THEN value_y
WHEN z THEN value_z
ELSE default_value
END
我們通過一個簡單示例來了解它的使用:
輸入:
SELECT prod_name || CASE vend_id
WHEN 'BRS01' THEN '--BRS01'
WHEN 'DLL01' THEN '--DLL01'
WHEN 'FNG01' THEN '--FNG01'
ELSE NULL
END AS CONCAT
FROM Products;
輸出:
CONCAT
------------------------
8 inch teddy bear--BRS01
12 inch teddy bear--BRS0
18 inch teddy bear--BRS0
Fish bean bag toy--DLL01
Bird bean bag toy--DLL01
Rabbit bean bag toy--DLL
Raggedy Ann--DLL01
King doll--FNG01
Queen doll--FNG01
這個 SELECT 語句將 prod_name 和 vend_id 進行拼接后輸出,通過 CASE 語句對 vend_id 的值進行判斷然后拼接上不同的字符串,這就是靜態 CASE 的大致用法。
2. 表達式中有WHEN的情形
這種情形下的形式如下所示:
CASE
WHEN condition1 THEN value1
WHEN condition2 THEN value2
WHEN condition3 THEN value3
ELSE default_value
END
同樣通過一個簡單的例子展示它的使用:
輸入:
SELECT vend_id, (SELECT
CASE
WHEN COUNT(*) > 3 THEN 'High'
WHEN COUNT(*) = 3 THEN 'Moderate'
WHEN COUNT(*) < 3 THEN 'Low'
ELSE NULL
END
FROM Products
WHERE P.vend_id = vend_id) AS Frequency
FROM Products P
GROUP BY vend_id;
輸出:
vend_id Frequency
---------- ----------
BRS01 Moderate
DLL01 High
FNG01 Low
在這個例子中,我們統計出 vend_id 在表格中的出現頻率,然后根據大于、等于、小于 3 將頻率等級劃分為 High、Moderate 和 Low。
參考
《SQLite權威指南》
- 第3章 sqlite中的sql
《SQL必知必會》
- 第11課 使用子查詢
- 第12課 聯結表
- 第13課 使用高級聯結
- 第14課 組合查詢
本文中的例子均來自《SQLite必知必會》,圖片來源《SQLite權威指南》,轉載請注明出處!
希望這篇文章對你有所幫助~
智能推薦
Qt學習筆記之SQLITE數據庫
1. SQLite數據庫介紹 SQLite,是一款輕型的數據庫,是遵守ACID的關系型數據庫管理系統,它包含在一個相對小的C庫中。它是D.RichardHipp建立的公有領域項目。它的設計目標是嵌入式的,而且已經在很多嵌入式產品中使用了它,它占用資源非常的低,在嵌入式設備中,可能只需要幾百K的內存就夠了。它能夠支持Windows/Linux/Unix等等主流的操作系統,同時能夠跟很多程序語言相結合...
SQLite學習筆記1 - 源碼編譯&基本操作
一、環境配置 操作系統:Windows10 下載地址: windows環境下載zip版本: 二、編譯 根據官網說明來操作 cmd中輸入cl shell.c sqlite3.c -Fesqlite3.exe 創建一個aaa.db數據庫,創建表test 插入三條數據 插入三條數據 設置列的模式顯示 三、使用vs編寫數據庫操作 創建一個控制臺項目,sqlite3.c和sqlite3.h 作為源文件添加到...
SQLite數據庫存儲(一)【安卓學習筆記】
對于MODE_PRIVATE,MODE_APPEND兩種模式,對寫文件的影響有什么不同? MODE_PRIVATE:該文件只能被當前程序讀寫,會把原來的內容覆蓋掉 MODE_APPEND:該文件的內容可追加,不會把原來的內容覆蓋掉,新寫的內容追加在文件后面 但是對于修改文件中的部分內容,應該怎么做呢?這就需要我們用到SQLite數據庫 主要內容: 創建和打開一個SQLite 數據庫 SQLite數...
react native學習筆記17——存儲篇(2)SQLite
前言 對于存放數據量小且簡易的數據我們可以通過AsyncStorage來存儲,但對于數據結構復雜、數據量大的數據,我們可以使用移動開發中常用的SQLite來處理。 SQLite是一種輕型的數據庫,多用于移動端開發,在原生應用開發中比較常見。 使用 React Native并沒有提供使用sqlite的組件,我們可以通過使用第三方組件react-native-sqlite來使用原生的SQLiteDat...
DC學院學習筆記 (十):SQLite及MongoDB
學習了這一課,了解到除了mysql還有其他的數據庫,除了SQL還有nosql如moggoDB。 SQLite 最常用的情景是在手機或桌面的應用程序。 特點 從名字就可以看出是一個輕量級的數據庫 文件型數據庫 常用于應用程序存儲數據,比如瀏覽器存儲用戶的資料等 GUI: DB Browser for SQLite;訪問SQLite就是訪問一個文件,使用這個前端的程序來訪問 Python:import...
猜你喜歡
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壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...