mysql系列——常用关键字详解(五)

1.查询语句关键字顺序

  select  字段们  from  表1  join  表2  on  条件  where  条件  and  条件  group by  字段们 

  having  分组后的条件  order by  字段们  排序方式  limit  分页 ;(排序方式在limit之前,默认asc)

2.常用关键字及基本用法

1、distinct关键字

显示没有重复记录的商品名称,商品价格列表
select distinct ware_name,price from t_ware;

2、使用计算列

查询所有商品价格提高20%后的价格
select ware_id,ware_name,price*1.2 from t_ware;

3、as:给列起别名

不省略as
select ware_id,ware_name,price*1.2 price_raise from t_ware;
省略as
select ware_id,ware_name,price*1.2 as price_raise from t_ware;

4、使用逻辑表达式 and or not

or 显示商品类别编号为6或7的商品
select ware_id,ware_name,price from t_ware where category_id=6 or category_id=7;
not 显示商品价格不大于100的商品
select ware_id,ware_name,price from t_ware where not price>100;
and 显示商品价格大于100且商品类别编号为5的商品
select ware_id,ware_name,price from t_ware where price>100 and category_id = 5;

5、使用between关键字

显示商品价格在200元至1000元之间的商品(留心一下,是半开区间还是封闭区间?)
select ware_id,ware_name,price from t_ware where price between 200 and 1000;

6、in、not in查询

显示商品类别为5,6,7且价格不小于200元的商品
select ware_id,ware_name,price,category_id from t_ware where category_id in (5,6,7) and price>=200;

7、使用like子句进行模糊查询

%(百分号)表示0到n个任意字符
select ware_id,ware_name,price from t_ware where ware_name like '%纯棉%';

_(下划线)表示单个的任意字符
select ware_id,ware_name,price from t_ware where ware_name like '%长袖_恤%';

8、limit 筛选数据

给定两个参数时,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目
select * from user limit  5,10;  // 检索记录行 6-15

如果只给定一个参数,它表示返回最大的记录行数目,换句话说,limit  n 等价于 limit 0,n。 
select * from user limit 5;     //检索前5个记录行

当 limit和offset组合使用时,limit后面只能有一个参数,表示要取的数量,offset表示要跳过的数量 。 
select * from user limit 3 offset 1;    

9、case when 的基本使用。 深入了解https://www.cnblogs.com/wffzk/p/13141052.html

select
  name  '英雄',           (此处name 后面as省略)    
  case name
     when '德莱文'    then '斧子'     
     when '盖伦'     then '大宝剑'     
     when '暗夜猎手' then '弩'     
     else '无'     
     end '装备'  (此处end后面as省略)  
from user_info; 

10、转义字符escape的使用

select ware_id,ware_name,price from t_ware where ware_name like '%\%%' escape '\';

11、使用group by

统计每个二级类别下有多少商品,以及商品总价值
select w.category_id,wc.category_name,count(w.ware_id),sum(w.price) from t_ware w left join t_ware_category wc on w.category_id=wc.category_id group by w.category_id,wc.category_name;

12、使用having对结果进行筛选

查询user表查询每一个班级中年龄大于20,性别为男的人数
select count(*)as '大于20岁人数',classid  from user where sex='男' group by classid,age having age>20 ;

13、使用order by 排序

默认升序
select * from t_ware_category where parent_id = 0 order by ware_id ;
升序(由小到大)
select * from t_ware_category where parent_id = 0 order by ware_id asc;
降序(由大到小)
select * from t_ware_category where parent_id = 0 order by ware_id desc ;

14、常用统计函数

sum():返回一个数字列或计算列的总和 select sum(price) from t_ware;
avg():对一个数字列或计算列球平均值
min():返回一个数字列或一个数字表达式的最小值
max():返回一个数字列或一个数字表达式的最大值
account():返回满足select语句中指定的条件的记录值

15、is null、is not null(null值专用查询)

null值存在的坑:查询运算符、like、between…and…、in、not in对null值查询不起作用

mysql为提供了查询空值的语法:is null、is not null。

select 列名 from 表名 where 列 is null;
select 列名 from 表名 where 列 is not null;

经典面试题   下面2个sql查询结果一样吗?

select * from students;

select * from students where name like '%';

结果分为两种情况:

  1. 当name没有null值时,返回的结果一样;
  2. 当name有null值时,第2个查询不出name为null的记录。

关键字知识拓展:

     in 和 exists的区别:

     in常用于where表达式中,其作用是查询某个范围内的数据。not in与in作用相反

  in列表的值类型必须一致或兼容;in列表中不支持通配符

     in()适合B表比A表数据小的情况;exists()适合B表比A表数据大的情况

  select from A where id in(select id from B)

  select a.from A a where exists(select from B b where a.id=b.id)

  where 和 having 的区别:

    where用于分组前,满足where条件后才会进行分组中,having用于分组后,满足分组后的条件才会被查询出

  where不能对聚合函数进行判断,having可以对聚合函数进行判断

  group by 和 order by的区别:

  group by:就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理。

  order by:用来对数据库的一组数据进行排序,可以是多个字段    desc:降序    asc:升序(默认)

  原始表:

              

  (1)group by 和聚合函数一起使用

    

      

   (2)group by 和order by连用

    

      

  (3)按几个条件分组,如下按照lei和info进行分组

    

    

posted @ 2022-08-11 15:28  江南大才子  阅读(946)  评论(0编辑  收藏  举报