您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關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,t2,...tn FROM t1,t2,...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,field2,......fieldn] fun_name FROM tablename [WHERE where_contition] [GROUP BY field1,field2,......fieldn [WITH ROLLUP]] [HAVING where_contition];
對其參數進行以下說明:
fun_name 表示要做的集合操作,也就是聚合函數,常用的有sum(求和)、count(*)(記錄數)、max(最大值)、min(最小值)。
GROUP BY 關鍵字表示要進行分類聚合的字段,比如要按照部門分類統計員工數量,部門就應該寫在group by后面。
WITH ROLLUP 是可選語法,表明是否對分類聚合后的結果進行再匯總。
HAVING 關鍵字表示對分類后的結果再進行條件的過濾。
注意:having和where的區別在于having是對聚合后的結果進行條件的過濾,而where是在聚合前就對記錄進行過濾,如果邏輯允許,我們盡可能用where先過濾記錄,這樣因為結果集減小,將對聚合的效率大大提高,最后再根據邏輯看是否用having進行再過濾。
5.表連接
表連接分為內連接和外連接,它們之間的最主要區別是:
內連接僅選出兩張表中互相匹配的記錄,
而外連接會選出其他不匹配的記錄。我們常用的是內連接。
外連接有分為左連接和右連接,具體定義如下:
左連接:包含所有的左邊表中的記錄甚至是右邊表中沒有和它匹配的記錄
右連接:包含所有的右邊表中的記錄甚至是左邊表中沒有和它匹配的記錄
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語句的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。