MySQL基礎(chǔ)教程之DML語(yǔ)句詳解
DML 語(yǔ)句
DML(Data Manipulation Language)語(yǔ)句:數(shù)據(jù)操縱語(yǔ)句。
用途:用于添加、修改、刪除和查詢(xún)數(shù)據(jù)庫(kù)記錄,并檢查數(shù)據(jù)完整性。
常用關(guān)鍵字:insert、update、delete、select等。
DML 操作的對(duì)象是庫(kù)表的數(shù)據(jù)(記錄)。
主要包括插入(insert)、更新(update)、刪除(delete)和查詢(xún)(select)。
DML 語(yǔ)句是開(kāi)發(fā)人員使用最頻繁的操作。
1.插入記錄
插入一條記錄
insert into tablename (field1,field2,...,fieldn) values (value1,value2,...,valuen);
一次性插入多條數(shù)據(jù)
insert into tablename (field1,field2,...,fieldn) values (value1,value2,...,valuen), (value1,value2,...,valuen);
2.更新記錄
更新單表數(shù)據(jù)
update tablename set field1=value1,filed2=value2,...fieldn=valuen [where condition]
同時(shí)更新多個(gè)表的數(shù)據(jù)
update t1,t2,...,tn set t1.field1=expr1,tn.field=exprn [where condition];
通常用于根據(jù)一個(gè)表的字段來(lái)動(dòng)態(tài)地更新另外一個(gè)表的字段
在此說(shuō)明:中括號(hào) “[ ]” 代表的是可選參數(shù),即可有可無(wú)的參數(shù)。
3.簡(jiǎn)單查詢(xún)記錄
簡(jiǎn)單的條件查詢(xún)。符號(hào)“*”代表查詢(xún)所有字段,如果只想看其中某些列,則寫(xiě)表的列名。
select * from tablename [where condition]; select field1,field2,...,fieldn from tablename [where condition];
別名
? ? 給列名或表名取別名的關(guān)鍵字:AS 或者不寫(xiě)關(guān)鍵字。如:
select field1 AS f1,field2 f2 from tablename; select t2.field1 AS f1,t1.field2 f2 from table1 as t1,table2 t2;
不取別名,則查詢(xún)結(jié)果的列名為表原本的列名;
取別名,則查詢(xún)結(jié)果的列名為別名
4.刪除記錄
刪除單表記錄
delete from tablename [where condition];
同時(shí)刪除多個(gè)表的數(shù)據(jù)
delete t1,t2,...,tn from t1,t2,...,tn [where condition];
說(shuō)明:不加where 條件則刪除全表數(shù)據(jù)
單表“增改查刪”操作案例:
多表“刪除”操作案例:
? 再看個(gè)刪除案例
?最后再看個(gè)刪除案例
多表刪除結(jié)論:
條件成立,則刪除有條件表的對(duì)應(yīng)數(shù)據(jù),沒(méi)條件的則全表刪除;
條件不成立,則都不刪除。
留個(gè)疑問(wèn):多表刪除不給where 條件會(huì)怎樣呢?
關(guān)于同時(shí)更新多個(gè)表數(shù)據(jù)的操作,可以自行探索,畢竟有思考的學(xué)習(xí)最有價(jià)值。
5.查詢(xún)記錄詳解(DQL語(yǔ)句)
DQL(Data Query Language)即數(shù)據(jù)庫(kù)查詢(xún)語(yǔ)言。
數(shù)據(jù)庫(kù)查詢(xún)語(yǔ)句就像玩積木一樣,一塊一塊的拼湊,每個(gè)中括號(hào)“[]”代表一塊積木。
先通過(guò)遞進(jìn)的方式一條一條列出查詢(xún)語(yǔ)法。
5.1.查詢(xún)不重復(fù)的記錄
select distinct filed from tablename;
distinct 關(guān)鍵字是對(duì) “查詢(xún)結(jié)果集” 去重,再看個(gè)例子就明白了。
5.2.條件查詢(xún)
--查詢(xún)所有列: select * from tablename [where condition]; --查詢(xún)指定列: select [field1,field2,...,fieldn] from tablename [where condition];
常用的條件(condition)
等于:field = xxx
大于:field > xxx
小于:field < xxx
不等于:field != xxx
不等于:field <> xxx
等于null:field is null
不等于null:field is not null
多個(gè)條件之間用邏輯運(yùn)算符:and 和 or?
模糊查詢(xún)之"_":field like _x_xx_? ? ?符號(hào)"_"代表匹配單個(gè)任意字符,可以在你喜歡的字符旁加上"_"
模糊查詢(xún)之"%":field like %x%xx%? ? ?符號(hào)"%"代表匹配0~n個(gè)任意字符,可以在你喜歡的字符旁加上"%"
in語(yǔ)句查詢(xún):field in(value1,value2,...)? 查詢(xún)field 和 in 數(shù)組配得上的,不配就沒(méi)有數(shù)據(jù)
not in語(yǔ)句查詢(xún):field not in(value1,value2,...)? ?查詢(xún)field 和 in 數(shù)組配不上的,不配就有數(shù)據(jù)
其它常用條件具體怎么用,參考常用條件去操作。
5.3.聚合查詢(xún)
--最簡(jiǎn)單的聚合查詢(xún): select [field1,field2,...,fieldn] fun_name from tablename group by field; --完整語(yǔ)法: select [field1,field2,...,fieldn] fun_name from tablename [where condition] [group by field1,field2,...,fieldn [with rollup]] [having condition];
說(shuō)明:
fun_name? 表示聚合函數(shù),常用有:求和sum()、記錄數(shù)count(*)、平均值avg()、最大值max()、最小值min();
[where condition] 就是上面講的條件查詢(xún);
[group by field1,field2,...,fieldn [with rollup]]?
group by 關(guān)鍵字表示對(duì)field字段進(jìn)行分類(lèi)聚合;
with rollup 關(guān)鍵字表示是否對(duì)分類(lèi)聚合后的結(jié)果進(jìn)行再匯總
[having condition] 對(duì)分類(lèi)聚合后的查詢(xún)結(jié)果集進(jìn)行條件的過(guò)濾
where 和 having 的區(qū)別:
- where 是分組前的條件過(guò)濾;having 是分組后的條件過(guò)濾。
- where 是用原表列名做條件過(guò)濾;having 是用查詢(xún)結(jié)果集列名做條件過(guò)濾。
? ? 優(yōu)先選擇where 條件過(guò)濾,這樣可以減少結(jié)果集,進(jìn)而提高分類(lèi)聚合的效率。
中括號(hào)"[]"代表可選的意思,也就是說(shuō)group by 前面的[where condition] 可有可無(wú),后面的[with rollup] 和 [having condition] 也是可有可無(wú)。
group by 和distinct 的區(qū)別:? ? group by 是對(duì)指定列進(jìn)行分組;distinct 是對(duì)查詢(xún)結(jié)果進(jìn)行去重。
加入where 和 having的例子:
列名為avg(stu_age) 看著有點(diǎn)怪怪,給他取個(gè)別名就一目了然:
5.4.排序查詢(xún)
--最簡(jiǎn)單的排序查詢(xún): select * from tablename order by field; --完整語(yǔ)法: select [field1,field2,...,fieldn] fun_name from tablename [where condition] [group by field1,field2,...,fieldn [with rollup]] [having condition] [order by field1 [desc|asc], field2 [desc|asc],...,fieldn [desc|asc]]; DESC 代表降序(從大到?。?;ASC 代表升序(從小到大),asc為默認(rèn)排序。也就是說(shuō)你只要記住desc 就可以了。碰巧的是desc 是查詢(xún)表設(shè)計(jì)的關(guān)鍵字,而且語(yǔ)法很簡(jiǎn)單:desc tablename;
單列排序:
多列排序:用符號(hào) “,” 隔開(kāi)即可
5.5.limit查詢(xún)
? 又稱(chēng)為限制查詢(xún)、范圍查詢(xún)、分頁(yè)查詢(xún)
--最簡(jiǎn)單的limit查詢(xún):offset_start和數(shù)組下標(biāo)一樣,從0開(kāi)始算 select * from tablename limit offset_start,row_count; --完整語(yǔ)法:這條sql是單表查詢(xún)的完整版 select [field1,field2,...,fieldn] fun_name from tablename [where condition] [group by field1,field2,...,fieldn [with rollup]] [having condition] [order by field1 [desc|asc], field2 [desc|asc],...,fieldn [desc|asc]] [limit offset_start,row_count];
例子1:從第1條開(kāi)始,查詢(xún)兩條數(shù)據(jù)
例子2:從第2條開(kāi)始,查詢(xún)兩條數(shù)據(jù)
=========================
= 以上就是關(guān)于單表查詢(xún)的語(yǔ)法 =
= 以下則是關(guān)于兩表聯(lián)查的語(yǔ)法 =
=========================
5.6.連表查詢(xún)
在需要關(guān)聯(lián)多個(gè)表數(shù)據(jù)時(shí)使用。 學(xué)習(xí)左連接和內(nèi)連接即可。
左連接:選出左表所有的記錄,不管右表有沒(méi)有和它匹配;左表是主,關(guān)聯(lián)右表信息
select * from t1 left join t2 on t1.field1=t2.field2;
內(nèi)連接:僅選出兩張表中互相匹配的記錄,沒(méi)有匹配則結(jié)果為空
select * from t1 inner join t2 on t1.field1=t2.field2; select * from t1,t2 where t1.field1=t2.field2;
5.7.子查詢(xún)
在需要另外一個(gè)查詢(xún)結(jié)果作為查詢(xún)條件時(shí)使用。子查詢(xún)用“()” 括起來(lái)。
如:查詢(xún)學(xué)生“張三”的成績(jī)
某些情況下,子查詢(xún)可以轉(zhuǎn)化為連表查詢(xún)。如上面的例子可以寫(xiě)成連表查詢(xún):
5.8.記錄聯(lián)合
?將兩個(gè)過(guò)多個(gè)表的查詢(xún)結(jié)果合并成結(jié)果集輸出。合并的條件是多個(gè)表的查詢(xún)結(jié)果字段數(shù)要相同,注意是查詢(xún)結(jié)果字段數(shù)不是表字段數(shù)。
select f1,f2,...,fn from t1 union/union all select f1,f2,...,fn from t2 ... union/union all select f1,f2,...,fn from tn
查詢(xún)結(jié)果字段數(shù)不等,則報(bào)錯(cuò)
固定查詢(xún)結(jié)果集字段數(shù)
5.9.select語(yǔ)句的執(zhí)行順序
自行證明該執(zhí)行順序是否正確,也算是對(duì)前面所學(xué)知識(shí)的一個(gè)鞏固。?
(7)? SELECT?
(8)? DISTINCT <select_list>
(1)? FROM <left_table>
(3)? <join_type> JOIN <right_table>
(2)? ON <join_condition>
(4)? WHERE <where_condition>
(5)? GROUP BY <group_by_list>
(6)? HAVING <having_condition>
(9)? ORDER BY <order_by_condition>
(10) LIMIT <limit_number>?
6.總結(jié)
到此為止,關(guān)于日常操作最為頻繁的表數(shù)據(jù)的插入(insert)、更新(update)、刪除(delete)和查詢(xún)(select)語(yǔ)句就講完了。最為繁雜的查詢(xún)語(yǔ)句,又名為DQL語(yǔ)句,是DML語(yǔ)句中的重點(diǎn)。
到此這篇關(guān)于MySQL基礎(chǔ)教程之DML語(yǔ)句的文章就介紹到這了,更多相關(guān)MySQL基礎(chǔ)之DML語(yǔ)句內(nèi)容請(qǐng)搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!
版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。