SQL学习笔记——表结构转换查询

Vanna ·
更新时间:2024-11-15
· 855 次阅读

1、纵表转横表 建表 --先调用自建的数据库再建表 use ljh create table sc( sname char(20), course char(20), score int) --随机插入几个记录 insert into sc values('张三','语文',98), ('张三','数学',89), ('张三','英语',91), ('李四','语文',88), ('李四','数学',97), ('李四','英语',99); --查看sc表信息 select * from sc order by sname asc

表sc

转换表结构查询 select sname as 'Name', sum(case course when '语文' then score else 0 end) as 'Chinese', sum(case course when '数学' then score end) as 'Math', sum(case course when '英语' then score end) as 'English' from sc group by sname;

查询结果如下:
横表转换结果
其中 case when 后输入条件,then 后输入满足条件后的结果,else 0 表示当结果为 null 时以 0 取代,end 则表结束。这里 else 0 可有可无

2、横表转纵表 建表

前面调用数据库了,这里可以省去

--创建表sc2 create table sc2( Sname char(20), Chinese int, Math int, English int) --插入记录 insert into sc2 values('张三',77,88,99), ('李四',87,85,86), ('王五',97,79,81); --查看表sc2 select * from sc2

表sc2

转换表结构查询 select sname,'Chinese' as course,Chinese as score from sc2 union all select sname,'Math' as course,Math as score from sc2 union all select sname,'English' as course,English as score from sc2 order by sname,course desc

查询结果如下:
纵表转换结果
其中 union all 表示将查询结果合并,由于这里没有重复的记录,也可以直接使用 union

拓展:union 和 union all 的异同

异:
union 会去除重复的查询记录,且将字段按顺序排序,效率较低
union all 不会去重,也不会排序,只是简单的将查询记录合并,效率较高
同:
两者都是将查询结果合并,使用语法也一样,放在两个查询语句中间


作者:制了个了个杖



sql学习 SQL

需要 登录 后方可回复, 如果你还没有账号请 注册新账号
相关文章