MySQL基礎

SQL (Structured Query Language) 結構化查詢語言,是一種資料庫語言標準,但各種不同的 (RDBMS 關聯式資料庫管理系統) 都對 SQL 作了修改和擴充,所以彼此不能相容。

例如:MySQL 就是一種 RDBMS。 RDBMS 把資料存在列跟行組成的 table(表格) 裡,然後可以去運用。

為了容易辨識,程式語法的部分用大寫表示比較好。 在一開始什麼都沒有的時候必須先創建資料庫

CREATE DATABASE `MyDatabase`

先建個資料庫 MyDatabase
再建個 FriendList 資料表

CREATE TABLE `FriendList` ( 
`ID` bigint(20) NOT NULL  AUTO_INCREMENT, 
`Name`varchar(30) NOT NULL, 
`Sex`varchar(10) NOT NULL, 
`Age`bigint(10) DEFAULT NULL, 
PRIMARY KEY(`ID`) 
) ENGINE=InnoDB DEFAULT charset=utf8 AUTO_INCREMENT =1 
ID Name Sex Age
1 林承澤 24
2 林澤澤 23
3 林小澤 22

除了宣告 TABLE 的名稱外,
再來就是宣告 TABLE 裡面各個元素、包括型別大小還有一些特殊的描述

bigint 是大整數、 varchar 是字串,後面的數字則表示資料長度,在知道長度的條件下最好宣告能小則小,會比較省空間跟效能

NOT NULL 宣告這格不能空著,也有 DEFAULT NULL 預設空白的宣告方式

AUTO_INCREMENT 則用來自動遞增,後面有

AUTO_INCREMENT =1 

表示每次遞增一

遞增的元素通常拿來當做 id 和主鍵 (PRIMARY KEY)
這個值在表中一定是獨一無二的,用來區分資料

ENGINE=InnoDB

表示這是事務用的引擎

—————

在運作資料庫的時候最常用的莫過於 新增、移除、查詢、更新
就是接下來要提到的這幾個函式

—————

*SELECT 查詢
其中一種

SELECT 列名稱 FROM 表名稱

// 在表中查詢 Age 欄位
SELECT Age FROM FriendList

查詢多種的話用 , 分隔

SELECT 欄位名稱1, 欄位名稱2, 欄位名稱3 FROM 表名稱

// 在表中查詢 Name, Sex, Age 三個欄位
SELECT Name, Sex, Age FROM FriendList

查詢全部

SELECT * FROM 表名稱

// 查詢整個表,如果沒必要儘量不要這樣用效率會更好
SELECT * FROM FriendList

—————-
*INSERT INTO  插入新資料
插入一筆完全的資料

INSERT INTO 表名稱 VALUES (值1, 值2,....)

// 插入 新的一行 Name = '林大澤', Sex = '男', Age = 24
INSERT INTO FriendList VALUES ('林大澤', '男', 24)

插入一筆只有某些欄位的資料,其他不填的欄位必須要是 DEFAULT NULL

INSERT INTO (欄位名稱1, 欄位名稱2, ... ) VALUES (值1, 值2,....)

// 插入 新的一行 Name = '林大澤', Sex = '男'
INSERT INTO (Name, Sex) VALUES ('林大澤', '男')

—————
*UPDATE  改原本的資料

– 修改一個欄位

UPDATE 表名稱 SET 欄位名稱 = 新的值 WHERE 某個欄位名稱 = 某個值

// 把林小澤年齡改成 18
UPDATE FriendList SET Age = 18 WHERE Name = '林小澤'

– 修改多個欄位

UPDATE 表名稱 SET 欄位名稱1 = 新的值1, 欄位名稱2 = 新的值2 WHERE 某個欄位名稱 = 某個值

// 把男生都改成叫做 都是澤
UPDATE FriendList SET Age = 18, Name = '都是澤' WHERE Sex = '男'

*DELETE  刪除資料

刪除一行資料

DELETE FROM 表名稱 WHERE 欄位名稱 = 值

// 刪掉年齡 23 的資料
DELETE FROM FriendList WHERE Age = 23

刪除所有資料

DELETE FROM 表名稱 

// 刪掉整個表中的資料
DELETE FROM FriendList

———

要連結構都刪掉可以用 DROP

DROP TABLE 表名稱

// 刪掉整個表
DROP TABLE FriendList
DROP DATABASE 資料庫名稱

// 刪掉整個資料庫
DROP DATABASE MyDatabase

——-

前面說完了創建資料庫表、刪掉資料庫表的過程,還有最常用的SELECT、INSERT、UPDATE、DELETE

SQL 其實還有很多不同的函式
包括修改原始資料庫、資料表設定的 ALTER、覺得名稱太長可以縮寫的 ALIAS
還有各種函數 算平均的avg() 、算合計的sum()、找最大值的max()、找最小值min()、用來統計一樣的名稱的GROUP BY等等的數學統計常用函式

最後在敘述一下 WHERE條件中的敘述、ORDER BY、LEFT JOIN

——–

WHERE 用來當作執行條件,常被放在 SELECT、UPDATE、DELETE 後面
其中有很多延伸的用法

AND :條件都要符合

SELECT 欄位名稱 FROM 表名稱 WHERE 欄位名稱1 = 值1 AND 欄位名稱2 = 值2

// 在表中查詢 23歲的男生
SELECT Name FROM FriendList WHERE Sex = '男' AND Age = 23

OR :其中一個符合就好

SELECT 欄位名稱 FROM 表名稱 WHERE 欄位名稱1 = 值1 OR 欄位名稱2 = 值2

// 在表中查詢 是男生 或是23歲的人
SELECT Name FROM FriendList WHERE Sex = '男' OR Age = 23

BETWEEN:兩個數值中間的範圍

SELECT 欄位名稱 FROM 表名稱 WHERE 欄位名稱 BETWEEN 值1 AND 值2 

// 在表中查詢 21到23歲的人 
SELECT Name FROM FriendList WHERE Age BETWEEN 21 AND 23

—————-

ORDER BY
排序

SELECT 欄位名稱 FROM 表名稱 ORDER BY 欄位名稱1 排序方式, 欄位名稱2 排序方式..

// 年齡由小排到大、名字由大排到小
SELECT * FROM FriendList ORDER BY Age DESC, Name ASC

DESC:從小排到大
ASC    :從大排到小

—————–

最後一個也是很常用的多表合併查詢  JOIN

其中 LEFT JOIN 是以左表為主的查詢,即便右表完全沒有匹配的也會回傳左表

ID Name Sex Age
1 林承澤 24
2 林澤澤 23
3 林小澤 22

訂單表 Orders

ID CustomerID Price
1 1 1300
2 1 590000
3 3 89999922
SELECT 表名稱1.欄位名稱1, 表名稱1.欄位名稱2, 表名稱2.欄位名稱3 FROM 表1
LEFT JOIN 表2
ON 表1.某欄位名稱=表2.某欄位名稱
ORDER BY 某表.某欄位名稱

// 查詢 FriendList.ID 等於 Orders.CustomerID 的資料
SELECT FriendList.Name, FriendList.Age, Orders.Price FROM FriendList
LEFT JOIN Orders
ON FriendList.ID=Orders.CustomerID
ORDER BY FriendList.Name

—————–

參考資料:
http://www.w3school.con.cn/sql

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s