设为首页收藏本站
查看: 59|回复: 0

[PHP] 小贝_mysqlselect连接查询_MySQL

[复制链接]

论坛元老

Rank: 6Rank: 6

积分
34268
主题
17031
UID
1347
M币
67
贡献
17170

  • 发表于 2017-5-12 16:11:00 | 显示全部楼层 |阅读模式
    select连接查询 简要:
    一、union联合查询
    二、左右内连接
      
    一、union联合查询 作用: 把2次或多次查询结果合并起来
    详细: (表1查询结果) union (表2查询结果)
    执行: 先算表1查询结果,再算表2查询结果。再通过union把结果联合起来。
    总结:
    a、左右查询结果列数一致
    b、最终显示结果以第一张表的列名为主
    c、左右查询结果的列类型最好也一致,不然就会进行转换。由低到高。如表1结果A列为整形,表2结果A列为浮点型。则表1在A列的结果转换为浮点型
    d、可以是不同表
    e、如果不同的语句中取出的行,有完全相同(每个列的值都相同),那么相同的行将会合并(去重)
    案例:
      


      
      


      
      
    查询 这样的结果:
    a16,b 21,c 14,d 41
    步骤1: union来获取两张表的查询结果


    步骤2: 把步骤1的查询结果看成临时表



    不足之处: 上述案例中表ta和tb中不存在完全相同的列(即查询结果中所有列的值都一样)
    修改下tb表



    此时,执行步骤2的sql语句



    发现id为a的值总和为5而不是为10.
    这是因为如果不同的语句中取出的行,有完全相同(每个列的值都相同),那么相同的行将会合并(去重)
    处理方案: 用union all



      
    二、连接查询
    通常情况下表与表之间是没有什么关系的。但是我们可以通过一个字段,让表与表发生关系。
    把表看成集合。
    2.1、左连接
    语法: select 列1,列2,列N from tableA left join tableB on tableA.列=tableB.列
    2.2、右连接
    语法: select 列1,列2,列N from tableA right join tableB on tableA.列=tableB.列
    2.3、内连接
    语法: select 列1,列2,列N from tableA inner join tableB on tableA.列=tableB.列
      
    2.4、左右内连接的区别
    create table boy
    ( name char(3) not null,
    flower char(5)
    )engine=myisam charset utf8;
      
    create table girl
    ( name char(3),
    flower char(5)
    )engine=myisam charset utf8;
    insert into boy values('林书豪','玫瑰'),('刘翔','桃花'),('周杰伦','茉莉花'),('犀利哥','荷花'),
    ('刘德华','狗尾巴花');
    insert into girl values('艾薇尔','玫瑰'),('居里夫人','桃花'),('芙蓉姐','茉莉花'),('凤姐','茉莉花'),('林志玲','荷花');
    案例一: 根据花,男找女


    左连接
      
    以左表为准,去右表找匹配数据,找不到匹配,用NULL补齐。
    总结: tableA为N ;tableB为M。则在以tableA为左表的情况下,得到的数据行数至少为N行。
    案例二: 根据花,女找男
      


    总结: 左连接和右连接相互转换。
    A 在 B的左边 ==》B在A的右边
    A left join B ==》B rightjoin A
    如何记忆:
    1、 左右连接可以相互转化
    2、 可以把右连接转换为左连接来使用(兼容其它数据版本)
    案例三: 无论男女,查找有伴的人


    总结: 内连接inner join 查询左右连接都有的数据。即得到左右连接的交集
    思考: 能否查出左右连接的并集呢?
    答: 目前不能直接获取,目前的mysql不支持外链接。
    但可以用union联合

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    在我站开通SVIP可同时获得17个站点VIP资源 立即登录 立即注册
    快速回复 返回顶部 返回列表