更新數(shù)據(jù)
- 基本語法
update 表名 set 字段 = 值[,字段2=值] [where 條件] - 高級新語法(限制數(shù)量)
update 表名 set 字段 = 值[,字段2=值] [where 條件][limit 更新數(shù)量]
update my_copy set name = 'c' where name = 'a' limit 3; -- 更新記錄中含有name= a的前三條
刪除數(shù)據(jù)
- 普通刪除
delete from 表名 [where 條件]; - 限制刪除
delete from 表名 [where 條件] limit 記錄數(shù);
delete from my_copy where name = 'a' limit 10; -- 刪除前10條
- 在刪除場景中,如果表中主鍵存在自增長,當記錄刪除后狭吼,自增長不會還原邓梅。
思路:請空表猜年,充值自增長
數(shù)據(jù)刪除不會影響表結(jié)構(gòu)替饿,只能刪除表后重建表
truncate 表名; -- 先刪除赞别,后新增改變
查詢數(shù)據(jù)
- 基本語法
select 字段列表/* from 表名[where 條件]; - 完整語法
select [select 選項] 字段列表[字段別名]/* from 數(shù)據(jù)源 [where 條件子句] [group by 條件子句] [having 條件子句] [order by 條件子句] [limit 條件子句]
(1) select 選項 :
select 對查出結(jié)果的處理方式:
- all:默認選項,保留所有結(jié)果
- distinct :去重岛琼,(兩條記錄的所有字段相同)
(2)字段別名
當查詢數(shù)據(jù)時底循,字段的名字并不一定能滿足需求(尤其是多表查詢時,會出現(xiàn)同名字段)所以需要對字段名進行重命名槐瑞。
語法:
字段名 as 別名
select id,number as 學號,name as 姓名, sex as 性別 from my_student;
(3) 數(shù)據(jù)源
數(shù)據(jù)源即數(shù)據(jù)庫中的表熙涤,只要結(jié)構(gòu)上構(gòu)成二維表,都滿足數(shù)據(jù)源的要求困檩。有三種來源:
單表數(shù)據(jù)源灭袁,多表數(shù)據(jù)源,查詢語句
- 單表數(shù)據(jù)源
select * from 表名
- 單表數(shù)據(jù)源
select * from 表名1,表名2,表名3...
- 查詢語句
因為查詢語句也是二維表結(jié)構(gòu)
select * from (select 語句) as 表名
SELECT * FROM (select * from
banner_item)as item
(4)where 子句
用來判斷和篩選數(shù)據(jù)窗看,where 子句返回的結(jié)果:0或者1茸歧,沒有bool 類型,0代表false ,1代表true显沈。
where 1代表匹配所有條件都成立
- 判斷條件:
比較運算符:> ,< ,>=,<=,!=, <>(不等于),=,like,between and,in,not in
邏輯運算符:&& 软瞎,||,拉讯!
where原理:where語句是唯一一個在磁盤獲取數(shù)據(jù)就開始判斷的條件涤浇,判斷如果符合條件,則將數(shù)據(jù)放到內(nèi)存魔慷。
select * from my_student where id = 1 || id = 3 || id =5;
select * from my_student where id in(1,3,5)
select * from my_student where height >= 170 && height <= 180;
select * from my_student where height between 170 and 180;
PS :between 是區(qū)間值只锭,左邊的值一定要小于等于右邊的值
(5)group by
分組的意思,根據(jù)某個字段分組院尔,相同的分到同一組
基本語法:group by 字段名
分組的意義是為了統(tǒng)計數(shù)據(jù)(按組統(tǒng)計:按分組字段進行統(tǒng)計)蜻展;
分組一般和統(tǒng)計函數(shù)一起使用
SQL 提供了一系列的統(tǒng)計函數(shù):
count():統(tǒng)計分組后的記錄數(shù),每一組有多少記錄
count()有兩種參數(shù)邀摆,count(*)代表統(tǒng)計記錄纵顾,count(字段名)代表統(tǒng)計對應(yīng)的字段,但記錄中有null的 不統(tǒng)計施逾。
max():統(tǒng)計每組中的最大值
min():統(tǒng)計每組中的最小值
avg():統(tǒng)計平均值
sum():統(tǒng)計和
統(tǒng)計商品中推薦產(chǎn)品總數(shù):
- 單字段分組
SELECT recommend, COUNT(*) FROM `product` GROUP BY `recommend` ;
SELECT recommend, COUNT(*),sum(`price`) ,max(`stock`) ,min(stock),avg(`price`) FROM `product` GROUP BY `recommend` ;
- 多字段分組
SELECT `class_id` ,`sex` ,COUNT(*) FROM `student` GROUP BY `class_id` ,`sex` ;
-- 先按班級分組,再按性別分組
SELECT `class_id` ,`sex` ,COUNT(*),group_concat(name) FROM `student` GROUP BY `class_id` ,`sex` ;
-- group_concat 函數(shù)可以將結(jié)果中的某個字段進行字符串連接
- 回溯統(tǒng)計 with rollup
任何一個分組后例获,都會有一個小組汉额。最后都需要向上級根據(jù)分組字段匯報統(tǒng)計結(jié)果。
SELECT `class_id` ,COUNT(*) FROM `student` GROUP BY `class_id` with rollup ;
(6)having 子句
與where子句一樣讥脐,進行條件判斷啼器。
where子句是針對磁盤數(shù)據(jù)進行判斷,在數(shù)據(jù)進入內(nèi)存后岖免,進行了一些諸如分組操作后,分組的結(jié)果就需要having子句來處理颅湘。
having幾乎能做where的所有操作鹿寨。但having能做的有些處理薪夕,where卻不能。具體表現(xiàn)如下:
1.having 能做分組后的統(tǒng)計操作馏慨,where卻不能姑隅,因為統(tǒng)計函數(shù)是內(nèi)存級別叮盘,where操作的數(shù)據(jù)還在磁盤中
SELECT `recommend` , COUNT(*) FROM `product` GROUP BY `recommend`
-- 選出商品是否推薦的分組
SELECT `recommend` , COUNT(*) FROM `product` GROUP BY `recommend` HAVING COUNT(*) >8
-- 選出推薦商品和非推薦商品中大于8的商品個數(shù)
SELECT `recommend` , COUNT(*) FROM `product` WHERE COUNT(*) >8 GROUP BY `recommend`
-- 錯誤
2.having 能使用字段別名愈魏,而where不能
SELECT `recommend` , COUNT(*) as total FROM `product` GROUP BY `recommend` HAVING total >8
(7) order by
排序 根據(jù)某個字段進行升序或者降序排序胡本。依賴于校對集披粟,有校對集判斷是否區(qū)分大小寫等等
使用語法:order by 字段名 [asc|desc] -- 默認asc 升序
SELECT * FROM `product` ORDER BY `stock`
排序也可以多字段排序冷冗,先按一個字段排碰镜,再次基礎(chǔ)再進行排序
SELECT * FROM `product` ORDER BY `recommend` DESC ,`stock`
(8) limit
limit 是一種限制數(shù)量的語句
limit有兩種方式:
- 只用來限制長度
SELECT * FROM `product` LIMIT 10
- 限制起始位置
語法:limit 起始位置,長度
SELECT * FROM `product` LIMIT 0 ,10
SELECT * FROM `product` LIMIT 10 ,10
limit 常用于數(shù)據(jù)分頁