MySQL DML語(yǔ)句整理匯總
DML操作是指對(duì)數(shù)據(jù)庫(kù)中表記錄的操作,主要包括表記錄的插入(insert)、更新(update)、刪除(delete)和查詢(select),是開(kāi)發(fā)人員日常使用最頻繁的操作。
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值需與表字段嚴(yán)格對(duì)應(yīng).
格式3.
INSERT INTO emp(ename,sal) VALUES('dony',1000);
對(duì)于含可空字段、非空但是含有默認(rèn)值的字段、自增字段,可以不用在INSERT后的字段列表里面出現(xiàn),VALUES后面只寫對(duì)應(yīng)字段名稱的VALUE:
格式4
在MySQL中,INSERT語(yǔ)句還可以一次性插入多條記錄:
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];
同時(shí)更新多個(gè)表中的數(shù)據(jù)
3.刪除(delete)
格式1
DELETE FROM tablename [WHERE CONDITION];
格式2
DELETE t1,t2,...tn FROM t1,t2,...tn [WHERE CONDITION];
注意:不管是單表還是多表,不加where條件將會(huì)把表的所有記錄刪除,所以操作時(shí)一定要小心。
4.查詢(select)
基本語(yǔ)法:
SELECT * FROM tablename [WHERE CONDITION];
1.查詢不重復(fù)的記錄,可以用distinct關(guān)鍵字實(shí)現(xiàn):
SELECT DISTINCT deptno FROM emp;
2.條件查詢:
SELECT * FROM emp WHERE deptno=1;
其中,where 后面的條件除“=” 外,還可以使用 >、<、>=、<=、!=等比較運(yùn)算符;
多個(gè)條件之間還可以使用or、and等邏輯運(yùn)算符進(jìn)行多條件聯(lián)合查詢
3.排序和限制:
SELECT * FROM tablename [WHERE CONDITION] [ORDER BY field1 [DESC|ASC], field2 [DESC|ASC],...fieldn [DESC|ASC]];
其中,DESC和ASC是排序關(guān)鍵字,
DESC表示按照字段進(jìn)行降序排列(上大-下?。?,
ASC則表示升序排列(上小-下大),
如果不寫此關(guān)鍵字默認(rèn)是升序排列。
ORDER BY 后面可以跟多個(gè)不同的排列字段,并且每個(gè)排序字段可以有不同的排序順序。
如果排序字段的值一樣,則值相同的字段按照第二個(gè)排序字段進(jìn)行排序,以此類推。如果只有一個(gè)排序字段,則這字段相同的記錄將會(huì)無(wú)序排列。
SELECT ......[LIMIT offset_start,row_count];
對(duì)于排序后的記錄,如果希望只顯示一部分,而不是全部,這時(shí),就可以使用LIMIT關(guān)鍵字來(lái)實(shí)現(xiàn).
LIMIT 經(jīng)常和ORDER BY一起配合使用來(lái)進(jìn)行記錄的分頁(yè)顯示。
注意:limit屬于MySQL擴(kuò)展SQL92后的語(yǔ)法,在其他數(shù)據(jù)庫(kù)上并不能通用。
4.聚合
很多情況下,我們需要進(jìn)行一些匯總操作,比如統(tǒng)計(jì)整個(gè)公司的人數(shù)或者統(tǒng)計(jì)每個(gè)部門的人數(shù),這是就要用到SQL的集合操作。
SELECT [field1,field2,......fieldn] fun_name FROM tablename [WHERE where_contition] [GROUP BY field1,field2,......fieldn [WITH ROLLUP]] [HAVING where_contition];
對(duì)其參數(shù)進(jìn)行以下說(shuō)明:
- fun_name 表示要做的集合操作,也就是聚合函數(shù),常用的有sum(求和)、count(*)(記錄數(shù))、max(最大值)、min(最小值)。
- GROUP BY 關(guān)鍵字表示要進(jìn)行分類聚合的字段,比如要按照部門分類統(tǒng)計(jì)員工數(shù)量,部門就應(yīng)該寫在group by后面。
- WITH ROLLUP 是可選語(yǔ)法,表明是否對(duì)分類聚合后的結(jié)果進(jìn)行再匯總。
- HAVING 關(guān)鍵字表示對(duì)分類后的結(jié)果再進(jìn)行條件的過(guò)濾。
注意:having和where的區(qū)別在于having是對(duì)聚合后的結(jié)果進(jìn)行條件的過(guò)濾,而where是在聚合前就對(duì)記錄進(jìn)行過(guò)濾,如果邏輯允許,我們盡可能用where先過(guò)濾記錄,這樣因?yàn)榻Y(jié)果集減小,將對(duì)聚合的效率大大提高,最后再根據(jù)邏輯看是否用having進(jìn)行再過(guò)濾。
5.表連接
表連接分為內(nèi)連接和外連接,它們之間的最主要區(qū)別是:
內(nèi)連接僅選出兩張表中互相匹配的記錄,
而外連接會(huì)選出其他不匹配的記錄。我們常用的是內(nèi)連接。
外連接有分為左連接和右連接,具體定義如下:
- 左連接:包含所有的左邊表中的記錄甚至是右邊表中沒(méi)有和它匹配的記錄
- 右連接:包含所有的右邊表中的記錄甚至是左邊表中沒(méi)有和它匹配的記錄
SELECT ename,deptname FROM emp LEFT JOIN dept ON emp.deptno=dept.deptno;
6.子查詢
某些情況,當(dāng)我們查詢的時(shí)候,需要的條件是另一個(gè)SELECT語(yǔ)句的結(jié)果,這個(gè)時(shí)候,就要用到子查詢。
用于子查詢的關(guān)鍵字主要包括in、not in、=、!=、exists、not exists等。
SELECT * FROM emp WHERE deptno IN(SELECT deptno FROM dept);
注意:子查詢和表連接之間的轉(zhuǎn)換主要應(yīng)用在兩個(gè)方面:
MySQL 4.1 以前的版本不支持子查詢,需要用表連接來(lái)實(shí)現(xiàn)子查詢的功能
表連接在很多情況下用于優(yōu)化子查詢
7.記錄聯(lián)合
我們經(jīng)常會(huì)碰到這樣的應(yīng)用,將兩個(gè)表的數(shù)據(jù)按照一定的查詢條件查詢出來(lái)后,將結(jié)果合并到一起顯示出來(lái),這個(gè)時(shí)候,就需要用到union和union all關(guān)鍵字來(lái)實(shí)現(xiàn)這樣的功能,具體語(yǔ)法如下:
SELECT * FROM t1 UNION|UNION ALL SELECT * FROM t2 ...... UNION|UNION ALL SELECT * FROM tn;
UNION 和 UNION ALL的主要區(qū)別是 UNION ALL 是把結(jié)果集直接合并在一起,而UNION是將UNION ALL后的結(jié)果進(jìn)行一次DISTINCT,去除重復(fù)記錄后的結(jié)果。
以上所述是小編給大家介紹的MySQL DML語(yǔ)句整理匯總詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
mysql5.6 解析JSON字符串方式(支持復(fù)雜的嵌套格式)
這篇文章主要介紹了mysql5.6 解析JSON字符串方式(支持復(fù)雜的嵌套格式),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
MySQL常見(jiàn)的底層優(yōu)化操作教程及相關(guān)建議
這篇文章主要介紹了MySQL常見(jiàn)的底層優(yōu)化操作教程及相關(guān)建議,包括對(duì)運(yùn)行操作系統(tǒng)的硬件方面及存儲(chǔ)引擎參數(shù)的調(diào)整等零碎方面的小整理,需要的朋友可以參考下2015-12-12
MySQL數(shù)據(jù)庫(kù)高可用HA實(shí)現(xiàn)小結(jié)
MySQL數(shù)據(jù)庫(kù)是目前開(kāi)源應(yīng)用最大的關(guān)系型數(shù)據(jù)庫(kù),有海量的應(yīng)用將數(shù)據(jù)存儲(chǔ)在MySQL數(shù)據(jù)庫(kù)中,這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)高可用HA實(shí)現(xiàn),需要的朋友可以參考下2022-01-01
MySQL查詢優(yōu)化:LIMIT 1避免全表掃描提高查詢效率
在某些情況下,如果明知道查詢結(jié)果只有一個(gè),SQL語(yǔ)句中使用LIMIT 1會(huì)提高查詢效率,感興趣的朋友可以了解下哈,希望對(duì)你優(yōu)化mysql查詢有所幫助2013-04-04
MYSQL中SWITCH語(yǔ)句和循環(huán)語(yǔ)句舉例詳解
MySQL提供了多種循環(huán)語(yǔ)句來(lái)實(shí)現(xiàn)循環(huán)操作,其中包括while循環(huán)、loop循環(huán)、repeat循環(huán)和非標(biāo)準(zhǔn)的goto循環(huán),下面這篇文章主要給大家介紹了關(guān)于MYSQL中SWITCH語(yǔ)句和循環(huán)語(yǔ)句的相關(guān)資料,需要的朋友可以參考下2024-06-06
Mysql服務(wù)添加 iptables防火墻策略的方案
這篇文章主要介紹了給Mysql服務(wù)添加 iptables防火墻策略的方案,本文給大家分享兩種解決方案,需要的朋友可以參考下2021-04-04

