Mysql--横表纵表

1、认识横表纵表

 

 

如上图,t1为纵表,一行记录一个属性值(key—value),若有多个属性值则用多行来记录

    t2为横表,一行记录了所有的属性值

 

横表设计简单,易操作,可以直观的看到一行记录的所有值,但如果现在要把这个表加一个字段,那么就必须重建表结构

而纵表只需加一条记录就可以添加一个字段,所消耗的代价远比横表小,但是纵表的对于数据描述不是很清晰,而且会造成数据库数量很多,查询也麻烦

所以:应该把不容易改动表结构的设计成横表,把容易经常改动不确定的表结构设计成纵表。

 

2、相互转换

2.1 纵表转横表

参考:https://blog.csdn.net/qq_19734597/article/details/119325030

复制代码
select 
  * 
from (
  select 
    a.name,
max(
case a.course when 'language' then a.score else '' end) as '语文', max(case a.course when 'math' then a.score else '' end) as '数学', max(case a.course when 'english' then a.score else '' end) as '英语' from t1 a group by a.name ) x;
复制代码

结果为:

 

2.2 横表转纵表

union all:用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中,多个 SELECT 语句会删除重复的数据。

复制代码
select
  name,
  'language' as course,
  language as score
from
  t2
union all
select
  name,
  'math' as course,
  math as score
from
  t2
union all
select
  name,
  'english' as course,
  english as score
from
  t2;
复制代码

结果为:

 

posted @   心恩惠动  阅读(933)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示