union / limit
Posted 石乐智先生
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了union / limit相关的知识,希望对你有一定的参考价值。
1.union(可以将查询结果集相加) 案例:找出工作岗位是salesman和manager的员工 mysql> select e.ename from emp e where e.job=\'salesman\' or job=\'manager\'; 或: select e.ename from emp e where e.job in (\'salesman\',\'manager\'); 或: select e.ename from emp e where job=\'salesman\' union select e.ename from emp e where job=\'manager\'; 注: union可以将两张不相干表中数据拼接在一起显示 2.limit(分页查询全靠它) limit是mysql特有的,其他数据库中没有,不通用 limit取结果集中的部分数据,这是他的作用 limit是sql语句最后执行的一个环节 语法机制: limit startIndex,length startIndex:表示起始位置,从0开始,0表示第一条数据 length(表示取几个) 每页显示pageSize条记录: 第pageNo页:(pageNo-1)*pageSize,pageSize 案例:取出工资前5名的员工(思路:降序取前5个) mysql> select e.ename,e.sal from emp e order by e.sal desc limit 0,5; 案例:找出工资排名在第4到第9名的员工 mysql> select e.ename,e.sal from emp e order by e.sal desc limit 3,6;
ORDER BY 和 LIMIT 后的 UNION
【中文标题】ORDER BY 和 LIMIT 后的 UNION【英文标题】:UNION after ORDER BY and LIMIT 【发布时间】:2011-09-06 01:58:09 【问题描述】:我的目标是执行两个不同的查询,然后将它们组合起来。 我的代码是:
SELECT * FROM some tables WHERE ... ORDER BY field1 LIMIT 0,1
UNION
SELECT * FROM some tables WHERE ...
我收到以下错误:
#1221 - UNION 和 ORDER BY 的错误使用
重要的是 ORDER BY 仅适用于第一个查询。如何执行此任务?
【问题讨论】:
阅读此tutorial 【参考方案1】:SELECT * FROM (SELECT * FROM some tables WHERE ... ORDER BY field1 LIMIT 0,1) x
UNION ALL
SELECT * FROM some tables WHERE ...
注意UNION ALL
的使用:
UNION
从结果集中删除重复的行,并且数据库在执行此操作之前对 所有行进行排序(因此整个结果集都已排序)
UNION ALL
保留顺序和重复项
【讨论】:
【参考方案2】:您可以使用括号来允许在单个查询中使用ORDER
/LIMIT
:
(SELECT * FROM some tables WHERE ... ORDER BY field1 LIMIT 0, 1)
UNION
(SELECT * FROM some tables WHERE ...)
ORDER BY 1 /* optional -- applies to the UNIONed result */
LIMIT 0, 100 /* optional -- applies to the UNIONed result */
【讨论】:
语法错误...你需要从别名(括号)选择中选择 hmmm - 我也检查并得到了错误。也许我需要升级我的mysql。对不起! 它对我不起作用codeproject.com/Questions/1004382/…【参考方案3】:只需将所有内容放在圆括号中:
(SELECT * FROM table1 ORDER BY datetime )
UNION
(SELECT * FROM table2 ORDER BY datetime DESC)
【讨论】:
语法错误...你需要从别名(括号)中选择 我检查并得到了错误。也许我需要升级我的mysql。对不起!【参考方案4】:(SELECT user_id AS id FROM tbl_user)
UNION
(SELECT address_id AS id FROM tbl_address)
ORDER BY id ASC LIMIT 10
【讨论】:
以上是关于union / limit的主要内容,如果未能解决你的问题,请参考以下文章
SQL:使用 UNION、ORDER BY 和 LIMIT 进行选择