之前實習工作上遇到了DB相關的業務,雖然在資料庫架構設計上PM比較不會接觸,但偶爾還是會碰到要動到資料庫的情境,雖然有像DBever這樣的軟體有UI可以比較好去查看資料庫裡的內容,但是如果要進行提取或是整理DB裡的資料時,就必須要用到SQL語言,所以最近想說來學學SQL語法好了,在Codecademy上剛好有SQL的教學,且可以直接實作,這篇將紀錄整個學習的歷程。
SQL是探討資料庫世界非常重要且適合入門的語法,在Web應用程式開發和資料分析(Data Analytics)都會用上,市面上有許多關聯資料庫(Relational database)可以使用,常見的有:
- SQLite
- MySQL
- PostgreSQL
- MariaDB
- SQL Server
- Oracle Database
- DB2
每個資料庫的語法可能有些許的不同,但基本架構大同小異。
關聯資料庫(Relational Database)
關聯資料庫是一種經過整合成一或多個資料表(table)的資料庫,可以想像成Excel的資料表,每個欄位代表一個屬性,每一列代表一筆資料。下圖為DBeaver(一種視覺化管理資料庫的操作工具)呈現的資料表:
SQL的基本概要
一句完整的SQL語句要包含Keyword關鍵字和資料表(table)名稱和欄位(column)名稱。使用分號;做為結尾,不區分大小寫,用空白做間隔。註解單行為- -,多行註解使用/**/包裹。
- 選取資料庫
SELECT*FROM celebs
SELECT是選擇,分類上屬於DML(Data Manipulation Language),用來查詢指定的資料庫。
*這邊是SQL的特殊用法,用來表示全部的資料表(table),FROM後面接著指定的資料庫,結果就會是顯示該資料庫所有的欄位資料:
2.建立資料表(table)
SELECT * FROM celebs;CREATE TABLE celebs(id INTEGER,name TEXT,age TNTEGER);
第一行一樣是選取指定的資料庫,CREATE TABLE表示建立資料表,後面接資料表的名字,然後括弧內為資料表結構,id 為第一行資料的名稱,INTEGER為該行的資料格式,以此類推。
3.插入資料
INSERT INTO celebs(id, name, age)VALUES (1,’Justin Bieber’, 22);
INSERT INTO表示要插入資料,後面接指定的資料庫,接著括弧內為指定的行,下一行VALUE為要插入的值。
4.修改資料
ALTER TABLE celebsADD COLUMN twitter_handle TEXT;
ALTER TABLE表示修改資料表,後面接指定的資料表,ADD COLUMN表示新增一筆資料,後面分別表示資料名稱和格式。
5.更新資料
UPDATE celebsSET twitter_handle = ‘@taylorswift13’WHERE id=4;
UPDATE 表示更新資料,後面接指定資料庫名稱,SET A=B表示將A藍的資料換成B,下一行是指定條件為 id = 4 的那筆資料。
6.刪除資料
DELETE FROM celebsWHERE twitter_handle IS NULL;
DELETE表示刪除指定的資料庫資料,後面接資料庫名稱,下一行為刪除資料的條件,這裡表示在twitter_handle欄位下為NULL(空值)。
7.限制資料庫
CREATE TABLE awards(id INTEGER PRIMARY KEY,recipient TEXT NOT NULL,award_name TEXT DEFAULT ‘Grammy’);
PRIMARY KEY 表示每一筆資料都是表格中的唯一值(不能新增不同列的值),NOT NULL 表示不允許一欄位含有NULL值,DEFAULT為資料設定預設值,像這邊是預設每個資料為Grammy。