---
# System prepended metadata

title: GDSC SQL介紹

---

GDSC SQL介紹
===
[TOC]

---

## 什麼是SQL？

SQL是大部分數據分析相關職位最必備、最重要的能力，

因應著資料科學浪潮的襲來，開始從商業的運行上重新思索資料驅動的決策機制，造就「以程式處理並分析資料」的相關職缺在就業市場的需求量大增，

其中SQL被資料科學從業人員評為「日常最常使用的語言」的第二名，僅次於 Python。


---

我們今天會簡單介紹ＳＱＬ是什麼


不過首先，我們要先認識資料庫（SQL拿資料的地方）

---

### ✔️ 資料庫

資料庫（database）就是資料(data)的基地(base)

在資料庫出現以前，
我們將資料記在紙上或是檔案裡，
除了容易丟失，
如果資料分散在各地沒有整理乾淨，
要找資料的時候也很麻煩。

隨著電腦開始發展，資料庫出現之後，這個問題被解決了。

有了資料庫，只要先收集資料
並且隨時更新資料的內容，
我們就能在需要的時候立刻取出使用。

如今，我們將重要又大量的資料存到資料庫裡。
大至銀行的存款資訊與交易資訊、小至手機的通話紀錄與通訊錄，背後都有資料庫在運作支撐。

---

### ✔️關聯式資料庫

綜觀電腦發展歷史
可發現資料庫曾出現多種格式
到了現代
則以關連式資料庫這種格式為主流

關聯式資料庫其實在我們的日常生活中隨處可見
e.g.
選課清單
系學生名單
電信帳單
學習歷程

這些很像“excel表格”的資料就是其實就是從關聯式資料庫裡拿出來的

---

### ✔️ 資料庫管理系統

資料庫管理系統全名為 DataBase Management System（DBMS）
有了DBMS，我們不需要處理底層的資料庫的效能、安全等問題，
就能用ＳＱＬ語法拿出我們想要的資料，使資料操作更簡單。
以下是比較常見的關聯式資料庫管理系統：
PostgresSQL（圖1）、ＭySQl（圖2）、Microsoft SQL Server（圖3）


---

❓那如果想要從關聯式資料庫裡拿出我們想要的資料要怎麼做呢？

答案就是使用今天的主角ＳＱＬ！
讓我們來簡單認識ＳＱＬ吧～

---

## SQL介紹

### SQL

SQL是資料科學家與資料庫（Database）溝通的語言

SQL全稱是 Structured Query Language，翻譯後就是結構化查詢語言，是一種資料庫查詢和程
式設計語言，用於存取資料以及查詢、更新和管理關聯式資料庫系統。


### SQL 基礎語法
SELECT "欄位" ：  選擇欄位
FROM "指定的資料表" ：  從指定的資料表
WHERE "條件" ：  設定「篩選條件」以拿出篩選過的資料

---

### ✍️ 來寫一個簡單的SQL吧


先觀察這張關聯式資料表：

資料表名稱： final_score_report（學期成績報表）

| id（學號） | name（姓名） | gender（性別） | score（總成績） |
| --- | --- | --- | --- |
| 108001 | 柯南 | 男 | ９５ |
| 108002 | 炭治郎 | 男 | ５５ |
| 108003 | 珊迪 | 女 | ８７ |
| 108004 | 結衣 | 女 | ７０ |


#### ❓Ｑ１：如果我們想要取得所有女生的名子可以怎麼做？


這邊先直接給答案，再慢慢解釋語法

**SELECT** name
**FROM** final_score
**WHERE** gender=女;



建議大家從FROM開始解析
以下是SQL在收到我們的指令後會做的事（從FROM開始喔）
１．先選擇資料表 ＝＝> FROM final_score_report
２．選擇條件(符合WHERE後面條件的資料列才會留下來喔)＝＝> WHERE gender=女
３．選擇欄位 ＝＝> SELECT name

我們先選擇資料表 final_score_report
接著，因為我們使用WHERE並將條件設成 gender=女
所以我們不會拿到男生的資料．
最後 我們選擇的欄位是 name
所以查詢出來的結果會是這樣：
| name(姓名) |
| --- |
| 珊迪 |
| 結衣 |


---

資料表名稱： final_score_report（學期成績報表）

| id（學號） | name（姓名） | gender（性別） | score（總成績） |
| --- | --- | --- | --- |
| 108001 | 柯南 | 男 | ９５ |
| 108002 | 炭治郎 | 男 | ５５ |
| 108003 | 珊迪 | 女 | ８７ |
| 108004 | 結衣 | 女 | ７０ |

#### ❓Ｑ２：如果我們想要將所有學生的名字列出並用他們的成績從高到低排序可以怎麼做？



前面已經介紹過
**SELECT** 
**FROM**
**WHERE**
的用法了

這邊我們需要使用新的語法才能做到排序

新的語法如下：
**ORDER BY** "排序依據的欄位" **ASC**（升冪）／**DESC**（降冪）

使用方法：
就如它的名字
會將前面選出來的資料根據成績做排序


我們寫出答案：

**SELECT** name
**FROM** final_score
**ORDER BY** score DESC;

執行順序：
１．先選擇資料表 ＝＝> FROM final_score_report
２．選擇欄位 ＝＝> SELECT name
３．根據成績排序（因為要從大排到小，所以我們在最後面加上DESC） ＝＝> ORDER BY score DESC

備註：
撰寫SQL的時候，
單字跟單字之間要用空格隔開，
最後面要記得加上 ; 來告訴資料庫系統我們的ＳＱＬ查詢結束了喔。


最後出來的結果會是這樣：
| name(姓名) |
| --- |
| 柯南 |
| 珊迪 |
| 結衣 |
| 炭治郎 |


---
#### ❓Ｑ３：那如果我們只想看趴哥（男性成績第一名）的名子可以怎麼做呢？

綜合前２題的經驗直接寫出答案：
**SELECT** name
**FROM** final_score
**WHERE** gender=男
**ORDER BY** score
**LIMIT** １;

LIMIT使用方法：
**LIMIT** m：呈現查詢結果的前 m 筆觀測值（寫在最後面,會在最後處理）


以下是我們寫出的SQL的執行順序

SELECT <== 3 ：選擇欄位
FROM <== 1：選擇資料表
WHERE <== 2：選擇條件
ORDER BY <== 4 ：排序
LIMIT <== 5 ：呈現前m筆觀測值


執行結果：
| name(姓名) |
| --- |
| 柯南 |

---
## end

✔️ 本次介紹SQL 基礎語法：

SELECT "欄位" ：  選擇欄位
FROM "指定的資料表" ：  從指定的資料表
WHERE "條件" ：  設定「條件」以拿出篩選過的資料
ORDER BY "欄位名稱"：指定變數來排序呈現查詢結果
LIMIT m：呈現查詢結果的前 m 筆觀測值

---

以上是我們這次關於ＳＱＬ的簡單介紹
如果覺得有興趣，或是對資料工程師抱有好奇，
歡迎來參加我們ＧＤＳＣ在本週三（１０／２７）舉辦的 
資料分析專家講座喔

ＧＤＳＣ也會持續在 Facebook更新社課的資訊，歡迎對資料有興趣的大家持續關注，跟我們交流想法！

---




