[PHP+SQL] MySQL 基礎指令表

1. 基礎動作

搜尋資料為 
select 對象欄位 from 資料表
ex:
SELECT * FROM `w02_account`
SELECT player FROM `w02_account`

撈取對象-
*  代表 ALL全部欄位
player 代表 該名為player之欄位

新增
有兩種格式寫法
insert into 資料表(欄位名稱) value 新增內容
選擇想新增資料的欄位名稱及對應輸入的內容
ex:
INSERT INTO `w02_table`(`w02_table_name`, `w02_table_chi`, `w02_table_mat`) VALUES ("阿九",77,88)

insert into 資料表 value 新增內容 (不宣告欄位名稱時對應內容需全部提及,空值為null)
INSERT INTO `w02_table` VALUES (null,"阿十",77,88)

另外,如果要連續多筆新增到同一個資料表,可用逗號分別(多利用排版)
INSERT INTO `w02_table`
(`w02_table_name`, `w02_table_chi`, `w02_table_mat`) VALUES 
("阿八",87,88),
("阿七",77,88),
("阿六",67,88),
("阿五",57,88),
("阿四",47,88),
("阿三",37,88)

修改
update 資料表 set 被修改的欄位名 = 被修改的內容 where 對象欄位 = 值
UPDATE w02_table SET w02_table_mat = 50 WHERE w02_table.w02_table_sn = 10;

刪除
delete from 資料表 (該資料表的全部項目)
"DELETE FROM `w02_table`

delete from 資料表 where 指定的欄位 = 指定的內容
"DELETE FROM `w02_table` WHERE `w02_table`.`w02_table_sn` = 15"

小技巧: 工程師在進行刪除前會先習慣將delete改成select做一個檢查動作,確保選定的資料是否正確後,再改回delete做執行。

2. 條件式操作(適用搜尋、修改、刪除)

where 為判斷對象、判斷方式、判斷內容等等(時間、字串需標記""或'')
判斷方式有 '>'、'<'、'>='、'<='、'<>'、'='共6種,字串只可使用'='、'<>'

ex:
SELECT * FROM `w02_account` WHERE `w02_acc_seq` > 2
SELECT * FROM `w02_account` WHERE `w02_acc_name` = '小白'

可以使用AND與OR做多筆條件
ex:
SELECT * FROM `w02_account` WHERE `w02_acc_name` = '小白' OR 'w02_acc_name' ='小綠'
SELECT * FROM `w02_account` WHERE `w02_acc_seq` > 2 AND w02_acc_name = '小綠'


小技巧:SQL語法的欄位前後使用``是系統預設。" "跟' '是指定向,也可以不輸入前後框號,一來精簡二來可降低資料讀取工作量。只有在單字的字串時才使用" "或' '。

3. 模糊條件操作
like %對象%,而%代表不固定,組合略分三種模式

%A => A結尾的字串
A% => A開頭的字串
%A% = > 字串含A的對象

ex:
SELECT * FROM `w02_account` WHERE w02_acc_id like '%r%'


4. 時間格式  "Y-M-D HH:MM:SS"
資料庫的時間格式是固定的,如果網頁的顯示有所不同,依樣由資料庫的時間撈出來後便化成需要的樣子。
ex: 2018-10-03 =>10-03-2018 (M-D-Y)

5. LIMIT 區間條件 (適用於:搜尋、修改、刪除)
select * from 'class' limit 3
限制只搜尋出3筆資料(依索引順序)
select * from 'class' limit 5,3
限制搜尋第5筆資料(不含)後的3筆資料(依索引順序)

6. 排序 (預設為遞增)
ORDER BY 對象 與 GROUP BY 對象

前者為單純排序,後者為排序時同時群組化(不重複)
select * from 'class' order by 'acc_number'

加上desc則遞減
select * from 'class' order by 'acc_number' desc

如果排序需要參考多組(ex:同分時,採學號遞減)
select * from 'class' order by 'acc_math' desc, 'acc_id' desc

自訂標題名稱 AS

select w02_table_name as  ,w02_table_chi as , w02_table_mat as ,(w02_table_mat+w02_table_chi)/2 as  from w02_table



小節練習
ex1: 搜尋[w02_table_mat] 60以上的[w02_table_name]
SELECT w02_table_name FROM `w02_table` WHERE w02_table_mat >= 60

ex2: 搜尋[w02_table_name]中性別張的[w02_table_name]與[w02_table_cji]
SELECT w02_table_name,w02_table_chi FROM `w02_table` WHERE w02_table_name like '張%'

ex3: 使用語法新增三個學生資料
學生名稱 國文 數學
蘋果 100 100
鳳梨 99 50
檸檬 50 43
INSERT INTO `w02_table` (`w02_table_name`, `w02_table_chi`, `w02_table_mat`) VALUES ('蘋果', 100,100), ('鳳梨', 99, 50), ('檸檬', 50, 43)

ex4: 呈上,數學成績不到60的人,數學自動+10分
UPDATE w02_table SET w02_table_mat=w02_table_mat+10 WHERE w02_table_mat < 60

ex5: 呈上,如果國文成績+10分後會超過100分的同學資料刪除
DELETE FROM `w02_table` WHERE w02_table_chi+10 > 100
or
DELETE FROM `w02_table` WHERE w02_table_chi > 90 (精簡提高效能)

ex6: 搜尋資料表並顯示國文成績最好的三個人[同學名稱]
SELECT w02_table_name FROM w02_table ORDER BY w02_table_chi DESC LIMIT 3

ex7: 搜尋資料表並顯示數學成績第6名的[同學名稱]
SELECT w02_table_name FROM w02_table ORDER BY w02_table_mat DESC LIMIT 5,1

ex8:呈上,顯示平均成績最差的三個人
select w02_table_name as  ,w02_table_chi as , w02_table_mat as , (w02_table_mat+w02_table_chi)/2 as  from w02_table ORDER BY `平均成績` LIMIT 3



留言