dml 語句
dml(data manipulation language)語句:數據操縱語句。
用途:用于添加、修改、刪除和查詢數據庫記錄,并檢查數據完整性。
常用關鍵字:insert、update、delete、select等。
dml 操作的對象是庫表的數據(記錄)。
主要包括插入(insert)、更新(update)、刪除(delete)和查詢(select)。
dml 語句是開發人員使用最頻繁的操作。
1.插入記錄
插入一條記錄
1
|
insert into tablename (field1,field2,...,fieldn) values (value1,value2,...,valuen); |
一次性插入多條數據
1
2
3
4
5
6
7
8
9
|
insert into tablename (field1,field2,...,fieldn) values (value1,value2,...,valuen), (value1,value2,...,valuen); |
2.更新記錄
更新單表數據
1
|
update tablename set field1=value1,filed2=value2,...fieldn=valuen [ where condition] |
同時更新多個表的數據
1
|
update t1,t2,...,tn set t1.field1=expr1,tn.field=exprn [ where condition]; |
通常用于根據一個表的字段來動態地更新另外一個表的字段
在此說明:中括號 “[ ]” 代表的是可選參數,即可有可無的參數。
3.簡單查詢記錄
簡單的條件查詢。符號“*”代表查詢所有字段,如果只想看其中某些列,則寫表的列名。
1
2
3
|
select * from tablename [ where condition]; select field1,field2,...,fieldn from tablename [ where condition]; |
別名
給列名或表名取別名的關鍵字:as 或者不寫關鍵字。如:
1
2
3
|
select field1 as f1,field2 f2 from tablename; select t2.field1 as f1,t1.field2 f2 from table1 as t1,table2 t2; |
不取別名,則查詢結果的列名為表原本的列名;
取別名,則查詢結果的列名為別名
4.刪除記錄
刪除單表記錄
1
|
delete from tablename [ where condition]; |
同時刪除多個表的數據
1
|
delete t1,t2,...,tn from t1,t2,...,tn [ where condition]; |
說明:不加where 條件則刪除全表數據
單表“增改查刪”操作案例:
多表“刪除”操作案例:
再看個刪除案例
最后再看個刪除案例
多表刪除結論:
條件成立,則刪除有條件表的對應數據,沒條件的則全表刪除;
條件不成立,則都不刪除。
留個疑問:多表刪除不給where 條件會怎樣呢?
關于同時更新多個表數據的操作,可以自行探索,畢竟有思考的學習最有價值。
5.查詢記錄詳解(dql語句)
dql(data query language)即數據庫查詢語言。
數據庫查詢語句就像玩積木一樣,一塊一塊的拼湊,每個中括號“[]”代表一塊積木。
先通過遞進的方式一條一條列出查詢語法。
5.1.查詢不重復的記錄
1
|
select distinct filed from tablename; |
distinct 關鍵字是對 “查詢結果集” 去重,再看個例子就明白了。
5.2.條件查詢
1
2
3
4
5
6
7
|
--查詢所有列: select * from tablename [ where condition]; --查詢指定列: 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
多個條件之間用邏輯運算符:and 和 or
模糊查詢之"_":field like _x_xx_ 符號"_"代表匹配單個任意字符,可以在你喜歡的字符旁加上"_"
模糊查詢之"%":field like %x%xx% 符號"%"代表匹配0~n個任意字符,可以在你喜歡的字符旁加上"%"
in語句查詢:field in(value1,value2,...) 查詢field 和 in 數組配得上的,不配就沒有數據
not in語句查詢:field not in(value1,value2,...) 查詢field 和 in 數組配不上的,不配就有數據
其它常用條件具體怎么用,參考常用條件去操作。
5.3.聚合查詢
1
2
3
4
5
6
7
|
--最簡單的聚合查詢: select [field1,field2,...,fieldn] fun_name from tablename group by field; --完整語法: select [field1,field2,...,fieldn] fun_name from tablename [ where condition] [ group by field1,field2,...,fieldn [ with rollup ]] [ having condition]; |
說明:
fun_name 表示聚合函數,常用有:求和sum()、記錄數count(*)、平均值avg()、最大值max()、最小值min();
[where condition] 就是上面講的條件查詢;
[group by field1,field2,...,fieldn [with rollup]]
group by 關鍵字表示對field字段進行分類聚合;
with rollup 關鍵字表示是否對分類聚合后的結果進行再匯總
[having condition] 對分類聚合后的查詢結果集進行條件的過濾
where 和 having 的區別:
- where 是分組前的條件過濾;having 是分組后的條件過濾。
- where 是用原表列名做條件過濾;having 是用查詢結果集列名做條件過濾。
優先選擇where 條件過濾,這樣可以減少結果集,進而提高分類聚合的效率。
中括號"[]"代表可選的意思,也就是說group by 前面的[where condition] 可有可無,后面的[with rollup] 和 [having condition] 也是可有可無。
group by 和distinct 的區別: group by 是對指定列進行分組;distinct 是對查詢結果進行去重。
加入where 和 having的例子:
列名為avg(stu_age) 看著有點怪怪,給他取個別名就一目了然:
5.4.排序查詢
1
2
3
4
5
6
7
8
9
|
--最簡單的排序查詢: select * from tablename order by field; --完整語法: 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 為默認排序。也就是說你只要記住 desc 就可以了。碰巧的是 desc 是查詢表設計的關鍵字,而且語法很簡單: desc tablename; |
單列排序:
多列排序:用符號 “,” 隔開即可
5.5.limit查詢
又稱為限制查詢、范圍查詢、分頁查詢
1
2
3
4
5
6
7
8
9
|
--最簡單的limit查詢:offset_start和數組下標一樣,從0開始算 select * from tablename limit offset_start,row_count; --完整語法:這條sql是單表查詢的完整版 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條開始,查詢兩條數據
例子2:從第2條開始,查詢兩條數據
=========================
= 以上就是關于單表查詢的語法 =
= 以下則是關于兩表聯查的語法 =
=========================
5.6.連表查詢
在需要關聯多個表數據時使用。 學習左連接和內連接即可。
左連接:選出左表所有的記錄,不管右表有沒有和它匹配;左表是主,關聯右表信息
1
|
select * from t1 left join t2 on t1.field1=t2.field2; |
內連接:僅選出兩張表中互相匹配的記錄,沒有匹配則結果為空
1
2
3
|
select * from t1 inner join t2 on t1.field1=t2.field2; select * from t1,t2 where t1.field1=t2.field2; |
5.7.子查詢
在需要另外一個查詢結果作為查詢條件時使用。子查詢用“()” 括起來。
如:查詢學生“張三”的成績
某些情況下,子查詢可以轉化為連表查詢。如上面的例子可以寫成連表查詢:
5.8.記錄聯合
將兩個過多個表的查詢結果合并成結果集輸出。合并的條件是多個表的查詢結果字段數要相同,注意是查詢結果字段數不是表字段數。
1
2
3
4
5
6
7
8
9
10
11
|
select f1,f2,...,fn from t1 union / union all select f1,f2,...,fn from t2 ... union / union all select f1,f2,...,fn from tn |
查詢結果字段數不等,則報錯
固定查詢結果集字段數
5.9.select語句的執行順序
自行證明該執行順序是否正確,也算是對前面所學知識的一個鞏固。?
(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.總結
到此為止,關于日常操作最為頻繁的表數據的插入(insert)、更新(update)、刪除(delete)和查詢(select)語句就講完了。最為繁雜的查詢語句,又名為dql語句,是dml語句中的重點。
到此這篇關于mysql基礎教程之dml語句的文章就介紹到這了,更多相關mysql基礎之dml語句內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://www.cnblogs.com/dennyLee2025/p/15699198.html