mysql 表数据高级操作

2017-08-07  本文已影响0人  陈智涛

更新数据

update my_copy set name = 'c' where name = 'a' limit 3; -- 更新记录中含有name= a的前三条

删除数据

delete from my_copy where name = 'a' limit 10; -- 删除前10条

查询数据

select [select 选项] 字段列表[字段别名]/* from 数据源 [where 条件子句] [group by 条件子句] [having 条件子句] [order by 条件子句] [limit 条件子句]

(1) select 选项 :

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

(2)字段别名

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

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

(3) 数据源

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

(4)where 子句

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

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 函数可以将结果中的某个字段进行字符串连接
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
SELECT * FROM `product`  LIMIT 0 ,10
SELECT * FROM `product`  LIMIT 10 ,10

limit 常用于数据分页

上一篇 下一篇

猜你喜欢

热点阅读