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

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

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

  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. 网站安全通用防护代码(C#版本源码提供)

    每一个开发者都会意识到,网站发布之前,需要进行安全检查. 那么如何拦截攻击者注入恶意代码?如何防御诸如跨站脚本攻击(XSS).SQL注入攻击等恶意攻击行为? 针对目前常见的一些安全问题,结合目前一些常 ...

  2. android开发之路09(浅谈SQLite数据库01)

    1.SQLite数据库: SQLite 是一个开源的嵌入式关系数据库,实现自包容.零配置.支持事务的SQL数据库引擎. 其特点是高度便携.使 用方便.结构紧凑.高效.可靠. 与其他数据库管理系统不同, ...

  3. Halcon C++混合编程学习之Qt 实现检测焊接点

    1 # include "HalconCpp.h" # include "HDevThread.h" # include <X11/Xlib.h> ...

  4. CF Amr and Music (贪心)

    Amr and Music time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  5. [未完成]关于Maven的使用总结

    什么是maven 翻译为“专家”,“内行” Maven是跨平台的项目管理工具.主要服务于基于Java平台的项目构建,依赖管理和项目信息管理. 什么是理想的项目构建? 高度自动化,跨平台,可重用的组件, ...

  6. 开始迈入Csharp的世界了

    以前没有学过, 有点兴奋,完全是新手啊. 今天是元宵情人节, 加油↖(^ω^)↗ 分享一些话:   一则拉封丹寓言名字叫寓言<两个朋友>:    一天夜里,一个朋友突然去找另一个朋友.被吵 ...

  7. SAX - DefaultHandler

    org.xml.sax.helpers.DefaultHandler 实现了 org.xml.sax.EntityResolver.org.xml.sax.DTDHandler.org.xml.sax ...

  8. iPad accessory communication through UART

    We manufacture a new accessory for iPad/iPhone which should transfer commands to the iPad. We like t ...

  9. Android之手机屏幕的获取

    屏幕区域的获取: activity.getWindowManager().getDefaultDisplay(); 应用区域的获取: Rect outRect = new Rect(); activi ...

  10. 调整Windows8允许多用户登录

    最近LP说要在继续教育平台上学习,好像是中级的需要进行继续教育吧,具体情况不管了.LP说网站登录后没办法听到声音看到视频,但是我的可以,系统环境是Win8,IE10,不过是在Chrome下使用IPA插 ...