SQL學習筆記-認識SQL(1)

Bmo Yang
Life In data
Published in
7 min readDec 23, 2018

學習目標

本次透過學習SQL基礎程式語法,達到能夠自主處理資料表且進行基礎的資料分析,亦能學習到資料庫儲存方式的概念。

SQL(Structured Query Language)

主要使用於管理與處理relational databases的程式語言,且SQL廣泛用於web frameworks與database applications。

Relational Database

在此先簡單介紹relational databases為何,為大家建立資料表的概念。

關聯數據庫是將資料訊息組成或組織到一張或多張表格中,其中Table(資料表),是由列與行所組成的表格。

此處先假設Table有三個欄位,即是列,欄位1是id,欄位2是name,欄位age。

  • 第一列的ID欄位為1
  • 第一列的name欄位為Justin Bieber
  • 第一列的age欄位為22

資料儲存的格式介紹如下:

  • INTEGER:a positive or negative whole number
  • TEXT:a text string
  • DATE:the date formatted as YYYY-MM-DD for the year, month, and day
  • REAL:a decimal value

開始SQL語法介紹

CREATE TABLE

建立一張新的資料表格(table)

CREATE TABLE celebs (
id INTEGER,
name TEXT,
age INTEGER
);

  • SQL中的語法習慣以英文大寫來表示,避免與其他變數名稱搞混,同時讓程式碼具有易讀性。

SQL程式碼解析:

  • CREATE TABLE 資料表名稱
    這個clause允許我們在資料庫中創建一個新的資料表(table)。
    即當你想自創一張資料表時,使用CREATE TABLE celebs就能告訴SQL你要自創一個table且這個table名稱是celebs。
  • (id INTEGER, name TEXT, age INTEGER)
    給定資料表中每一個欄位的名稱與資料型態,eg. id INTEGER 就是說明欄位名稱為id,資料型態是INTEGER。

INSERT

在資料表中插入value

INSERT INTO celebs (id, name, age)
VALUES (1, ‘Justin Bieber’, 22);

  • INSERT 可以新增一列新的資料插入表格中。
  • 當你想新增一筆新的資料到資料表時,就可以使用INSERT。

SQL程式碼解析:

  • INSERT INTO
    這個clause可以新增一筆或多筆的資料到資料表中。
  • (id, name, age)
    欄位名稱,讓SQL可以識別並對應到資料表中的欄位。
  • VALUES (1, ‘Justin Bieber’, 22)
    VALUES是一個clause,可以指示新增一筆或多筆資料所對應欄位為名稱下的值,eq. 範例為新增一筆資料,id為1,name為’Justin Bieber’,age為22。

SELECT

篩選欄位

SELECT name FROM celebs;
SELECT * FROM celebs;

  • SELECT可用來從資料庫中獲取數據,可能是欄位,可能是一筆或多筆資料。

SQL程式碼解析:

  • SELECT
    這個clause告訴SQL你要從資料庫中進行query的動作。
  • name
    通常是一個資料表中的某一個欄位。
  • FROM celebs
    告訴SQL是從資料庫中的哪一張資料表來取得資料。
  • “*”
    “*” 是SQL的特殊符號(special wildcard character)。
    它會選取資料表中的所有欄位,並回傳顯示出來。

ALTER

新增欄位到資料表中

ALTER TABLE celebs
ADD COLUMN twitter_handle TEXT;
SELECT * FROM celebs;

  • ALTER,可以新增一個新的欄位於新的資料表中。
  • 當你想新增一個自創欄位到既有資料表中的話,可以使用ALTER。

SQL程式碼解析:

  • ALTER TABLE
    這個clause可以讓你做一些更改或調整的動作,此處是針對資料表celebs去進行更改。
  • ADD COLUMN
    這個clause可以新增一個新的欄位到資料表中,此處twitter_handle為新增的欄位名稱,而TEXT為欄位的型態。

UPDATE

更新或調整資料表中某一row的某欄位的內容

UPDATE celebs
SET twitter_handle = ‘@taylorswift13’
WHERE id = 4;
SELECT * FROM celebs;

  • UPDATE,可以編輯資料表中的某一row。
  • 當你想調整或編輯既有資料表中的某row紀錄,你可以使用UPDATE。

SQL程式碼解析:

  • UPDATE
    這個clause可以編輯資料表中的row,此處要去更改celebs的某一row。
  • SET
    這個clause可以去辨識你要編輯的是既有資料表中的哪一個欄位,此處要去編輯的欄位名稱是twitter_handle,編輯新增的內容為’@taylorswift13’。
  • WHERE
    這個clause是一個條件式,此處利用id = 4來辨識要去編輯資料表中的哪一row。

DELETE

刪除資料表中的某一row或多row

DELETE FROM celebs
WHERE twitter_handle IS NULL;
SELECT * FROM celebs;

  • DELETE,可以刪除資料表中的紀錄(row)。
  • 當你想刪除既有資料表中的紀錄(row)時,可以使用DELETE。

SQL程式碼解析:

  • DELETE FROM
    這個clause可以讓你從資料表中刪除row,此處要從celebs中刪除某些row。
  • WHERE
    這個clause是依據條件來挑選哪些row是你想刪除的,此處是當資料表中的欄位twitter_handle為空值時(IS NULL),則刪除。
  • IS NULL
    它是一個想回傳真假值的判斷式,當有值,則回傳TRUE,當無值,則回傳FALSE。

Constraints

限制資料表中的欄位設定

CREATE TABLE awards (
id INTEGER PRIMARY KEY,
recipient TEXT NOT NULL,
award_name TEXT DEFAULT ‘Grammy’
);

  • 針對資料表中的欄位設定欄位型態外,同時加入限制。
  • 當有不符合限制的資料要INSERT資料表時,資料表可以拒絕INSERT

SQL程式碼解析:

  • PRIMARY KE
    告訴資料表這個欄位是資料表中的唯一識別欄位,若有相同的識別要INSERT進資料的話,會被拒絕。
  • NOT NULL
    欄位的限制是不能為空值,若有new row是空值的話,會被拒絕。
  • DEFAULT
    欄位的預設內容,若要INSERT的row沒有特別設定值得話,則會預設為預設值。

學習小結

  • SQL is a programming language designed to manipulate and manage data stored in relational databases.
  • A relational database is a database that organizes information into one or more tables.
  • A table is a collection of data organized into rows and columns.
  • A statement is a string of characters that the database recognizes as a valid command.

CREATE TABLE :創造新的資料表。
INSERT INTO :新增new row到資料表。
SELECT :從資料表去query資料。
ALTER TABLE :編輯或調整既有的資料表。
UPDATE :編輯資料表中的row。
DELETE FROM :刪除資料表中的某一row。
Constraints add information about how a column can be used.

學習心得

透過本次學習,我們學習到SQL的概念與基本語法,包含新增表格(CREATE TABLE)、編輯或調整(INSERT INTO、ALTER TABLE、UPDATE)、刪除資料表row(DELETE FROM)。

其中,我們可以將這些基本語法分為三類,如下:
動作:CREATE TABLE、SELECT、INSERT INTO、ALTER TABLE、UPDATE等。
條件:WHERE、Constraints等。
來源:FROM,來源是哪一張資料表。

下一篇SQL學習筆記將會透過本次所學的指令來進行進階練習。

--

--