MySQL基本指令-資料的新增與查詢

MySQL將指令分成三大項

DDL ( Data Definition Languages ) : 建立資料庫、Table和格式、索引等指令。常用的有CREATE、DROP、ALTER

DML ( Data Manipulation Languages ) : 用於新增、刪除、修改、搜索資料庫內的Data,並檢查資料的完整性。常用的有 INSERT、DELETE、UPDATE、SELECT

DCL ( Data Control Languages ) : 控制資料庫的存取權限。常用的有GRANT、REVOKE

指令符號解釋
[ ] : 代表可有可無,[ ] 內的指令可能是一次大量執行或是某個特殊功能
大寫英文 : MySQL內定的指令文字。(紫色粗體字)
小寫英文 : 由使用者自行定義的文字,如名稱等


DML的指令
主要是新增修改等資料庫內的資料


新增資料

INSERT INTO Table名稱 (filed_1,filed_2,...) VALUES (value_1,value_2,...);

也可以省略欄位名稱的部分,但Value後面的順序必須和Table的欄位順序一樣


刪除資料

DELETE FROM Table名稱 [WHERE子句];
或用以下指令可以刪除多個Table的資料
DELETE FROM table_1,table_2,.. [WHERE子句];

如沒有加WHERE,會清除掉Table內的全部資料
如WHERE查詢出的資料有很多筆,其全部都會被刪除

例子:
刪除HappyCompany的SadBoy人事資料
DELETE FROM HappyCompany WHERE name=SadBoy;

例子-刪除多個Table的資料
刪除Table T1,T2,T3的資料,且資料名稱為 bad。
DELETE FROM a,b,c USING t1 AS a INNER JOIN t2 AS b INNER JOIN t3 AS c WHERE a.id=b.id AND a.id=c.id AND a.name=bad;


修改資料

UPDATE Table名稱 SET filed_1=value_1,filed_2=value_2,... [WHERE子句];

如要一次更新多個Table的資料可用
UPDATE t_1,t_2,... SET t_1.filed_1=value_1, t_2.filed_1=value_2 [WHERE子句];

如果沒有加WHERE,會一次修改整個Table的數值

例子:
調整HappyBoy的pay,改成300
UPDATE employee SET pay=300 WHERE name=HappyBoy;

例子2:
將Table Com2的pay+1000放到Com1的pay
UPDATE Com1,Com2 SET Com1.pay=Com2.pay + 1000 WHERE Com1.id=Com2.id;


查詢資料-單一Table

SELECT * FROM Table名稱 [WHERE子句] [ORDER BY filed_1 [DESC/ASC]] [LIMIT count];
SELECT filed_1,filed_2,.. FROM Table名稱 [WHERE子句] [ORDER BY filed_1 [DESC/ASC]] [LIMIT count];

SELECT後面加上 * 號,搜索出的資料會包含全部欄位
在SELECT後面加上欄位名稱,可將欄位依照想要的順序排列出來
ORDER BY是排序,可依照指定的欄位作升序或降序排列
DESC是降序,ASC是升序也是預設值
LIMIT會限制顯示的數量

例子:
只顯示前100個,並以pay欄位執行降序排序,當pay一樣時用名字排序
SELECT * FROM employee ORDER BY pay DESC ORDER BY name LIMIT 100;


查詢資料-多Table
Table的連結分成內連結和外連結,而外連結又分成左連結和右連結
內連結,兩個Table互相配對,只有兩邊Table都能配對成功的資料才會顯示出來

左連結,將左邊Table都顯示出來,由右邊的Table來配對,如左邊Table有而右邊Table的沒有的資料,會以空值顯示。右邊Table有但左邊沒有的資料,不會顯示出來。

右連結,與左連結類似,只是方向相反

內連結
SELECT t1.f1, t1.f2,t2.f1,... FROM t1,t2 WHERE t1.id=t2.id;

SELECT t1.f1, t1.f2,t2.f1,... FROM t1 INNER JOIN t2 ON t1.id=t2.id;

左連結
SELECT t1.f1,t2.f1,... FROM t1 LEFT JOIN t2 ON t1.id=t2.id;

右連結就把LEFT改成RIGHT就好

其中table可以用別名的方式縮短指令的長度,如
SELECT a.f1,b.f1 FROM Table_1 AS a , Table_2 AS b WHERE a.id=b.id;

例子:
Table t1、t2用欄位id配對,並顯示t1的欄位f1和t2的欄位f1、f2
分別以內連結、左連結 、右連結指令示範(外連結部分以t1為主)
SELECT t1.f1,t2.f1,t2.f2 FROM t1,t2 WHERE t1.id=t2.id;
SELECT t1.f1,t2.f1,t2.f2 FROM t1 LEFT JOIN t2 ON t1.id=t2.id;
SELECT t1.f1,t2.f1,t2.f2 FROM t2 RIGHT JOIN t1 ON t1.id=t2.id;


子查詢 (subquery)
以另一個查詢的結果當作條件,去執行條件式的查詢時可以使用
也可用Table連結的方式替代子查詢
SELECT filed/* FROM Table名稱 WHERE 欄位名稱 IN (SELECT filed FROM Table名稱);

例子 :
用Table BadList的name資料作為查詢employee的條件
SELECT f1,f2,f3 FROM employee WHERE employee.name IN (SELECT name FROM BadList);


查詢的資料結合 (union)
兩個查詢的指令所找到的資料結合在一起就是UNION
UNION會省略重複的資料(DISTINCT),而UNION ALL會把全部查詢出的資料都顯示出來

SELECT filed FROM table_1 UNION/UNION ALL SELECT filed FROM table_2;

例子:
SELECT name FROM GoodList UNION SELECT name FROM BadList;

留言

此網誌的熱門文章

WPA_supplicant的設定方式

DOS指令 -- SET和變數

Nginx server 和 location 優先順序