MySQL(17):Select-union(联合查询)使用注意事项

1. 需求:

获得0115班所有的代课教师代课天数,结果按照升序排序;同时获得0228班,结果按照降序排序。

(1)首先查询原来的0115班和0228班所有代课天数,如下:

(2)使用union关键字,如下:

(3)修改韩信在php0115班的记录都是days =15,如下:

(4)此时我们再去使用union组合查询,就会出现问题,如下:

 

注意:

        如果union的结果存在重复的记录,那么就会消除重复,类似执行了distinct操作。

该怎么解决这个问题?

        可以通过union选项all来达到目的.

(select t_name,days from teacher_class where c_name=‘php0115‘ order by days limit 10)union all(select t_name,days from teacher_class where c_name=‘php0228‘ order by days desc limit 10

);

2. 注意:

修改上面的SQL语句为:
  (select t_name,days from teacher_class where c_name=‘php0115‘ order by days )union all(select t_name,days from teacher_class where c_name=‘php0228‘ order by days desc 

);


去掉了上面limit 10,查询的结果没有按照预想的排序显示:

排序:

子语句结果的排序:

(1). 将子语句包裹在子括号内。

(2). 子语句的order by只有在order by 配合limit时候,才生效的。原因是:

union在做子语句时候,会对limit子句的order by优化(忽略)

时间: 2024-12-25 04:32:40

MySQL(17):Select-union(联合查询)使用注意事项的相关文章

union联合查询将两个表的查询结果在一个表中显示

表格ChannelReward和表格RewardSuppleSettle中都有一下几个字段JSMonth, ChannelNo, RewardSum, RewardItem.要将两个表中RewardSum>0的记录都显示在一个表中,可以使用联合查询 select * from(SELECT     JSMonth, ChannelNo, RewardSum, RewardItem, '1' AS ObjectTypeFROM         dbo.ChannelRewardWHERE    

[办公自动化] 再读《让EXCEL飞》(从excel导入access数据时,union联合查询,数据源中没有包含可见的表格)

一年多以前就买了@Mrexcel的<让excel飞>这本书.整体思路是利用access结合excel,大幅度提高数据分析效率. 最近又拿出来看了看.第十五章,比高级筛选更“高级”,P241.主要讲述多表关联查询,可以适用于一对多的场景. P248:联接属性的三种类型. Union联合查询可以用来实现同表头的多表数据合并. 但是将数据倒回到excel时,发现老是报错. 提示错误信息如下:数据源中没有包含可见的表格. 后来发现原因和解决方法如下: 借助Access中的可视化查询设计器,可以很大程度

MYsql系统函数和联合查询

函数是SQL里的关键字,用于对字段里的数据进行操作.函数是一个命令,通常与字段名称或者是表达式联合使用,处理输入的数据并产生结果 常用函数 控制函数 字符串函数 数学函数 日期时间函数 汇总函数 CASE SUBSTRING ABS DATEDIFF AVG IF LEFT FLOOR DATE_ADD COUNT NULLIF LENGTH RAND STR_TO_DATE MAX IFNULL LOWER   DATE_FORMAT MIN   REPLACE     SUM   CONCA

SqlSever基础 union 联合查询,厉害的并集 重复项只显示一个 两个查询结果并在一起后排序

镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ 1 base code 1 use master 2 drop database helloworld 3 4 5 --创建一个数据库 6 create database helloworld 7 8 9 10 --用helloworld1这个数据库 11 use helloworld 12 13

mysql连接查询,子查询,联合查询

一.连接查询(多表查询) emp表 dept表 1.交叉连接 实际上,交叉连接是将两个表不设定任何条件的连接结果. 交叉连接通常也被叫做"笛卡尔积"--数学上可能比较多. 语法: from  表1  [cross]  join  表2  ; //可见交叉连接只是没有on条件而已. cross这个词也可以省略,还可以使用inner这个词代替 2.内连接: 语法: from  表1  [inner]  join  表2  on  表1.字段1=表2.字段2: 含义:找出(过滤)在交叉连接的

thinkphp 两表、三表联合查询

//两表联合查询 $Model = M('T1');$Model->join('left join t2 on t1.cid = t2.id')->select();// $list = M('linkinfo')->join('LEFT JOIN __LINKCATE__ ON __LINKINFO__.c_id = __LINKCATE__.id')->select(); //三表联合查询 $Model = M('T1'); $Model->join('t2 on t1.

【转】Mysql联合查询union和union all的使用介绍

Mysql的联合查询命令UNION和UNION ALL,总结了使用语法和注意事项,以及学习例子和项目例子,需要的朋友可以参考下 一.UNION和UNION ALL的作用和语法 UNION 用于合...... Mysql的联合查询命令UNION和UNION ALL,总结了使用语法和注意事项,以及学习例子和项目例子,需要的朋友可以参考下 一.UNION和UNION ALL的作用和语法 UNION 用于合并两个或多个 SELECT 语句的结果集,并消去表中任何重复行. UNION 内部的 SELECT

Mysql联合查询UNION和UNION ALL的使用介绍

UNION和UNION ALL的作用和语法 UNION 用于合并两个或多个 SELECT 语句的结果集,并消去表中任何重复行.UNION 内部的 SELECT 语句必须拥有相同数量的列,列也必须拥有相似的数据类型.同时,每条 SELECT 语句中的列的顺序必须相同.SQL UNION 语法: SELECT column_name FROM table1UNIONSELECT column_name FROM table2 注释:默认地,UNION 操作符选取不同的值.如果允许重复的值,请使用 U

MySQL的查询,子查询,联结查询,联合查询

一.mysql查询的五种子句where(条件查询).having(筛选).group by(分组).order by(排序).limit(限制结果数) 二.子查询1.where 子查询SELECT * FROM tb1 WHERE cat_id IN (SELECT max(id) FROM tb2 GROUP BY cat_id); 2.from 子查询SELECT t2_id FROM (SELECT t2_id FROM tb2 ORDER BY t2_id DESC); 3.exists