检索数据和排序

提示:从该章开始结合极客时间《SQL必知必会》


select语句

为了使用select语句, 必须至少给出两条信息——想选择什么,以及从哪里选择
select 列名1,列名2… from 表名

可以检索单个、多个、全部列。

SELECT prod_name FROM products; #单个
SELECT prod_id, prod_name,prod_price FROM products; # 多个列
SELECT * FROM products; # 全部

注意: 一般,除非你确定需要表中的每一个列,否则最好不要使用通配符 *,因为检索不需要的列通常会降低检索和应用程序的性能。

检索不同的行

在第一个列名前使用关键字DISTINCT
**注意: **

  • DISTINCT需要放到所有列名的前面。
  • DISTINCT其实是对后面所有的列名的组合去重。
select vend_id from products;
select distinct vend_id from products; # 去重

限制结果 Limit

查询返回查询结果的第一行或前几行,可以使用LIMIT语句

SELECT prod_name FROM products LIMIT 5; # 返回不多于5行

可以指定要检索的开始行和行数

SELECT prod_name FROM products LIMIT 5,5; # 从行5开始的5行

注意:

  • 行0: 检索出来的第一行为行0而不是行1。因此LIMIT 1,1检索出来的是第二行而不是第一行。
  • 在行数不够时只返回它能够返回的那么多行
  • LIMIT 3,4的意思是从行3开始的4行,这容易把人弄糊涂。因此有另一种写法,LIMIT 4 OFFSET 3意为从行3开始取4行。

使用完全限定的表面

SELECT products.`prod_name` FROM products;
SELECT products.`prod_name` FROM mysqlstudy.`products`;

排序

使用ORDER BY 子句排序检索数据

  1. 排序的列名:ORDER BY 后面可以有一个或多个列名,如果是多个列名进行排序,会按照后面第一个列先进行排序,当第一列的值相同的时候,再按照第二列进行排序,以此类推。

  2. 排序的顺序:ORDER BY 后面可以注明排序规则,ASC 代表递增排序,DESC 代表递减排序。如果没有注明排序规则,默认情况下是按照 ASC 递增排序。我们很容易理解 ORDER BY 对数值类型字段的排序规则,但如果排序字段类型为文本数据,就需要参考数据库的设置方式了,这样才能判断 A 是在 B 之前,还是在 B 之后。比如使用 MySQL 在创建字段的时候设置为 BINARY 属性,就代表区分大小写。

  3. 非选择列排序:ORDER BY 可以使用非选择列进行排序,所以即使在 SELECT 后面没有这个列名,你同样可以放到 ORDER BY 后面进行排序。

  4. ORDER BY 的位置:ORDER BY 通常位于 SELECT 语句的最后一条子句,否则会报错。

补充

查询常数

SELECT 查询还可以对常数进行查询。对的,就是在 SELECT 查询结果中增加一列固定的常数列。这列的取值是我们指定的,而不是从数据表中动态取出的。 你可能会问为什么我们还要对常数进行查询呢?SQL 中的 SELECT 语法的确提供了这个功能,一般来说我们只从一个表中查询数据,通常不需要增加一个固定的常数列,但如果我们想整合不同的数据源,用常数列作为这个表的标记,就需要查询常数。比如说,我们想对 heros 数据表中的英雄名进行查询,同时增加一列字段platform,这个字段固定值为“王者荣耀”,可以这样写:


SELECT '王者荣耀' as platform, name FROM heros

在这里插入图片描述
在这个 SQL 语句中,我们虚构了一个platform字段,并且把它设置为固定值“王者荣耀”。需要说明的是,如果常数是个字符串,那么使用 单引号(‘’) 就非常重要了,比如‘王者荣耀’。单引号说明引号中的字符串是个常数,否则 SQL 会把王者荣耀当成列名进行查询,但实际上数据表里没有这个列名,就会引起错误。如果常数是英文字母,比如’WZRY’也需要加引号。如果常数是个数字,就可以直接写数字,不需要单引号,比如:


SELECT 123 as platform, name FROM heros

在这里插入图片描述

SELECT 的执行顺序

查询是 RDBMS 中最频繁的操作。我们在理解 SELECT 语法的时候,还需要了解 SELECT 执行时的底层原理。只有这样,才能让我们对 SQL 有更深刻的认识。

  1. 关键字的顺序是不能颠倒的:

SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ...
  1. SELECT 语句的执行顺序:

FROM > WHERE > GROUP BY > HAVING > SELECT的字段 > DISTINCT > ORDER BY > LIMIT

比如你写了一个 SQL 语句,那么它的关键字顺序和执行顺序是下面这样的:


SELECT DISTINCT player_id, player_name, count(*) as num #顺序5
FROM player JOIN team ON player.team_id = team.team_id #顺序1
WHERE height > 1.80 #顺序2
GROUP BY player.team_id #顺序3
HAVING num > 2 #顺序4
ORDER BY num DESC #顺序6
LIMIT 2 #顺序7

总结

在这里插入图片描述

https://time.geekbang.org/column/article/102111

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值