11_查询之order by和limit

select 5种子句:
	where 条件查询
	group by 分组
	having 筛选
	order by 排序
	limit 限制结果条数

---------------------

order by
排序
默认是升序asc
想要按降序排 desc
可以按多字段排序,如:
order by 字段1 asc/desc,字段2 asc/desc;

取出所有商品,按价格从低到高:(默认)
select goods_id,goods_name,shop_price from goods order by shop_price;

取出所有商品,按价格高到低:
select goods_id,goods_name,shop_price from goods order by shop_price desc;

取出不是栏目3的所有商品,按cat_id来升序排,相同的cat_id栏目再按商品价格降序排
select cat_id,goods_name,shop_price from goods
where cat_id != 3
order by cat_id,shop_price desc;

------------------------

limit
限制结果条数,在语句的最后。
通常和order by配合使用。

limit [offset],N
	offset	偏移量(可选,默认为0。如果不写,则相当于limit 0,N)
	N	取出的条数

取出商品最贵的前三个商品
select goods_name,shop_price from goods order by shop_price desc limit 3;

取出商品最贵的第三到第六个商品
select goods_name,shop_price from goods order by shop_price desc limit 3,3;
时间: 2024-10-22 18:25:38

11_查询之order by和limit的相关文章

MySQL查询子句(group by,limit,union,order by等)

Order by 按照字段值进行排序,默认升序(asc).校对规则决定排序关系. order by 字段 升序|降序(asc|desc), Order by允许多字段排序. 指的是,先按第一个字段排序,如果不能区分,才使用第二个字段,以此类推. create table test( id int primary key not null auto_increment, name varchar(10), group_id int ); insert into test values(null,'

记一次order by desc limit导致的查询慢

昨天接到一个客户的问题,电脑上可以打开网站,在手机上确不能打开报500的错.首先登陆上客户的服务器查看环境apache+mysql+php,php和mysql的占用都比较高,按经验来说那就是mysql的问题了,登陆mysql用show processlist查看进程,发现一条查询一直在sending date mysql> show processlist; +------+------+-----------------+--------+---------+------+----------

单表查询: where group by 分组 having distinct 去重 order by 排序 limit 多表查询 子查询 连表查询

今日内容 表查询 单表查询: where group by 分组 having distinct 去重 order by 排序 limit 多表查询 子查询 连表查询 单表查询 前期表准备 create table emp( id int not null unique auto_increment, name varchar(20) not null, sex enum('male','female') not null default 'male', #大部分是男的 age int(3) u

mysql同时使用order by和limit查询时的一个严重隐患 -- 丢失数据

我经常使用order by和limit来做数据分页显示并排序,一直也没发现过什么问题.但这两天缺遇到一个严重的问题,在按时间戳升序排列并用limit分批读取数据时,却发现在某些记录丢失了,表中明明有的记录确死活读取不到.研究了大半天终于发现了问题所在,记录一下以防忘记,也是给大家提个醒. 问题重现 工具和原料 数据库: Ver 14.14 Distrib 5.6.11, for Linux (x86_64) using EditLine wrapper 表结构: 字段 类型 说明 id int(

Mysql order by与limit混用陷阱

在Mysql中我们常常用order by来进行排序,使用limit来进行分页,当需要先排序后分页时我们往往使用类似的写法select * from 表名 order by 排序字段 limt M,N.但是这种写法却隐藏着较深的使用陷阱.在排序字段有数据重复的情况下,会很容易出现排序结果与预期不一致的问题. 比如现在有一张user表,表结构及数据如下: 表结构 表数据 现在想根据创建时间升序查询user表,并且分页查询,每页2条,那很容易写出sql为:select * from user orde

MYSQL随机抽取查询 MySQL Order By Rand()效率问题

MYSQL随机抽取查询:MySQL Order By Rand()效率问题一直是开发人员的常见问题,俺们不是DBA,没有那么牛B,所只能慢慢研究咯,最近由于项目问题,需要大概研究了一下MYSQL的随机抽取实现方法 要从tablename表中随机提取一条记录,大家一般的写法就是:SELECT * FROM tablename ORDER BY RAND() LIMIT 1. 但是,后来我查了一下MYSQL的官方手册,里面针对RAND()的提示大概意思就是,在ORDER BY从句里面不能使用RAND

Mysql的ORDER BY 和Limit offset的一个问题,拿出来和大家研究下

今天碰到个很怪异的问题,如题关于mysql的ORDER BY 语句和Limit offset语句问题. bug再现下:select * from A a where a.culomn1 limit 5 offset 0 order by a.culomn1 asc 则出现sqlException,提示order by 这行有问题. 若将语句改为如下,将limit语句和order by 语句调换: select * from A a where a.culomn1 order by a.culom

19 MySQL概念 数据库 数据表 数据类型 增加删除修改查询 WHERE Order By Limit

数据库管理系统DBMS 数据库中相关概念 数据库 数据表 记录 字段 数据 登录和退出MySQL客户端 查询自己的MySQL服务器有几个数据库 二.退出MySQL客户端的命令 修改root用户的密码 在MySQL客户端来修改密码(当前账号的密码) 数据库操作 创建数据库 显示所有数据库 删除数据库 选择数据库 更改数据库默认字符集 数据表操作 显示当前数据库中的所有表 创建数据表 显示表的创建 列的常用属性 修改数据表 删除数据表 显示表结构 MySQL数据类型 整型 浮点型 字符型 文本型 日

sql 大数据查询慎用 order by

今天在sql 查询中一个表中查询花了至少20秒时间,数据为620000行,sql语句如下: 测试一:使用order by  单单只是查询0,10行数据,耗时27.888s select a.id,a.county_id,a.county_name,a.town_id,a.town_name,a.village_id,a.village_name,b.province as province_name,b.name as city_name from place a left join city