Note: MySQL語法(一)

Michael Hwang
4 min readMay 10, 2019

只是個筆記而已。
基本上都是重點擷取這一系列文章-> http://www.codedata.com.tw/database/mysql-tutorial-getting-started

以下一切範例將以安裝完成時內建的資料庫”world”為目標。

第一節以資料的查詢,或說指定為主。

查詢敘述:

擷取資料時必用的敘述,你的資料在哪、篩選條件等等都在這邊。
分為:
SELECT 欄位
FROM 表格
WHERE 條件
GROUP BY 分組條件
HAVING 分組條件
ORDER BY 排序設定
LIMIT 限制設定
#當有多項條件須設定時,須按照上面的順序使用,不然會報錯。
#所有查詢都從SELECT開始
#若是需要指定資料庫,則額外使用USE指令

EX:
USE world
SELECT * # * 表示全部
FROM country
WHERE Continent = “Asia”

Select

所有查詢都從這邊開始,指定想要的資料欄位。也可以在這邊進行簡單運算或是使用函數(太多了預計額外篇章),並命名新欄位(用as連接,但也可以不加)。
EX:
SELECT Population/1000 as Population_k
也可以設定是否回傳重複資料,使用 SELECT [ ALL| DISTINCT ] …,不過預設是ALL值回傳全部。

在這塊也能加入函數,這邊便以最具代表的IF為例
EX:
SELECT IF(LifeExpectancy> 65,”developed”,”developing”) AS lifesector
from country

若是有多種條件,則建議使用CASE:
EX:

SELECT Name,Continent,
CASE Continent
WHEN “Asia” THEN “AS”
WHEN “Europe” THEN “EU”
WHEN “North America” THEN “NA”
WHEN “South America” THEN “SA”
WHEN “Africa” THEN“AF”
WHEN “Oceania” THEN“OA”
WHEN “Antarctica” THEN“AN”
END ContinentCode
FROM country

Order by 排序

將回傳的資料按照條件,默認按照"自然"且遞增(ASC)的排序。
ORDER BY {colname|experssion|} [ASC|DESC] [,…]
#可有多個順序,例如先按column1排在按column2排序

Limit 限制查詢

限制回傳的紀錄數量。
LIMIT number # 回傳 number筆資料
LIMIT number 1, number 2 #跳過number1筆資料並回傳number2筆

Group by & having — 分組

將所篩選的資料在依照條件分組,例如想知道每洲的國家數量:
SELECT Continent, count(*) amount
FROM country
GROUP BY Continent
#可在進行更細節的分組,只需將條件加在group by後面即可
#可加ASC(預設值)和DESC 作為排序條件
#若是加上 with rollup,則會增加一筆各組總和的資料

若是對群組資料有更進一步的篩選條件,則須加在HAVING後面,因為群組函數(SUM,AVG,MAX,MIN,COUNT)不能加在WHERE上。

JOIN-合併

若有需要兩個table時便需要使用此語法,又分為Inner join和outer join。

Inner Join: 只保留符合條件的資料,兩種寫法
1.
SELECT country.Code, country.Capital, city.Name
FROM country,city
WHERE country.Capital = city.ID
# SELECT 時表格名稱可省略,除非欄名稱重複
#FROM 需呼叫全部使用的表格
#WHERE放入合併條件
2.
SELECT Code,Capital,city.Name
FROM country INNER JOIN city on Capital = ID
#若是以兩表格皆有的欄位合併,則可使用(取代on)USING + 欄位

Outer Join: 不符合條件的資料也希望留下。大致寫法和inner一樣,不過多了left和rigth類別,即以哪邊的表格為主,例如若是left outer join則左邊表格全部項目都會展示出來。

UNION-合併查詢

把多項查詢(SELECT)合併成一個結果,使用UNION串聯即可。
有以下規則:
1. 欄位名稱以第一個為主 2.欄位數量必須一致

--

--