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

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

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

  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. PHP.10-PHP实例(一)-简单的计算器

    PHP-简单的计算器 [PHP语法详解] PHP在web开发中的应用 PHP编写步骤 1.编写一个后缀名为.php文件2.上传到Web服务器的文档根目录下3.通过浏览器访问Web服务器管理下的PHP文 ...

  2. Java中数组的快排

    描述输入三个字符(可以重复)后,按各字符的ASCII码从小到大的顺序输出这三个字符.   输入 第一行输入一个数N,表示有N组测试数据.后面的N行输入多组数据,每组输入数据都是占一行,有三个字符组成, ...

  3. cocos2d-x lua 调用onEnter和onExit

    cocos2d-x lua 调用onEnter和onExit version: cocos2d-x 3.6 onEnter和onExit在lua中不会因节点别add和remove而直接被调用,当子节点 ...

  4. MySQL(19):SQL语句(MySQL)大全

    SQL语句大全一.创建和删除数据库 1.创建用户 //创建用户且置密码,在MySQL中行,但在Oracle中行  ----必须在超级管理员身份下操作 create user hncu identifi ...

  5. (转载)MatLab绘图

    转载自:http://www.cnblogs.com/hxsyl/archive/2012/10/10/2718380.html 转载自:http://www.cnblogs.com/jeromebl ...

  6. thymleaf分支用法

    <div th:switch="${user.role}"> <p th:case="'admin'">User is an admin ...

  7. python(1) - 数据类型和变量

    数据类型: 整数:就是整数,包括正整数,0,负整数 浮点数: 通俗点说,就是小数 长整数: 就是比较长的整型,通常后面会跟一个L 字符串: 字符串需要用""或''括起来.单引号和双 ...

  8. CF Vitaly and Strings

    Vitaly and Strings time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  9. [未完成][Mooc]关于IO总结

    整个课程的大纲:1.编码问题.2.File类的使用3.RandomAccessFile的使用4.字节流的使用.5.字符流的使用.6.对象的序列化和反序列化. 视频1:文件的编码Eclipse的一大特点 ...

  10. Jersey(1.19.1) - Hello World, Get started with a Web application

    1. Maven Dependency <properties> <jersey.version>1.19.1</jersey.version> </prop ...