1. 程式人生 > 資料庫 >MySQL DML語句整理彙總

MySQL DML語句整理彙總

DML操作是指對資料庫中表記錄的操作,主要包括表記錄的插入(insert)、更新(update)、刪除(delete)和查詢(select),是開發人員日常使用最頻繁的操作。

1.插入(insert)

格式1.

INSERT INTO emp(ename,hiredate,sal,deptno) VALUES('zzx1','2000-01-01','2000',1);

格式2.

INSERT INTO emp VALUES('lisa','2003-02-01','3000',2);

不用指定欄位名稱,但是value值需與表字段嚴格對應.

格式3.

INSERT INTO emp(ename,sal) VALUES('dony',1000);

對於含可空欄位、非空但是含有預設值的欄位、自增欄位,可以不用在INSERT後的欄位列表裡面出現,VALUES後面只寫對應欄位名稱的VALUE:

格式4

在MySQL中,INSERT語句還可以一次性插入多條記錄:

INSERT INTO tablename(field1,field2,......fieldn)
VALUES
(record1_value1,record1_value2,......record1_valuen),(record2_value1,record2_value2,......record2_valuen),......
(recordn_value1,recordn_value2,......recordn_valuen);

2.更新(update)

格式1

UPDATE emp SET sal=4000 WHERE ename='lisa';

格式2

UPDATE t1,t2,...tn SET 
t1.field1=expr1,t2.field2=expr2,...
tn.fieldn=exprn [WHERE CONDITION];

同時更新多個表中的資料

3.刪除(delete)

格式1

DELETE FROM tablename [WHERE CONDITION];

格式2

DELETE t1,...tn FROM t1,...tn [WHERE CONDITION];

注意:不管是單表還是多表,不加where條件將會把表的所有記錄刪除,所以操作時一定要小心。

4.查詢(select)

基本語法:

SELECT * FROM tablename [WHERE CONDITION];

1.查詢不重複的記錄,可以用distinct關鍵字實現:

SELECT DISTINCT deptno FROM emp;

2.條件查詢:

SELECT * FROM emp WHERE deptno=1;

其中,where 後面的條件除“=” 外,還可以使用 >、<、>=、<=、!=等比較運算子;

多個條件之間還可以使用or、and等邏輯運算子進行多條件聯合查詢

3.排序和限制:

SELECT * FROM tablename [WHERE CONDITION] [ORDER BY field1 [DESC|ASC],field2 [DESC|ASC],...fieldn [DESC|ASC]];

其中,DESC和ASC是排序關鍵字,
DESC表示按照欄位進行降序排列(上大-下小),
ASC則表示升序排列(上小-下大),
如果不寫此關鍵字預設是升序排列。
ORDER BY 後面可以跟多個不同的排列欄位,並且每個排序欄位可以有不同的排序順序。

如果排序欄位的值一樣,則值相同的欄位按照第二個排序欄位進行排序,以此類推。如果只有一個排序欄位,則這欄位相同的記錄將會無序排列。

SELECT ......[LIMIT offset_start,row_count];

對於排序後的記錄,如果希望只顯示一部分,而不是全部,這時,就可以使用LIMIT關鍵字來實現.

LIMIT 經常和ORDER BY一起配合使用來進行記錄的分頁顯示。

注意:limit屬於MySQL擴充套件SQL92後的語法,在其他資料庫上並不能通用。

4.聚合

很多情況下,我們需要進行一些彙總操作,比如統計整個公司的人數或者統計每個部門的人數,這是就要用到SQL的集合操作。

SELECT [field1,......fieldn] fun_name
FROM tablename
[WHERE where_contition]
[GROUP BY field1,......fieldn
[WITH ROLLUP]]
[HAVING where_contition];

對其引數進行以下說明:

  1. fun_name 表示要做的集合操作,也就是聚合函式,常用的有sum(求和)、count(*)(記錄數)、max(最大值)、min(最小值)。
  2. GROUP BY 關鍵字表示要進行分類聚合的欄位,比如要按照部門分類統計員工數量,部門就應該寫在group by後面。
  3. WITH ROLLUP 是可選語法,表明是否對分類聚合後的結果進行再彙總。
  4. HAVING 關鍵字表示對分類後的結果再進行條件的過濾。

注意:having和where的區別在於having是對聚合後的結果進行條件的過濾,而where是在聚合前就對記錄進行過濾,如果邏輯允許,我們儘可能用where先過濾記錄,這樣因為結果集減小,將對聚合的效率大大提高,最後再根據邏輯看是否用having進行再過濾。

5.表連線

表連線分為內連線和外連線,它們之間的最主要區別是:
內連線僅選出兩張表中互相匹配的記錄,
而外連線會選出其他不匹配的記錄。我們常用的是內連線。

外連線有分為左連線和右連線,具體定義如下:

  1. 左連線:包含所有的左邊表中的記錄甚至是右邊表中沒有和它匹配的記錄
  2. 右連線:包含所有的右邊表中的記錄甚至是左邊表中沒有和它匹配的記錄
SELECT ename,deptname FROM emp LEFT JOIN dept ON emp.deptno=dept.deptno;

6.子查詢

某些情況,當我們查詢的時候,需要的條件是另一個SELECT語句的結果,這個時候,就要用到子查詢。
用於子查詢的關鍵字主要包括in、not in、=、!=、exists、not exists等。

SELECT * FROM emp WHERE deptno IN(SELECT deptno FROM dept);

注意:子查詢和表連線之間的轉換主要應用在兩個方面:

MySQL 4.1 以前的版本不支援子查詢,需要用表連線來實現子查詢的功能
表連線在很多情況下用於優化子查詢

7.記錄聯合

我們經常會碰到這樣的應用,將兩個表的資料按照一定的查詢條件查詢出來後,將結果合併到一起顯示出來,這個時候,就需要用到union和union all關鍵字來實現這樣的功能,具體語法如下:

SELECT * FROM t1
UNION|UNION ALL
SELECT * FROM t2
......
UNION|UNION ALL
SELECT * FROM tn;

UNION 和 UNION ALL的主要區別是 UNION ALL 是把結果集直接合並在一起,而UNION是將UNION ALL後的結果進行一次DISTINCT,去除重複記錄後的結果。

以上所述是小編給大家介紹的MySQL DML語句整理彙總詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回覆大家的。在此也非常感謝大家對我們網站的支援!