有時(shí)需要將表中的記錄去掉重復(fù)后顯示出來,可以用distinct關(guān)鍵字來實(shí)現(xiàn),例如執(zhí)行語句 SELECT * FROM user; 返回結(jié)果如下:
創(chuàng)新互聯(lián)公司是一家專業(yè)提供湘潭企業(yè)網(wǎng)站建設(shè),專注與做網(wǎng)站、成都做網(wǎng)站、H5高端網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為湘潭眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計(jì)公司優(yōu)惠進(jìn)行中。
此時(shí)看到id=2,3的記錄username字段相同,如果想查詢所有不重復(fù)的username,可以執(zhí)行如下:
SELECT distinct username FROM user;
例如執(zhí)行排序語句: SELECT * FROM user order by id asc; 得到三條升序的數(shù)據(jù),如果想限制只顯示2條,可以使用LIMIT關(guān)鍵字: SELECT * FROM user order by id asc limit 0,2; 。LIMIT后面跟著的表示起始偏移量和前N行記錄,默認(rèn)起始偏移量為0,所以這句話也可以寫為: SELECT * FROM user order by id asc limit 2; 。 LIMIT經(jīng)常和order by一起配合使用來進(jìn)行分頁顯示。
聚合操作的語法涉及下面幾個(gè)參數(shù):
示例:
表連接從大類上分為內(nèi)連接和外連接。二者區(qū)別在于內(nèi)連接只選出兩張表中互相匹配的記錄,外連接會選出其他不匹配的記錄。
示例:
創(chuàng)建一個(gè)雇員表deployee,有五個(gè)人:
再創(chuàng)建一個(gè)部門表,有4個(gè)部門:
某些情況下,查詢的條件是另外一個(gè)select語句的結(jié)果,這時(shí)用到子查詢。子查詢關(guān)鍵字有in,not in,= ,!=,exists,not exists等。
如執(zhí)行 select * from deployee where deployee.dep_id in (select dep_id from department); 也表示查詢有部門的雇員。如果子查詢記錄數(shù)唯一,可以使用=代替in:
select * from deployee where deployee.dep_id in (select dep_id from department where dep_id = 'sale'); 由于子查詢只有一條記錄,所有可以用等號
如果要求將兩個(gè)表的數(shù)據(jù)按照一定的查詢條件查詢出來后,將結(jié)果合并到一起顯示出來,需要使用union和union all關(guān)鍵字來實(shí)現(xiàn)。
union 和 union all的主要區(qū)別是union all是把結(jié)果集直接合并在一起,而union 是將union all后的結(jié)果進(jìn)行一次distinct,去除重復(fù)的記錄。
示例:
來自MySQL的學(xué)習(xí)筆記,寫的不對的地方大家多多指教哦
SELECT、DISTINCT、FROM、JOIN、ON、WHERE、GROUP BY、HAVING、SUM、COUNT、MAX、AVG、ORDER BY、LIMIT
SELECT-DISTINCT-FROM-JOIN-ON-WHERE-GROUP BY-HAVING-ORDER BY-LIMIT
必須字段:SELECT、FROM
可選字段:DISTINCT、JOIN、ON、WHERE、GROUP BY、HAVING、SUM、COUNT、MAX、AVG、ORDER BY、LIMIT
FROM-ON-JOIN-WHERE-GROUP BY(開始使用SELECT中的別名,后面的語句中都可以使用別名)-SUM、COUNT、MAX、AVG-HAVING-SELECT-DISTINCT-ORDER BY-LIMIT
FROM:從哪個(gè)表中檢索數(shù)據(jù)
ON:關(guān)聯(lián)條件,與join一起使用
JOIN:對需要關(guān)聯(lián)的表進(jìn)行關(guān)聯(lián)
WHERE:過濾數(shù)據(jù)條件,執(zhí)行順序:自下而上、從右到左
GROUP BY:將過濾的數(shù)據(jù)進(jìn)行分組,執(zhí)行順序:從左往右
SUM:求和
COUNT:數(shù)量統(tǒng)計(jì)
MAX:最大值
AVG:求平均值
HAVING:對分組的數(shù)據(jù)過濾條件,與group by一起使用
SELECT:查看結(jié)果集
DISTINCT:結(jié)果集去重
ORDER BY:排序,升序:ASC;降序:DESC
LIMIT:截取出目標(biāo)頁數(shù)據(jù)
詳細(xì)用法會在后面進(jìn)行補(bǔ)充
首先創(chuàng)建一張表,添加字段,表名字為:goodsmaster
添加數(shù)據(jù)的語法結(jié)構(gòu)為:
添加數(shù)據(jù)可以是插入數(shù)據(jù)或插入查詢的結(jié)果
1.1 插入數(shù)據(jù)
運(yùn)行語句,查詢結(jié)果:SELECT * FROM goodsmaster
部分字段有做非空約束,那么這邊插入部分?jǐn)?shù)據(jù),驗(yàn)證下非空約束
上面的語句運(yùn)行之后會報(bào)錯(cuò),錯(cuò)誤內(nèi)容為“[Err] 1364 - Field 'barcode' doesn't have a default value”,即“barcode”這個(gè)字段有創(chuàng)建非空約束,表示這個(gè)字段不能為空,如果插入數(shù)據(jù)時(shí)不給這個(gè)字段賦值,那么就需要給它一個(gè)默認(rèn)值。
部分字段沒有默認(rèn)值,可以為空,那么現(xiàn)在驗(yàn)證一下插入數(shù)據(jù)時(shí),這些字段不進(jìn)行賦值會有什么結(jié)果
運(yùn)行語句,查詢結(jié)果:SELECT * FROM goodsmaster
仔細(xì)看會發(fā)現(xiàn),上面的語句中插入數(shù)據(jù)也沒有插入“itemnumber”字段,這個(gè)字段有添加主鍵約束,不能為空,但由于設(shè)置了自增約束,所以沒有賦值也會自動在當(dāng)前字段最大值+1,這就是自增約束;
上面的語句顯示沒有進(jìn)行賦值的字段會默認(rèn)顯示Null。
1.2 插入查詢結(jié)果
MySQL 支持把查詢的結(jié)果插入到數(shù)據(jù)表中,我們可以指定字段,甚至是數(shù)值,插入到數(shù)據(jù)表中。
語法結(jié)構(gòu)為:
刪除語句使用DELETE刪除,語法結(jié)構(gòu)為:
刪除記錄可以使用WHERE來篩選刪除的數(shù)據(jù),下面為刪除“barcode”字段數(shù)據(jù)為006的記錄
由于部分?jǐn)?shù)據(jù)可以為空,所以再刪除的時(shí)候,WHERE的過濾條件必須用到主鍵約束或者唯一性約束的字段。MySQL 的這種安全性設(shè)置,主要就是為了防止刪除或者修改數(shù)據(jù)時(shí)出現(xiàn)誤操作,導(dǎo)致刪除或修改了不相關(guān)的數(shù)據(jù)。
刪除表中的全部數(shù)據(jù)
MySQL中用UPDATE來修改數(shù)據(jù),語法結(jié)構(gòu)為:
注意:不要修改主鍵字段的值。因?yàn)橹麈I是數(shù)據(jù)記錄的唯一標(biāo)識,如果修改了主鍵的值,就有可能會破壞數(shù)據(jù)的完整性。
語法結(jié)構(gòu):
具體需要用到的關(guān)鍵字查看本文第一部分即可
別名有表別名和列別名
就是個(gè)表取名字和列取名字
列別名
表別名
(字句限定返回值)
—— 非(不是) 和 或
= = = (!=)基本比較運(yùn)算符 判斷字符串 數(shù)字 日期的大小。
賦值運(yùn)算符 :=
語句:**where 列名 between val1 and val2; **是一個(gè)閉區(qū)間
語句: where 列名 in (值1, 值2, ...); 判斷列的值是否在指定的集合中
判斷列的值是否為空
語句:**where 列名 is null; **
語句:**where 列名 is not null; **
% 表示零或多個(gè)任意的字符
_ 表示一個(gè)任意的字符
語法:**where 列名 like '_%'; **
語法: order by 列名
order by(升序)asc 可省略
order by desc 降序
注意:當(dāng) order by 子句中有使用了帶引號的別名時(shí),無法排序
如果數(shù)據(jù)量小則在內(nèi)存中進(jìn)行,如果數(shù)據(jù)量大則需要使用磁盤
Limit 顯示數(shù)據(jù)個(gè)數(shù)
Limit 起始位置,顯示數(shù)據(jù)個(gè)數(shù)
select 列表中的字段,
要么使用聚合函數(shù)或 group_concat() 包起來 ,
**要么必須出現(xiàn)在 group by子句中 **
having 與group by結(jié)合使用,用于將分組后的結(jié)果進(jìn)一步過濾
-count(*);可以獲取查詢的結(jié)果記錄條數(shù)
-- max():獲取最大值
-- min():獲取最小值
-- avg():獲取平均值
-- sum():指定字段求和