mysql中的dml操作_MySQL操作语言[DML]
insert操作insert?into?table_name?(field1,?field2,...fieldN)?values?(value1,?value2,...valueN);如果ID值設置為自增長,列名及其對應的值可以省略不寫,但是下面這種寫法除外,且值要與列名嚴格對應insert?into?table_name?values?(value1,?value2,...valueN);對于數據,字符串需要添加“ ”,數字不用。列名則都不需要
update操作update?table_name?set
field1=new-value1,
field2=new-value2,
field3=new-value3
[where?Clause]where條件如果不加,影響所有行
delete操作delete?from?table_name?[where?Clause]where條件如果不加,影響所有行
select操作select?column_name,column_name?from?table_name?[where?Clause]
select?column_name,column_name?from?table_name?[where?Clause?in?(value1,value2,value3)]
//列舉查詢
select?column_name,column_name?from?table_name?[where?Clause?between?value1?and?value2]
//區間查詢
select?column_name,column_name?from?table_name?[where?Clause?like?"%X%"]
//模糊查詢
查詢模型在查詢時可以將列看做變量進行運算select?列1,?列2,?列1+列2?from?table_name?[where?Clause]?[offset?M]?[limit?N]從表中選出指定的屬性值組成一個新表,即為投影;上面的查詢語句屬于廣義投影;
where和后面的語句構成一個布爾表達式,解析查詢語句時,數據庫從頭到尾根據where條件遍歷整張表的每條記錄,如果結果為1,則輸出相應的記錄結果,如果結果為0,則查看下一條記錄,直至查詢出結果。例如,查詢條件[where 1]將輸出整張表,[where 0]將什么也查不到。
奇怪的NUllselect?列1,?列2?from?table_name?where?列名?is?null
select?列1,?列2?from?table_name?where?列名?is?not?nullnull表示空值,但null=null為假
在設計表時,應盡量不允許使用null
group分組統計max()????//求最大值
count()??//求行數
avg()????//求平均數
min()????//求最小值
sum()????//求總和
查詢格式select?列1,?列2,?sum(列1+列2)?from?table_name?group?by?列3group查詢時會先根據where條件對數據進行排序,所以,分組查詢是是比較耗費數據庫系統資源的,應盡量避免
having篩選結果集select?列1,?列2,?sum(列1+列2)?as?X?from?table_name?having?[X?>?100]在上式中?sum(列1+列2) 就是結果集,然后重命名為 X ,兩者可以看做近似相等,但也有不同之處。
where 是對數據表中的原始數據進行篩選,因為X并不是數據表中的原始項,所以會報錯。
having 是對已經篩選出來的結果集進行再次篩選,如果將其替換為 where 數據庫無法執行。
習題練習
查詢出2門及2門以上不及格者的平均成績select?name,sum(score<60)?as?gk,avg(score)?as?pj?form?resule?group?by?name?having?gk>=2先查所有人所有科的平均分,再利用having篩選誰掛科量在2門及其以上
order排序select?列1,?列2?from?table_name?order?by?列3?[asc/desc],列4?[asc/desc]默認為升序排列【asc】
上式表示先根據列3進行排序,然后結果集再根據列4進行排序,例如,先按照國籍排序,同一國人再按照年齡排序
limit用法select?列1,?列2?from?table_name?order?by?列3?[asc/desc],列4?[asc/desc]?limit?[偏移量,取出條數]偏移量表示跳過前幾條數據,如果為0則可以不寫
子句查詢陷阱where?->?group?by?->?having?->?order?by?->?limit5種子句查詢有嚴格的順序,不允許隨意變換
where型子查詢select?列1,?列2?from?table_name?where?列1?=?(select?max(列1)?from?table_name)內層查詢結果作為外層查詢條件
from型子查詢select?列1?from?(select?列1,?列2?from?table_name?order?by?列3)
exists型子查詢select?*?from?表1?where?exists?(select?*?from?表2?where?表1.列1?=?表2.列2)
內連接查詢boy表girl表
hidbnamehidgname
A屌絲B小龍女
B楊過C祝英臺
C梁山伯D腐女
編號一樣表示夫妻關系。要求聯表查詢出具有夫妻關系的人物名稱。select?boy.hid,boy.name,girl.his,girl.name
from
boy?inner?join?girl
on?b.hid?=?girl.hid
執行結果如下boy.hidboy.namegirl.hidgirl.name
B楊過B小龍女
C梁山伯C祝英臺
左右連接查詢 【繼續沿用上面兩張表】左連接:以左表為基準,到右表找匹配的數據,找不到匹配的用NULL補齊。查詢格式如下select?boy.hid,boy.name,girl.his,girl.name
from
boy?left?join?girl
on?b.hid?=?girl.hidboy.hidboy.namegirl.hidgirl.name
A屌絲nullnull
B楊過B小龍女
C梁山伯C祝英臺右連接:以右表為基準,到左表找匹配的數據,找不到匹配的用NULL補齊。查詢格式如下select?boy.hid,boy.name,girl.his,girl.name
from
boy?right?join?girl
on?b.hid?=?girl.hidboy.hidboy.namegirl.hidgirl.name
B楊過B小龍女
C梁山伯C祝英臺
nullnullD腐女可以連續進行連表查詢,但是在寫查詢語句時,需要將對連續連接的表起別名,加以區分,避免沖突。
union查詢union查詢就是把2條或多條的sql查詢結果。合并成一個結果集sql1???-->???N?行
sql2???-->???M?行
sql1?union?sql2??-->?N+M?行使用前提:各語句取出的列數相同,列名稱未必要求一致,列名稱會使用是一條sql的列名稱為準
使用union時,完全相等的行將會被合并【合并時比較耗時的操作】,一般不讓union進行合并,使用“union all”可以避免。
union子句中,不用寫order by ,因為合并后得到的最后結果可以order by,子句order by失去意義
總結
以上是生活随笔為你收集整理的mysql中的dml操作_MySQL操作语言[DML]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 饮用水被亚硝酸盐污染会使胃癌发病率升高吗
- 下一篇: 字可以用作女孩名字吗?