• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    mysql多表联合查询操作实例分析

    本文实例讲述了mysql多表联合查询操作。分享给大家供大家参考,具体如下:

    MySQL多表联合查询是MySQL数据库的一种查询方式,下面就为您介绍MySQL多表联合查询的语法,供您参考学习之用。

    MySQL多表联合查询语法:

    复制代码 代码如下:
    SELECT * FROM 插入表 LEFT JOIN 主表 ON t1.lvid=t2.lv_id select * from mytable,title where 表名1.name=表名2.writer ;

    mysql版本大于4.0,使用UNION进行查询,示例如下:

    SELECT `id`, `name`, `date`, '' AS `type` FROM table_A WHERE 条件语句……
     UNION
    SELECT `id`, `name`, `date`, '未完成' AS `type` FROM table_B WHERE 条件语句……
     ORDER BY `id` LIMIT num;
    
    

    mysql版本小于4.0,需要建立临时表,分为三步,示例如下:

    第一步:建立临时表tmp_table_name并插入table_A中的相关记录

    复制代码 代码如下:
    $sql = "CREATE TEMPORARY TABLE tmp_table_name SELECT `id`, `name`, `date`, '完成' AS `type` FROM table_A WHERE 条件语句……";

    第二步:从table_B中取得相关记录插入临时表tmp_table_name中

    复制代码 代码如下:
    INSERT INTO tmp_table_name SELECT `id`, `name`, `date2` AS `date`, '未完成' AS `type` FROM table_B WHERE 条件语句……

    第三步:从临时表tmp_table_name中取出记录

    SELECT * FROM tmp_table_name ORDER BY id DESC
    
    

    union和order by、limit区别分析

    代码示例:

    CREATE TABLE `test1` (
     `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
     `name` varchar(20) NOT NULL,
     `desc` varchar(100) NOT NULL,
     PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    
    

    1. 以下查询会报错误:[Err] 1221 - Incorrect usage of UNION and ORDER BY

    代码示例:

    select * from test1 where name like 'A%' order by name
    union
    select * from test1 where name like 'B%' order by name
    
    

    修改为:

    代码示例:

    select * from test1 where name like 'A%'
    union
    select * from test1 where name like 'B%' order by name
    
    

    说明,在union中,不用括号的情况下,只能用一个order by(思考:union两边的order by的列名不一样时,会出现什么样的结果?),这会对union后的结果集进行排序。

    修改为:

    代码示例:

    (select * from test1 where name like 'A%' order by name)
    union
    (select * from test1 where name like 'B%' order by name)
    
    

    也是可以的,这两个order by在union前进行。

    2. 同样

    代码示例:

    select * from test1 where name like 'A%' limit 10
    union
    select * from test1 where name like 'B%' limit 20
    
    

    相当于:

    代码示例:

    (select * from test1 where name like 'A%' limit 10)
    union
    (select * from test1 where name like 'B%') limit 20
    
    

    即后一个limit作用于的是union后的结果集,而不是union后的select。
    也可以用括号括起来,以得到预期的结果:

    3. UNION和UNION ALL区别

    union会过滤掉union两边的select结果集中的重复的行,而union all不会过滤掉重复的行。

    代码示例:

    (select * from test1 where name like 'A%' limit 10)
    union
    (select * from test1 where name like 'B%' limit 20)
    
    

    下面试一个年龄段分析的复杂sql语句

    (
     SELECT
      '5~19' AS `age`,
      SUM(`impression`) AS impression,
      SUM(`click`) AS click,
      sum(`cost`) AS cost
     FROM
      `adgroup_age_report`
     WHERE
      (
       (
        (`age` = 19)
        AND (`adgroup_id` = '61')
       )
       AND (`date` >= '2015-11-22')
      )
     AND (`date` = '2017-02-20')
    )
    UNION
     (
      SELECT
       '20~29' AS `age`,
       SUM(`impression`) AS impression,
       SUM(`click`) AS click,
       sum(`cost`) AS cost
      FROM
       `adgroup_age_report`
      WHERE
       (
        (
         ((`age` = 29) AND(`age` >= 20))
         AND (`adgroup_id` = '61')
        )
        AND (`date` >= '2015-11-22')
       )
      AND (`date` = '2017-02-20')
     )
    UNION
     (
      SELECT
       '30~39' AS `age`,
       SUM(`impression`) AS impression,
       SUM(`click`) AS click,
       sum(`cost`) AS cost
      FROM
       `adgroup_age_report`
      WHERE
       (
        (
         ((`age` = 39) AND(`age` >= 30))
         AND (`adgroup_id` = '61')
        )
        AND (`date` >= '2015-11-22')
       )
      AND (`date` = '2017-02-20')
     )
    UNION
     (
      SELECT
       '40~49' AS `age`,
       SUM(`impression`) AS impression,
       SUM(`click`) AS click,
       sum(`cost`) AS cost
      FROM
       `adgroup_age_report`
      WHERE
       (
        (
         ((`age` = 49) AND(`age` >= 40))
         AND (`adgroup_id` = '61')
        )
        AND (`date` >= '2015-11-22')
       )
      AND (`date` = '2017-02-20')
     )
    UNION
     (
      SELECT
       '50~59' AS `age`,
       SUM(`impression`) AS impression,
       SUM(`click`) AS click,
       sum(`cost`) AS cost
      FROM
       `adgroup_age_report`
      WHERE
       (
        (
         ((`age` = 59) AND(`age` >= 50))
         AND (`adgroup_id` = '61')
        )
        AND (`date` >= '2015-11-22')
       )
      AND (`date` = '2017-02-20')
     )
    
    

    更多关于MySQL相关内容感兴趣的读者可查看本站专题:《MySQL查询技巧大全》、《MySQL常用函数大汇总》、《MySQL日志操作技巧大全》、《MySQL事务操作技巧汇总》、《MySQL存储过程技巧大全》及《MySQL数据库锁相关技巧汇总》

    希望本文所述对大家MySQL数据库计有所帮助。

    您可能感兴趣的文章:
    • 详解Mysql多表联合查询效率分析及优化
    • mysql连接查询、联合查询、子查询原理与用法实例详解
    • MySQL全文索引、联合索引、like查询、json查询速度哪个快
    • Mysql两表联合查询的四种情况总结
    • 浅谈mysql的子查询联合与in的效率
    • 对MySQL几种联合查询的通俗解释
    • Mysql联合查询UNION和UNION ALL的使用介绍
    • Mysql联合查询UNION和Order by同时使用报错问题的解决办法
    • mysql多表联合查询返回一张表的内容实现代码
    • 详解MySQL 联合查询优化机制
    上一篇:Ubuntu移除mysql后重新安装的方法
    下一篇:mysql视图功能与用法实例分析
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    mysql多表联合查询操作实例分析 mysql,多表,联合,查询,操作,