mysql 表数据高级操作

更新数据

  • 基本语法
    update 表名 set 字段 = 值[,字段2=值] [where 条件]
  • 高级新语法(限制数量)
    update 表名 set 字段 = 值[,字段2=值] [where 条件][limit 更新数量]
update my_copy set name = 'c' where name = 'a' limit 3; -- 更新记录中含有name= a的前三条

删除数据

  • 普通删除
    delete from 表名 [where 条件];
  • 限制删除
    delete from 表名 [where 条件] limit 记录数;
delete from my_copy where name = 'a' limit 10; -- 删除前10条
  • 在删除场景中,如果表中主键存在自增长,当记录删除后,自增长不会还原。
    思路:请空表,充值自增长
    数据删除不会影响表结构,只能删除表后重建表
    truncate 表名; -- 先删除,后新增改变

查询数据

  • 基本语法
    select 字段列表/* from 表名[where 条件];
  • 完整语法
select [select 选项] 字段列表[字段别名]/* from 数据源 [where 条件子句] [group by 条件子句] [having 条件子句] [order by 条件子句] [limit 条件子句]

(1) select 选项 :

select 对查出结果的处理方式:

  • all:默认选项,保留所有结果
  • distinct :去重,(两条记录的所有字段相同)

(2)字段别名

当查询数据时,字段的名字并不一定能满足需求(尤其是多表查询时,会出现同名字段)所以需要对字段名进行重命名。
语法:
字段名 as 别名

select id,number as 学号,name as 姓名, sex as 性别 from my_student;

(3) 数据源

数据源即数据库中的表,只要结构上构成二维表,都满足数据源的要求。有三种来源:
单表数据源,多表数据源,查询语句

  • 单表数据源
    select * from 表名
  • 单表数据源
    select * from 表名1,表名2,表名3...
  • 查询语句
    因为查询语句也是二维表结构
    select * from (select 语句) as 表名
    SELECT * FROM (select * frombanner_item)as item

(4)where 子句

用来判断和筛选数据,where 子句返回的结果:0或者1,没有bool 类型,0代表false ,1代表true。
where 1代表匹配所有条件都成立

  • 判断条件:
    比较运算符:> ,< ,>=,<=,!=, <>(不等于),=,like,between and,in,not in
    逻辑运算符:&& ,||,!
    where原理:where语句是唯一一个在磁盘获取数据就开始判断的条件,判断如果符合条件,则将数据放到内存。
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 是区间值,左边的值一定要小于等于右边的值

(5)group by

分组的意思,根据某个字段分组,相同的分到同一组
基本语法:group by 字段名

分组的意义是为了统计数据(按组统计:按分组字段进行统计);
分组一般和统计函数一起使用
SQL 提供了一系列的统计函数:
count():统计分组后的记录数,每一组有多少记录
count()有两种参数,count(*)代表统计记录,count(字段名)代表统计对应的字段,但记录中有null的 不统计。
max():统计每组中的最大值
min():统计每组中的最小值
avg():统计平均值
sum():统计和

统计商品中推荐产品总数:

  • 单字段分组
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 函数可以将结果中的某个字段进行字符串连接
  • 回溯统计 with rollup
    任何一个分组后,都会有一个小组。最后都需要向上级根据分组字段汇报统计结果。
SELECT `class_id` ,COUNT(*) FROM `student` GROUP BY `class_id`  with rollup ;
屏幕快照 2017-08-08 下午12.27.52.png

(6)having 子句

与where子句一样,进行条件判断。
where子句是针对磁盘数据进行判断,在数据进入内存后,进行了一些诸如分组操作后,分组的结果就需要having子句来处理。
having几乎能做where的所有操作。但having能做的有些处理,where却不能。具体表现如下:
1.having 能做分组后的统计操作,where却不能,因为统计函数是内存级别,where操作的数据还在磁盘中

SELECT `recommend` , COUNT(*) FROM `product` GROUP BY `recommend` 
-- 选出商品是否推荐的分组
屏幕快照 2017-08-08 下午3.36.23.png
SELECT `recommend` , COUNT(*) FROM `product` GROUP BY `recommend` HAVING  COUNT(*) >8
-- 选出推荐商品和非推荐商品中大于8的商品个数

屏幕快照 2017-08-08 下午3.39.16.png
SELECT `recommend` , COUNT(*) FROM `product`  WHERE   COUNT(*) >8 GROUP BY `recommend` 
 -- 错误
屏幕快照 2017-08-08 下午3.45.05.png

2.having 能使用字段别名,而where不能

SELECT `recommend` , COUNT(*) as total FROM `product` GROUP BY `recommend` HAVING  total >8

(7) order by

排序 根据某个字段进行升序或者降序排序。依赖于校对集,有校对集判断是否区分大小写等等

使用语法:order by 字段名 [asc|desc] -- 默认asc 升序

SELECT * FROM `product` ORDER BY   `stock` 

排序也可以多字段排序,先按一个字段排,再次基础再进行排序

SELECT * FROM `product` ORDER BY   `recommend` DESC ,`stock` 

(8) limit

limit 是一种限制数量的语句

limit有两种方式:

  • 只用来限制长度
SELECT * FROM `product`  LIMIT 10
  • 限制起始位置
    语法:limit 起始位置,长度
SELECT * FROM `product`  LIMIT 0 ,10
SELECT * FROM `product`  LIMIT 10 ,10

limit 常用于数据分页

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,585评论 4 365
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,923评论 1 301
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,314评论 0 248
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,346评论 0 214
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,718评论 3 291
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,828评论 1 223
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,020评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,758评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,486评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,722评论 2 251
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,196评论 1 262
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,546评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,211评论 3 240
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,132评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,916评论 0 200
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,904评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,758评论 2 274

推荐阅读更多精彩内容

  • 什么是SQL数据库: SQL是Structured Query Language(结构化查询语言)的缩写。SQL是...
    西贝巴巴阅读 1,768评论 0 10
  • 50个常用的sql语句Student(S#,Sname,Sage,Ssex) 学生表Course(C#,Cname...
    哈哈海阅读 1,207评论 0 7
  • 1、说明:创建数据库CREATE DATABASE database-name2、说明:删除数据库drop dat...
    codeSirCao阅读 422评论 0 2
  • 前言 之前文章就粗略的设计到了多线程,比如说gcd。其实关于多线程的呢还有NSThread,NSOperation...
    __夏至未至阅读 321评论 0 0
  • 我曾住的一座城 叫芜湖 也叫江城 在那度过三年时光 我时常去看望 那同岁月般长的江 她蓬乱的头发 令人心寒 下雨了...
    海水未顶阅读 205评论 0 1