D-LAB Python X 使用者體驗設計

Pyladies Taiwan

Speaker : Mars

2016/12/22

Roadmap

  • 資料庫種類
  • SQLite 入門
  • SQL 語法說明
  • 分組討論

資料庫 Database

為什麼要用資料庫?

可以隨心所欲的做CRUD,純粹用檔案IO沒有辦法做到!

  • Create 新增資料
  • Read 得到資料
  • Update 更新資料
  • Delete 刪除資料

資料庫種類

  • 關聯式資料庫
  • 非關聯式資料庫

關聯式資料庫 Relation Database

  • MySQL:免費、開源性質、常應用於Web
  • PostgreSQL:免費、開源、常應用於企業事務
  • MSSQL:Microsoft SQL Server,only on Windows,花錢就能買的完整方案。
  • SQLite:基於文件的資料庫,不需要架設伺服器,就能處理各種類數據。

MySQL MongoDB
Database Database
Table Collection
Record/Row Document
Column Field

非關聯式資料庫 NoSQL

  • MongoDB

SQLite 入門

DB Browser for SQLite

Download: http://sqlitebrowser.org/

Coding Time - 基礎設置

  • 1)下載並安裝好 DB Browser for SQLite,開啟軟體
  • 2)開啟 SQL Log

Coding Time - 建立資料

  • 3)新增資料庫 New DataBase
    • 檔名是DB名稱
    • 會跳出一個「編輯資料表定義 Edit table definition」,先按Cancel
  • 4)新建資料表 Create Table
    • Table名稱是user
    • Column有:
      • sn:視為編號,是整數(INTEGER),讓系統自動計數(AUTOINCREMENT)
      • name:名字,是字串(TEXT)
      • year:年資,有小數(REAL)
  • 5)新建紀錄 New Record (Broese Data > Table 選擇 剛建立的 user)
  • 6)儲存(Command/Ctrl + S)

    user

    sn name year
    1 Mars 1.5
    2 Bruce 1.3
    3 Coffie 0.8
    4 Jun 0.5
    5 Byron 0.5
    6 Bruce 0.3

Coding Time - SQL Log

  • SQL Log 應該出現不少紀錄,可以用「清除 Clear」把之前的記錄清掉
  • 仔細觀察在New Record、更改Record資料時SQL Log分別顯示什麼!
  • 可以用用看「過濾 Filter」功能,觀察SQL Log
    • 如果沒有反應,記得要儲存後,將軟體關掉,「打開資料庫 Open Database」開啟剛才的檔案
  • 把這些SQL Log丟到「Execute SQL」看看會發生什麼事情!

SQL 語法說明

加入新資料 Insert

INSERT INTO `user`(`sn`,`name`,`year`) VALUES (NULL,'Mars',1.5);
  • user:Table名稱
  • snnameyear:Column名稱
  • 'Mars',1.5:分別對應name,year的值
  • 字串要用單引號或雙引號包起來

更新已有資料 Update

UPDATE Table名稱 SET Column=新值 WHERE Column條件  

UPDATE `user` SET `year`=0.6 WHERE `sn`=2
UPDATE `user` SET `year`=`year`+0.2 WHERE `year`<1 and `name`='Bruce'
  • SET 後可接很多個要更新的Column,以,隔開
  • WHERE 後是條件,可接很多個條件,以andor串接條件

    user

    sn name year
    1 Mars 1.5
    2 Bruce 1.3=>0.6
    3 Coffie 0.8
    4 Jun 0.5
    5 Byron 0.5
    6 Bruce 0.3=>0.5

刪除已有資料 Delete

DELETE FROM Table名稱 WHERE Column條件  

DELETE FROM `user` WHERE `sn`=2
  • WHERE 後是條件,可接很多個條件,以andor串接條件

搜尋資料 Select

SELECT Column FROM Table名稱 WHERE Column條件  

SELECT `sn`,`name` FROM `user` WHERE `sn`=1
SELECT `sn`,`name` FROM `user` WHERE `name` LIKE '%B%'
  • SELECT 後可接很多個要選擇的Column,以,隔開
    • SELECT *可以選擇所有欄位
  • WHERE 後是條件,可接很多個條件,以andor串接條件
  • LIKE 是用來比對字串的
    • %B%:B有出現在name中(小寫b也算)
      • %B 以B結尾
      • B% 以B開頭

user-badminton

sn name year date money
1 Mars 1.5 2016-10-21 90
2 Mars 1.5 2016-10-24 75
3 Bruce 1.3
4 Coffie 0.8 2016-10-24 75
5 Jun 0.5 2016-10-24 75
6 Byron 0.5 2016-10-24 75
7 Bruce 0.3 2016-10-24 75

user

sn name year
1 Mars 1.5
2 Bruce 1.3
3 Coffie 0.8
4 Jun 0.5
5 Byron 0.5
6 Bruce 0.3

badminton

sn user_sn date money
1 1 2016-10-21 90
2 1 2016-10-24 75
3 3 2016-10-24 75
4 4 2016-10-24 75
5 6 2016-10-24 75
6 5 2016-10-24 75

進階搜尋資料 Inner Join

SELECT Column FROM Table1名稱
INNER JOIN Table2名稱 ON Table1的Column = Table2的Column
WHERE Column 條件


SELECT * FROM `user` 
INNER JOIN `badminton` ON `user`.`sn` = `badminton`.`user_sn`
WHERE `user`.`sn`=1;
  • ON 後是條件,可接很多個條件,以andor串接條件
  • 遇到同名的Column,前面要加上Table名稱
  • SELECT以及WHERE的Column可以兩個Column混用

user

sn name year
1 Mars 1.5
2 Bruce 1.3
3 Coffie 0.8
4 Jun 0.5
5 Byron 0.5
6 Bruce 0.3

badminton

sn user_sn date money
1 1 2016-10-21 90
2 1 2016-10-24 75
3 3 2016-10-24 75
4 4 2016-10-24 75
5 6 2016-10-24 75
6 5 2016-10-24 75

來試試設計DB吧!

  • IMDB
  • PTT
  • LOL職業隊伍
  • 外幣匯率

LOL職業隊伍