sql 基础语法 alter用法和视图,透视

--查询没有被删除的学生

alter table StuInfo --修改列属性
alter column isdelete bit null 

alter table StuInfo --删除列
drop column isdelete

alter table StuInfo --增加列
add isdelete bit not null default(0)

select * from StuInfo as si 
inner join Classinfo as ci on si.classId=ci.classId
where isdelete=0

--创建视图,用于二次查询
create view StuInfo_Class
as 
select si.*,ci.className from StuInfo as si 
inner join Classinfo as ci on si.classId=ci.classId
where isdelete=0

--视图中存储的是select语句,而不是结果集合
select * from StuInfo_Class

drop view StuInfo_Class -- 删除

select * from StuInfo
select * from ScoreInfo

--查询参与了考试的学生信息,子查询exists,in
select * from StuInfo
where stuId in(select distinct stuId from ScoreInfo)

select * from StuInfo as si
where exists
(select * from ScoreInfo as sco where si.stuId=sco.StuId)

--分页 已知:页大小(一页显示多少数据),页索引
--              3                        1,2,3,4
--利用子查询进行分页: 
select * from 
(            
    select *,
    ROW_NUMBER()over(order by stuPhone asc) as rowIndex
    from StuInfo
) as t1
where rowIndex between 1 and 3 --先排序后再查询在一个区间的列


--当前学生的科目成绩
create view S_S_C
as
select si.*,ci.cName,sco.score from StuInfo as si
inner join ScoreInfo as sco on si.stuId=sco.StuId
inner join CourseInfo as ci on ci.cId=sco.cId

select * from S_S_C

--数据透视
--要求按格式:姓名 数据库 算法设计
select stuName as 姓名,
max(case cName when '数据库' then score end) as 数据库, --case..when..then语句的两种写法
max(case when cName='算法设计' then score end) as 算法设计
from S_S_C
--然后还要用聚合函数max|sum将上面的结果合并起来,去掉null的位置
group by stuName

接下去是一些练习

select * from course
select * from score
select * from student
select * from teacher

--[20,25]岁男同学的姓名,性别,年龄
create view student_view
as
select stuName,stuAge,stuSexy from student
where stuAge between 20 and 25

select * from student_view

--每位同学姓名,课程名称和成绩
create view score_view
as
select si.stuName,ci.cName,sco.score from student as si
inner join score as sco on si.stuId=sco.stuId
inner join course as ci on sco.cId=ci.cId

select * from score_view

 关于透视

select * from class
insert into class
values('030102','大数据')

select * from course
select * from student
select * from teacher
select * from score

--透视练习:按课程名字 男生 女生
create view Cou_Stu
as
select si.stuId,ci.cName,si.stuSexy from student as si
inner join score as sco on si.stuId=sco.stuId
inner join course as ci on sco.cId=ci.cId

drop view Cou_Stu
select * from Cou_Stu

create view TMP
as
select cName,stuSexy,COUNT(*)as num from Cou_Stu
group by stuSexy,cName

select * from TMP

select cName,
(case when stuSexy=1 then num end)as '男生',
(case when stuSexy=0 then num end)as '女生'
from TMP

--再通过分组+聚合函数把null给去了
select cName,
max(case when stuSexy=1 then num end)as '男生',
max(case when stuSexy=0 then num end)as '女生'
from TMP
group by cName

 

 

posted on 2019-11-12 13:13  zsben  阅读(1094)  评论(0编辑  收藏  举报

导航