--先调用自建的数据库再建表
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
转换表结构查询
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 可有可无
前面调用数据库了,这里可以省去
--创建表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
转换表结构查询
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 不会去重,也不会排序,只是简单的将查询记录合并,效率较高
同:
两者都是将查询结果合并,使用语法也一样,放在两个查询语句中间