(一) 算术运算符
注意:
- 在除法运算和模运算中,如果除数为0,将是非法除数,返回结果为NULL。
- div运算符主要是求两个数相除的商
(二) 比较运算符:比较运算符的运算结果为1(条件为真),0(条件为假)
注意:
- between的格式:between 值1 and 值2,表示值1到值2间的所有数据,包含值1和值2,如select 5 between 1 and 10;
- in的格式:in (值1,值2,值3…),只要值括号里面的值就表示符合条件,如select 5 in (1,3,5);
- like的示例:select ‘李晓明’ like ‘李%’;
(三) 逻辑运算符:运算结果为1(条件为真),0(条件为假)
注意:逻辑运算符的运算规律
1、 and运算规律
真 and 真 = 真
真 and 假 = 假
假 and 真 = 假
假 and 假= 假
2、 or运算规律
真 or 真 = 真
真 or 假 = 真
假 or 真 = 真
假 or 假 = 假
3、 not运算规律:非真即假,非假即真
二、数据查询
(一) 格式1(查询所有数据):select * from 表名;
(二) 格式2(查询指定字段):select 字段名1,字段名2… from 表名;
(三) 格式3(查询指定数据):select 字段名1,字段名2… from 表名 五大子句;mysql中五大子句包含where/group by/having/order by/limit,这五种子句顺序不可以改变。
三、where子句的使用
(一) 使用比较运算符作为条件:select 字段名1,字段名2… from 表名 where 条件;
(二) 使用like实现模糊查询(适用于对文本查询),格式:select 字段名1,字段名2… from 表名 where 字段名 like ‘条件’;注意条件中可以加通配符(%表示任意个任意字符,_表示任意一个字符),如果要将通配符变为普通字符,那么需要在它前面加\,即采用\%的形式
(三) 以值是否为空作为条件——is null和is not null
四、对查询结果的处理
(一) 聚合函数的使用:max、min、sum、avg、count
1、 格式:select 函数(字段名) as ‘别名’ from 表名 条件;
2、 示例:select count(price) as '个数' from book;
3、 注意:聚合函数通常和分组语句group by结合使用
(二) 对查询结果的去重处理——distinct关键字
1、 格式:select distinct 字段名 from 表名 where 条件;
(三) 为查询结果起别名——as关键字
1、 格式:select 字段名 as 别名 from 表名 where 条件;
五、group by子句的使用
(一) 作用:group by子句的作用是对数据进行分组
(二) 格式:select 要查找的内容 from 表名 group by 字段名;
(三) 示例:select cat_id, max(shop_price) as '每个栏目中最贵的价格' from ecs_goods group by cat_id;
(四) 注意在使用聚合函数和分组时,要显示的字段的名称不可以超出分组依据的字段名和聚合函数对应的字段名,即select cat_id, goods_name,max(shop_price) as '每个栏目中最贵的价格' from ecs_goods group by cat_id;是错误的,不可以有goods_name
六、having子句的使用
(一) 作用:having子句的作用和where类似,都是具有根据条件对数据进行过滤的作用,不同点在于having在group by之后,而where在group by之前,另外where是先过滤后聚合,having是先聚合后过滤
(二) 案例1:从ecs_goods表查询比市场价便宜200元以上的商品及该商品所省的钱(注:market_price-shop_price)
1、 方法1:select goods_name, (market_price-shop_price) from ecs_goods where (market _price-shop_price)>200;
2、 方法2:select goods_name, (market_price-shop_price) as chajia from ecs_goods hav ing chajia>200;
(三) 案例2:从ecs_goods表中查询积压货款总额超过2W元的栏目,以及该栏目积压的货款(注:积压货款=goods_number*shop_price)
1、 方法:select cat_id,sum(goods_number*shop_price) as total from ecs_goods group by cat_id having total>20000;
(四) 案例3:在ecshop1库中的stu表中查询查询出2门及2门以上不及格者的平均成绩
1、 方法:select name,avg(score), sum(score<60) as 'small' from stu group by name h aving small>=2;
七、order by子句:对查询出来的数据进行排序
(一) 格式:select 查询的内容 from 表名 order by 字段1 排序方式,字段2排序方式…;
(二) 示例:select cat_id, goods_name, shop_price from ecs_goods order by cat_id desc ,shop_price asc;
(三) 注意:排序方式分为asc(升序,默认)、desc(降序)
八、limit子句:限制显示搜索到的数据的条目数
(一) 格式:select 查询的内容 from 表名 limit 编号,条目数;
(二) 注意:编号从0开始,即第一条数据的编号为0,如果只写编号,不写条目数,那么表示只显示第一条
(三) 习题:从book表中检索出id9前一条数据:select id, bookname from book where id<9 order by id desc limit 1;
九、查询语句的执行顺序:from、where、group by、聚合、having、order by、limit