sql基础语句——从基础建库建表到联合查询

create database student
on
(
name=student_data,
filename='C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA\student_data.mdf',
size=5,
filegrowth=15%,
maxsize=10
),
(
name=student_data1,
filename='C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA\student_data.ndf',
size=2,
filegrowth=10%,
maxsize=10
)
log on
(
name=student_log,
filename='C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA\student_data.ldf',
size=3,
filegrowth=3,
maxsize=15
)
--1、按要求创建三张表
--建student表
create table student
(
sno char(7),
sname char(10),
ssex char(2) not null  default'男',
sage tinyint,
sdept char(20),
constraint PK_student primary key(sno)
)
--建course表
create table course
(
cno char(10),
cname char(20) not null,
ccredit tinyint default'3',
csemester tinyint,
constraint PK_course primary key(cno)
)
--建sc表
create table sc
(
sno char(7),
cno char(10),
grade real,
constraint PK_sc primary key(sno,cno),
constraint FK_sc_student foreign key(sno) references student(sno),
constraint FK_sc_course foreign key(cno) references course(cno) 
)

--删除sc表中的主键
alter table sc
drop PK_sc
--添加sc表中的主键
alter table sc
add constraint PK_sc primary key(sno,cno)
--修改sc表,在sno字段上创建外键约束
alter table sc
add constraint FK_sc_student foreign key(sno) references student(sno)
alter table sc
add constraint FK_sc_course foreign key(cno) references course(cno)    //注意是创建外键FK
 
--为student表中ssex列添加检查约束,只能输入男或女
alter table student
add constraint check_ssex check(ssex='男' or ssex='女')
--为student表中的sage列添加默认值19
alter table student
add constraint default_sage default'19' for sage
--为student表中sage添加检查约束,只能输入18到20岁
alter table student
add constraint check_sage check(sage between 18 and 20)


--1、查询课程表中的全部信息
select *
from course
--2、查询学生的学号、姓名和所在系
select sno,sname,sdept
from student
--3、查询全体学生的姓名及出生年份,将出生年份所在的列改名为“出生年份”
select sname,2018-sage 出生年份
from student
--4、查询数学系学生的姓名
select sname
from student
where sdept='数学系'
--5、查询年龄在20岁以下学生的姓名及年龄
select sname,sage
from student
where sage<20
--6、查询考试成绩有不及格的学生的学号,并取消重复记录
select  distinct sno
from sc
where grade<60
--7、查询年龄在20-23岁之间学生的姓名、所在系和年龄(用两种方法)
select sname,sdept,sage
from student
where sage between 20 and 23

select sname,sdept,sage
from student
where sage in(20,21,22,23)
--8、查询信息系、数学系和计算机系学生的学号和姓名(用两种方法)
select sno,sname
from student
where sdept in ('信息系','数学系','计算机系')

select sno,sname
from student
where sdept='信息系' or sdept='数学系'  or  sdept='计算机系'
--9、查询年龄不再20-23岁之间的学生的姓名和年龄(用两种方法)
select sname,sdept,sage
from student
where sage not between 20 and 23
--10、查询既不是信息系也不是数学系学生的姓名(用两种方法)
select sname,sdept
from student
where sdept not in('信息系','数学系')
--11、查询姓“张”的学生的详细信息
select *
from student
where sname like ('张%')
--12、查询学生表中姓“张”、姓“李”的学生的情况
select *
from student
where sname like '[张李]%'
--13、查询名字中第二个字为“大”或“小”的学生学号和姓名
select *
from student
where sname like '_[大小]%'

--14、查询所有不姓“刘”的学生的信息
select *
from student
where sname not like '刘%'
--15、查询课程号的最后一位不在2-6范围学生的情况
select *
from course
where cno not like '%[2-6]'

--16、查询所有姓“李”的并且第二个字是“%”的学生的信息
select *
from student
where sname like ('张[escape%]%')
--17、查询没有考试成绩的学生的学号
select sno,grade
from sc
where grade is null
--18、查询所有有考试成绩的学生的学号
select sno
from sc
where grade is not null
--19、查询计算机系年龄在20岁以下学生的姓名
select sname
from student
where sage<20
--20、查询计算机系和信息系学生中年龄在18-20岁之间的学号和姓名

--21、查询c01课程的考试情况,列出学号和成绩,同时对成绩作如下处理:
--当成绩大于等于90分时,在结果中显示“优秀”
--当成绩在80到89分之间时,在结果中显示“良好”
--当成绩在70到79分之间时,在结果中显示“中等”
--当成绩在60到69分之间时,在结果中显示“及格”
--当成绩小于60分时,在结果中显示“不及格”
--成绩为空时,在结果中显示“缺考”
select sno,grade,
case
when grade>=90 then '优秀'
when grade between 80 and 89 then '良好'
when grade between 70 and 79 then '中等'
when grade between 60 and 69 then '及格'
when grade <60 then '不及格'
else '缺考'
end as 等级
from sc
where cno like 'c01'
--22、查询所有学生的信息,将学生年龄按升序排序
select *
from student
order by sage asc
--23、查询选修了c01号课程的学生的学号及其成绩,查询结果按成绩降序排序
select sno,grade
from sc
where cno like 'c01'
order by grade desc
--24、查询全体学生的信息,查询结果按所在系的系名升序排列,同一系学生按年龄的降序排列
select *
from student
order by sdept asc,sage desc
--25、查询学生总人数
select count(*) as 总人数
from student
--26、查询选修了课程的学生的人数
select count(distinct sno) as 选课人数
from sc
--27、计算001号学生的考试总成绩
select sum(grade) as 总成绩
from sc
where sno='001'
--28、计算c01号课程的考试平均成绩
select avg(grade) as 平均成绩
from sc
where cno='c01'
--29、查询选修了c01号课程的学生的最高分和最低分
select max(grade) as 最高分,min(grade) as 最低分
from sc
where cno='c01'

--30、统计每门课程的选课人数,列出课程号和选课人数
select cno,count(sno) as 选课人数
from sc
group by cno
--31、查询每名学生的选课门数和平均成绩
select sno,count(cno) as 选课门数,avg(grade) as平均成绩
from sc
group by sno 
--32、统计每个系的学生人数和平均年龄
select sdept,count(sno) as 学生人数,avg(sage) as 平均年龄
from student
group by sdept
--33、统计每个系的女生人数
select sdept,count(*) as 女生人数
from student
where ssex='女'
group by sdept
--34、统计每个系的男生人数和女生人数以及男生的最大年龄和女生的最大年龄
select sdept,ssex,count(*) as 人数,max(sage) as 最大年龄,min(sage) as 最小年龄
from student
group by sdept,ssex

--35、查询选修了3门以上课程的学生的学号和选课门数
select sno,count(cno) as 选课门数
from sc
group by sno
having count(cno)>2
--36、查询选课门数等于或小于4门的学生的平均成绩和选课门数
select sno,count(cno) as 选课门数,avg(grade)as 平均成绩
from sc
group by sno
having count(cno)<=4
--37、对c01号课程的成绩进行明细汇总
select sno,cno,grade
from sc
where cno='c01'
compute sum by grade
--38、对每门课程的成绩进行明细汇总
select sno,cno,grade
from sc
where cno
compute sum by grade
--39、分别从student表中返回前5个,返回表中前20%的学生信息
select top 5 *
from student

select top 20 percent *
from student
--40、查询sc表中,分数最高的6个学生的学号
select top 6 sno,grade
from sc
order by grade desc


--1、查询每个学生及其选修课的情况(内连接两种方式实现)
select *
from sc,student
where student.sno=sc.sno 

select *
from student inner join sc on student.sno=sc.sno 
--2、查询计算机系学生的选修课情况,要求列出学生的名字、所修课程的课程号和成绩。(内连接两种方式实现)
select sname,cno,grade
from sc,student
where student.sno=sc.sno and sdept='计算机系'

select sname,cno,grade
from student inner join sc on student.sno=sc.sno and sdept='计算机系'
--3、查询信息系选修了VB课程的学生的选修课成绩,列出学生的姓名、课程名和成绩。(内连接两种方式实现)
select sname,cname,grade
from sc,student,course
where student.sno=sc.sno and sc.cno=course.cno  and cname='VB' and sdept='信息系'

select sname ,cname,grade
from student inner join sc on student.sno=sc.sno inner join course on sc.cno=course.cno 
where cname='VB' and sdept='信息系'
--4、查询每个系的学生的考试平均成绩。(内连接两种方式实现)
--5、查询计算机系每门课程的选课人数、平均成绩、最高成绩和最低成绩。(内连接两种方式实现)
--6、查询学生的选修课情况,包括选修了课程的学生和没有选修课程的学生。(左外连接和右外连接实现)
select student.sno,sname,grade
from student left outer join sc on student.sno=sc.sno

select student.sno,sname,grade
from sc right outer join student on student.sno=sc.sno
--7、查询哪些课程没有人选,列出课程名
--8、将对计算机系学生的查询结果与信息系学生的查询结果合并为一个结果集
--9、查询要求同上,但将查询结果按年龄从大到小排序
--10、将计算机系的学生信息存入到#computer局部临时表中
--11、将选修了VB课程的学号及成绩存入全局临时表##computer中
--12、将计算机系学生的姓名、选修课的课程名和成绩存入到永久表computer中
--13、查询年龄最大的三个学生的姓名、年龄及所在系
--14、查询VB课程考试成绩的前三名的学生的姓名和成绩

--1.查询与“张一”在同一个系学习的学生。
select sdept
from student
where sname='张一'

select *
from student
where sdept in (select sdept
             from student
             where sname='张一')


--2.查询成绩大于90分的学生的学号和姓名。
select sno
from sc
where grade>90

select sno,sname
from student
where sno in(select sno
           from sc
           where grade>90)
--3.查询计算机系选修了“数据库基础”课程的学生的学号和姓名。
select cno
from course
where cname like '数据库'

select sno
from sc
where cno in (select cno
from course
where cname like '数据库')

select sno,sname
from student
where sdept='计算机系'and sno in (select sno
              from sc
              where cno in (select cno
              from course
              where cname like '数据库'))
--4.查询修了‘C02’课程、且成绩高于此课程的平均成绩的学生的学号和成绩。
select avg(grade) as 平均成绩
from sc
where cno='c02'

select sno,grade
from sc
where grade>(select avg(grade)
             from sc
             where cno='c02')
--5.查询计算机系年龄大于学生总平均年龄的学生的姓名和年龄。
select avg(sage)
from student

select sname,sage
from student
where sdept ='计算机系' and sage>(select avg(sage)
                                  from student) 

--6.查询‘c02’课程考试成绩最高的学生的姓名和所在系。
select max(grade)
from sc
where cno='c02'

select sno
from sc
where grade in (select max(grade)
from sc
where cno='c02')

select sname,sdept
from student
where sno in (select sno
from sc
where grade in (select max(grade)
from sc
where cno='c02'))

--7.查询选修了‘C01’号课程的学生姓名。
select sno
from sc
where cno='c01'

select sname 
from student
where sno in (select sno
              from sc
              where cno='c01') 


 

发布了2 篇原创文章 · 获赞 6 · 访问量 824
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章