MySQL基礎之DML語句

淵渟嶽發表於2021-12-16

DML 語句

DML(Data Manipulation Language)語句:資料操縱語句。

用途:用於新增、修改、刪除和查詢資料庫記錄,並檢查資料完整性。

常用關鍵字:insert、update、delete、select等。

DML 操作的物件是庫表的資料(記錄)

主要包括插入(insert)、更新(update)、刪除(delete)和查詢(select)。

DML 語句是開發人員使用最頻繁的操作。

1.插入記錄

插入一條記錄

insert into tablename (field1,field2,...,fieldn) values (value1,value2,...,valuen);

一次性插入多條資料

insert into tablename
 (field1,field2,...,fieldn)
values
 (value1,value2,...,valuen),
 (value1,value2,...,valuen);

2.更新記錄

更新單表資料

update tablename set field1=value1,filed2=value2,...fieldn=valuen [where condition]

同時更新多個表的資料

update t1,t2,...,tn set t1.field1=expr1,tn.field=exprn [where condition];

通常用於根據一個表的欄位來動態地更新另外一個表的欄位

 在此說明:中括號 “[ ]” 代表的是可選引數,即可有可無的引數。

3.簡單查詢記錄

簡單的條件查詢。符號“*”代表查詢所有欄位,如果只想看其中某些列,則寫表的列名。

select * from tablename [where condition];
select field1,field2,...,fieldn from tablename [where condition];

別名

    給列名表名取別名的關鍵字:AS 或者不寫關鍵字。如:

select field1 AS f1,field2 f2  from tablename;
select t2.field1 AS f1,t1.field2 f2  from table1 as t1,table2 t2;

不取別名,則查詢結果的列名為表原本的列名;

取別名,則查詢結果的列名為別名

MySQL基礎之DML語句

 

4.刪除記錄

刪除單表記錄

delete from tablename [where condition];

同時刪除多個表的資料

delete t1,t2,...,tn from t1,t2,...,tn [where condition];

說明:不加where 條件則刪除全表資料

單表“增改查刪”操作案例:

MySQL基礎之DML語句

多表“刪除”操作案例:

MySQL基礎之DML語句

  再看個刪除案例

MySQL基礎之DML語句

 最後再看個刪除案例

MySQL基礎之DML語句

  多表刪除結論:

  條件成立,則刪除有條件表的對應資料,沒條件的則全表刪除;

  條件不成立,則都不刪除。

留個疑問:多表刪除不給where 條件會怎樣呢?

關於同時更新多個表資料的操作,可以自行探索,畢竟有思考的學習最有價值。

5.查詢記錄詳解(DQL語句)

DQL(Data Query Language)即資料庫查詢語言。

資料庫查詢語句就像玩積木一樣,一塊一塊的拼湊,每個中括號“[]”代表一塊積木。

先通過遞進的方式一條一條列出查詢語法。

5.1.查詢不重複的記錄

select distinct filed from tablename;

MySQL基礎之DML語句

distinct 關鍵字是對 “查詢結果集” 去重,再看個例子就明白了。

MySQL基礎之DML語句

5.2.條件查詢

--查詢所有列:
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
多個條件之間用邏輯運算子:andor 
模糊查詢之"_":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 陣列配不上的,不配就有資料

MySQL基礎之DML語句

其它常用條件具體怎麼用,參考常用條件去操作。

5.3.聚合查詢

--最簡單的聚合查詢:
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 的區別:
  1. where 是分組的條件過濾;having 是分組的條件過濾。

  2. where 是用原表列名條件過濾;having 是用查詢結果集列名條件過濾

    優先選擇where 條件過濾,這樣可以減少結果集,進而提高分類聚合的效率。

中括號"[]"代表可選的意思,也就是說group by 前面的[where condition] 可有可無,後面的[with rollup] 和 [having condition] 也是可有可無。

group by 和distinct 的區別:    group by 是對指定進行分組;distinct 是對查詢結果進行去重。

MySQL基礎之DML語句

加入where 和 having的例子:

MySQL基礎之DML語句

列名為avg(stu_age) 看著有點怪怪,給他取個別名就一目瞭然:

MySQL基礎之DML語句

5.4.排序查詢

--最簡單的排序查詢:
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;

單列排序:

MySQL基礎之DML語句

多列排序:用符號 “,” 隔開即可

MySQL基礎之DML語句

5.5.limit查詢

  又稱為限制查詢、範圍查詢、分頁查詢

--最簡單的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條開始,查詢兩條資料

MySQL基礎之DML語句

=========================
= 以上就是關於單表查詢的語法 =
= 以下則是關於兩表聯查的語法 =
=========================

5.6.連查詢

在需要關聯多個表資料時使用。 學習左連線和內連線即可。

左連線選出左表所有的記錄,不管右表有沒有和它匹配;左表是主,關聯右表資訊

select * from t1 left join t2 on t1.field1=t2.field2;

內連線:僅選出兩張表中互相匹配的記錄,沒有匹配則結果為空

select * from t1 inner join t2 on t1.field1=t2.field2;
select * from t1,t2 where t1.field1=t2.field2;

MySQL基礎之DML語句

5.7.子查詢

在需要另外一個查詢結果作為查詢條件時使用。子查詢用“()” 括起來。

如:查詢學生“張三”的成績

MySQL基礎之DML語句

某些情況下,子查詢可以轉化為連表查詢。如上面的例子可以寫成連表查詢:

MySQL基礎之DML語句

5.8.記錄聯合

 將兩個過多個表的查詢結果合併成結果集輸出。合併的條件是多個表的查詢結果欄位數要相同,注意是查詢結果欄位數不是表欄位數。

select f1,f2,...,fn from t1
union/union all
select f1,f2,...,fn from t2
...
union/union all
select f1,f2,...,fn from tn

MySQL基礎之DML語句

查詢結果欄位數不等,則報錯

MySQL基礎之DML語句

固定查詢結果集欄位數

MySQL基礎之DML語句

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語句

相關文章