【瞎老弟mysql】10-数据的排序

前情回顾

试设想这样一个场景,班级组织了一场考试,考试结束后,要根据分数,进行排名,此时,如果只有分组聚合的能力的话,肯定是显得有些不足的,我们也需要有排序的能力。

为了,能够记录所有人的分数,我们创建这样一个数据表

create table Score(
    id int not null auto_increment,
    name varchar(50) not null,
    math int,
    python int,
    mysql int,
    primary key(id)
);

当然,我们还要插入一些数据

insert into Score values
    (0, '瞎老弟', 33, 100, 100),
    (0, '瞎老妹', 89, 77, 63),
    (0, '北小鸟', 78, 78, 88),
    (0, '科斯基', 89, 99, 96),
    (0, '嘉陵姬', 99, 12, 13),
    (0, '神老弟', 99, 99, 99);

使用order by进行排序

select <列1>, <列2>...

        from <表名>

        order by <列1>, <列2>...

 比如说,如果我们希望对数学成绩进行排序,那么需要这样做

select name, math, python, mysql
    from Score
    order by math;

排序,所使用的默认顺序是升序,也就是从小到大的顺序,进行排序。

如果我们不想使用升序进行排序,而是希望使用降序进行排序,也就是从大到小排序,那么需要加入关键字,desc

select <列1>, <列2>...

        from <表名>

        order by <列> desc;

比如说,如果我们要对数学成绩进行降序排序,那么需要这样做。

select name, math, python, mysql
    from Score
    order by math desc;

需要说明的是,默认的升序排序,也是可以通过asc进行指定的,不过由于升序使用的asc是默认的排序方式,因此一般无需指定asc,只需要在降序排序的时候,指定desc就可以了。

ascendent 上升的(读作:鹅三等特)

descendent 下降的(读作:迪三等特)

排序的时候,我们也可以指定多个列同时进行排序,比如,我们发现当使用升序排序数学成绩的时候,有的人的成绩重复了,因此我们希望,如果在升序排序数学成绩的时候,成绩发生了重复,那么我们就降序排列python成绩,我们可以这样做

select name, math, python, mysql
    from Score
    order by math, python desc;

order by排序的时候,也可以使用select并没有选择的字段,比如说,我们通过数学成绩对每个人进行排序,但是我们不要查询出他们所对应的数学成绩

select name
    from Score
    order by math;

当然,这里可能又有人有疑问说,我不想按照单科成绩进行排名,我希望能够对总分进行排名,这应该怎么办呢。很简单,只需要使用我们之前章节中学习过的运算符就可以了,比如说,像这样使用

select name, math, python, mysql
    from Score
    order by math + python + mysql;

通过字段顺序进行排序

比如说,之前,我们在通过数学成绩进行排序的时候,是这样使用的。

select name, math, python, mysql
    from Score
    order by math;

从这里,我们可以看出,name排在第1个,math排在第2个,python排在第3个,mysql排在第4个。因此,我们想到了一种简化的排序方式,也就是说,通过指定数字,来进行排序。

select name, math, python, mysql
    from Score
    order by 2;

由于math就是第2个,因此,在这里,order by 2等同于order by math。

不过需要注意的是,最好请不要使用这种方式,主要有以下两个原因

1,通过数字省略了名字的这种排序方式,虽然在写sql语句的时候,简化了一点操作,但是在阅读sql语句的时候,却增加了一些麻烦。这种语句既不便阅读,也更容易出现错误。

2,使用数字进行排序的这种方式,会给sql注入带来便利,不利于数据库的安全性。比如说,order by配合数字的方式,可能在sql注入的时候,用于猜解字段个数,因此这种写法,在未来可能会被移除。因此,如果你在你的代码中使用了这种方式,那么未来使用新版本的数据库的时候,也许会出现代码报错的情况。(关于sql注入,并不是本系列的重点,因此只会在本系列后期的补充篇中进行简单的介绍。)

点击查看瞎老弟mysql系列全部文章

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值