今天在项目中遇到一个数据库查询的问题:三张表分别放置不同的东西:分享的音频相关数据、分享的文字图片说说、分享的主题相关数据。所有分享的东西都可看做新鲜事,现在要求从这三张表将相同的几个字段的数据全部查找出来按照发布时间先后排序(至于为什么不把这三张表的数据整到一张表里面这是由于数据库是这样设计的,咱这先不讨论数据库设计的好坏,就记录一下自己怎么使用三表联合查询将这三张表的数据都查找出来)。

  在网上找了些联合查询相关的资料:

  有几个不错的技术博客做了很好的介绍:

  1、http://blog.sina.com.cn/s/blog_6ad62438010168lg.html

  2、http://www.ynpxrz.com/n598810c2024.aspx

  介绍:使用union或union all都可实现合并两个或多个select语句的结果集:其中union会将查出来的结果中相同内容的行合并,而union all不会合并相同行。

  要点:

    (1)两次或多次查询的列数必须一致;

    (2)以第一个子查询语句中列的类型为标准,之后所有查询语句中各列的类型第一个子查询中对应类的类型一致;

    (3)多次select语句中查询的列名可以不相同,最后查询结果表的列名是以第一个子查询语句中的列名来命名的;

    (4)如果子句中有order by,limit,需要用括号()包起来。如果将order by,limit放到所有子句之后,即对最终合并的结果表进行排序或筛选。

  操作:

    1、参考上面给出的两个技术博文,我自己进行了实践,前面几次都出错,我下面给出我敲出来的sql已经相应的报错内容,并附上截图:

     sql语句1: mysql> select * from (select alarm_publishSite,alarm_publishtime from alarm union select theme_issueLocation,theme_publishtime from theme);

     报错:ERROR 1248 (42000): Every derived table must have its own alias

     这个错误是指每个派生表需要一个别名

     sql语句2:mysql> select * from (select alarm_publishSite,alarm_publishtime from alarm) as t1 union (select theme_issueLocation,theme_publishtime from theme) as t2;

     报错:ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'as t2' at line 1

     sql语句3:mysql> select * from (select alarm_publishSite,alarm_publishtime from alarm) as t1 union (select theme_issueLocation,theme_publishtime from theme);

     这次很幸运,成功将两个表中的数据联合查出来了,如下图:

      

      sql2语句与sql3语句之间的区别你可以比较得出。

      sql语句4:mysql> select * from (select alarm_publishSite,alarm_publishtime from alarm) as t1 union (select theme_issueLocation,theme_publishtime from theme) as t2 union (select subject_issueLocation,subject_time from subject);

      报错:ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'as t2 union (select subject_issueLocation,subject_time from subject)' at line 1

      这个报错是指 ”as t2 union (select subject_issueLocation,subject_time from subject)“这部分附近有语法问题。

      sql语句5mysql> select * from (select alarm_publishSite,alarm_publishtime from alarm) as t1 union (select theme_issueLocation,theme_publishtime from theme) union (select subject_issueLocation,subject_time from subject);

      得出结果,如下图:

      

      sql4语句与sql5语句之间的区别你可以比较得出。

      sql语句6mysql> select * from (select alarm_publishSite as location,alarm_publishtime as time from alarm) as t1 union (select theme_issueLocation,theme_publishtime from theme) union (select subject_issueLocation,subject_time from subject) order by time desc;

      得出查询结果,如下图:

      

      在sql6语句中,主要就是给第一个子查询中查询的列名去了相应的别名,最后可以看到,查询出来的结果表中的字段名就成了刚取的别名了。

mysql之多表查询的更多相关文章

  1. Vc数据库编程基础MySql数据库的表查询功能

    Vc数据库编程基础MySql数据库的表查询功能 一丶简介 不管是任何数据库.都会有查询功能.而且是很重要的功能.上一讲知识简单的讲解了表的查询所有. 那么这次我们需要掌握的则是. 1.使用select ...

  2. MySQL之多表查询一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习

    MySQL之多表查询 阅读目录 一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习 一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 首先说一下,我们写项目一般都会建 ...

  3. MySQL之单表查询 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER BY 八 限制查询的记录数:LIMIT 九 使用正则表达式查询

    MySQL之单表查询 阅读目录 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER B ...

  4. day15(mysql 的多表查询,事务)

    mysql之多表查询 1.合并结果集 作用:合并结果集就是把两个select语句查询的结果连接到一起! /*创建表t1*/ CREATE TABLE t1( a INT PRIMARY KEY , b ...

  5. mysql数据库优化课程---11、mysql普通多表查询

    mysql数据库优化课程---11.mysql普通多表查询 一.总结 一句话总结:select user.username,user.age,class.name,class.ctime from u ...

  6. Mariadb/MySQL数据库单表查询基本操作及DML语句

    Mariadb/MySQL数据库单表查询基本操作及DML语句 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一数据库及表相关概述 1>.数据库操作 创建数据库: CREATE ...

  7. day 39 MySQL之多表查询

    MySQL之多表查询   阅读目录 一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习 一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 首先说一下,我们写项目一般都 ...

  8. day 38 MySQL之单表查询

    MySQL之单表查询   阅读目录 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER ...

  9. MySQL的联表查询

    MySQL的联表查询 首选:分析查询的字段来自哪些表 进而:确定交集 然后:确定判断的条件 比如:从student表 和 result表 查学号.考试名称.学时.考试日期.考试成绩 表1: 学号 考试 ...

  10. mysql 查询优化 ~ 多表查询基础知识

    一 什么是驱动表   1)指定了联接条件时,满足查询条件的记录行数少的表为[驱动表]:   2)未指定联接条件时,行数少的表为[驱动表](Important!).   表现 explain第一行出现的 ...

随机推荐

  1. BootStrap2学习日记1--网格系统

    在BoootStrap2的版本中采用的布局方式是12栏网格布局(把浏览器的Width分12栏,布局中使用每个元素所占格数的不同来达到各种布局),包括(固定)网格布局(Grid System)和流式网格 ...

  2. javascript oop深入学习笔记(一)

    一.定义和实例化一个类: 在OOP的思想中,类是一个很重要的元素,一个类表示了具有相似的一类事物的抽象,通过实例化一个类,可以获得属于该类的一个实例,我们也可以称之为对象. 在javascript中, ...

  3. php 发送邮件

    php我们可以使用系统的mail函数去发送邮件 但是需要配置一下邮件环境 这里选择使用PHPMailer  这样比较方便 首先下载PHPMailer:https://github.com/Synchr ...

  4. C++之类的构造函数,不得不学明白的重点

    一.认识构造函数 当创建一个类类型对象时,类通过一个或者几个特殊的成员函数来控制对象的初始化,这种函数就是构造函数.它的任务就是用来初始化类对象的成员的,所以当创建类对象或者类对象被创建就会调用构造函 ...

  5. ibatis中isEquals、isNotEmpty的用法

    一:isEquals用于动态拼接sql 如下实例: 如果status的状态为0,则更新attribute1;状态为1,则更新attribute2; 状态为2,则更新attribute3. <up ...

  6. [转]T4模版引擎之生成数据库实体类

    本文转自:http://www.cnblogs.com/lzrabbit/archive/2012/07/18/2597953.html 在通过T4模版引擎之基础入门 对T4有了初步印象后,我们开始实 ...

  7. HDU 1978 How many ways (DP)

    How many ways Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  8. [未完成]关于POI的使用

    关于POI的使用关于POI的使用关于POI的使用关于POI的使用

  9. 关于Eclipse中Browser中显示html页面的总结.

    用Eclipse中的Browser显示html页面,因为"just small thing.. browser in the studio is light browser.. it can ...

  10. 浅谈.NET中加密和解密的实现方法分享

    这篇文章介绍了.NET中加密和解密的实现方法,有需要的朋友可以参考一下 .NET将原来独立的API和SDK合并到一个框架中,这对于程序开发人员非常有利.它将CryptoAPI改编进.NET的Syste ...