条件、排序、分组

条件、排序、分组

也许你发现如此简单的查询删除、查询、修改的操作并不能满足我们的需求。sql中where、order by 、group by 、having 等一些关键字将会来满足你的需求。

where

在之前的文章的修改和删除中都涉及了where关键字,where的作用就是用来设置相关条件的。where 的后面可以放上相关的条件作为判断。

实例1

update `student` set name="小张三" where id = 1 ;

此时id=1 就是一个条件,sql语句的含义就是将id=1的所有记录中的name设置为小张三

实例2

update `student` set sex="女" where id = 1 and name = "小张三";

id = 1 and name = "小张三"(and表示和、并且,就是同时满足这两个条件)的所有记录的name设置为

实例3

update `student` set sex="女" where id = 1 or name = "小张三";

id = 1 or name = "小张三"(or表示或者,就是满足其中一个条件即可)的所有记录的name设置为

  • 同时还有其他的条件例如

对于数值有>、>=、<、<=、between...and...

还有一些特殊的like、in

like

like可以理解为像的意思,对应的需要一个包含通配符的表达式

通配符有:

%表示任意字符_表示一个字符

实例1

update `student` set sex="女" where  name = "小%三";

这个条件可以匹配小三、小瘪三、小张三、小三三三、小xxxxxx三

实例1

update `student` set sex="女" where  name = "小_三";

这个条件可以匹配小瘪三、小张三

in

实例

update `student` set sex="女" where  name in ("张三","李四","王五");

条件表示name在后面的集合当中

order by

我们再插入两条数据

insert into `student` (id,name,sex) 
values(3,"张三3","男");
insert into `student` (id,name,sex) 
values(2,"张三2","男");

将结果排序

降序

SELECT * FROM `student` order by id desc;

升序

SELECT * FROM `student` order by id asc;

默认(升序)

SELECT * FROM `student` order by id ;
group by

为了体现效果我们再插入一些数据

insert into `student` (id,name,sex) 
values(3,"李刘","男");
insert into `student` (id,name,sex) 
values(2,"刘丽","男");

实例1

select id,name ,count(name),count(id) from `student` group by id ,name ;

以id和name分组,id相同的为一组,name相同的为一组。

往往配合函数使用例如count()计算一组内的个数。

having

你可能有个疑问对于分组后的数据我们该如何设置条件进行筛选呢。where?where后面是不能跟随聚合函数的。所以有了having

实例

select id,name ,count(name),count(id) from `student` group by id ,name having count(name)>2 ;
结语

到这里我们已经了解了sql的一些基本的用法,对于select where order by group by having 这些关键字再sql语句中的执行顺序是否有疑问?

  • 接下来我来描述一下

首先通过from来获取数据源(这里面包含了表的连接join on),之后则是执行where group by having,经过相应的条件、分组得到最终结果集合,此时通过select输出结果,如果需要排序的则执行完order by后再执行select

可以看出sql语句是从where开始的最终是select结束。

在这之中可能有相应的嵌套循环,此时有点类似递归最终是从最内部开始执行,逐级返回。(详细的语义分析这里就不做说明了)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值