sql——Union的使用场景

最近遇到一个需求,需要将数据库的一条记录展示成4条记录。初次一听,什么玩意??仔细分析之后,大概是这样,一条记录有多个字段,这些字段又可以归为不同类别,所以需要展示成多行形式。

这里想到2种方案,1是将记录从数据库中原模原样取出来,在代码中将记录分成多条记录;2是使用union,选择记录中的部分字段,合并记录中的另一部分字段,接下来分析第二种方法。

1:建一张测试表 user

   

插入几条数据:

    

2:使用union 将每条记录显示成 2条记录,

       前端展示成   :     水果,1,苹果,小苹果

                                     野味,2,山楂,小山楂

                                     水果,1,橘子,小橘子

                                      野味,2,杨桃,小杨桃

      sql语句:select name,id,apple,appleName from user union select name,id,orange,orangeName from user

      执行结果:

      分析:如果单独执行 select name,id,apple,appleName from user,只会得到2条记录,使用union后将 select name,id,orange,orangeName from user (2条)的记过合并 ,并且去重。合并,去重表现在结果的总记录行数。 上述结果已经可以证明union 有进行合并(4条),如何证明有去重呢?

2.1.证明union存在去重功能

       这里需要改变user表的数据,不然没法证明。

       sql:select name,id,apple,appleName from user union select name,id,orange,orangeName from user 

       执行结果:

         

         分析:结果变成了3条,select name,id,apple,appleName from user 的结果有2条, select name,id,orange,orangeName from user 也有2条,但是 4条结果中有2条是重复的记录:水果,1,苹果,小苹果。最终去掉一条,剩下3条。如果想要不去重记录,使用 union all 连接结果。

3.union使用的注意事项

      3.1.union 的结果记录 名称是 以第一条sql(使用union)的结果命名的。

       3.2 使用union的sql 返回的列数必须一致,且必需与第一条sql的列数一致

       sql:select name,id,apple from user union select name,id,orange,orangeName from user

                第一条sql 返回 3 个字段,第二条sql返回4个字段

      执行结果

          

   3.3 使用union的sql 返回字段类型可以不用一致

       将表结构变成:

       

  sql:select name,id,apple,appleName from user union select name,id,orange,orangeName from user

  执行结果:

   

   3.4 使用union 可以构造 数据

       添加一列 type 数据

      sql:select name,id,apple,appleName, 1 type from user union select name,id,orange,orangeName, 2 from user

      执行结果:

       

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值