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的主要内容,如果未能解决你的问题,请参考以下文章

union / limit

UNION优化limit查询

SQL:使用 UNION、ORDER BY 和 LIMIT 进行选择

在 MySQL 查询中结合 UNION 和 LIMIT 操作

MySQL 中的 UNION ALL 和 LIMIT

SQL-子查询;union;limit