use Person
<--添加约束-->
Alter table Student
alter column Sno char(5) not null;
Alter table Student
Add constraint uq_sno unique(Sno);
Alter table Student
Add constraint C_sex check(Ssex in('男','女'));
Alter table Student
Add constraint df_Sage Default 20 for Sage;
Alter table Student
Add constraint PK_Sno primary key(Sno);
<--要把字段设置为非空,sqlserver不允许空值列建立主键约束-->
Alter table Course
alter column Cno char(3) not null
Alter table Course
Add constraint PK_Cno primary key(Cno),constraint FK_Cpno_ foreign key(Cpno) references Course(Cno);
Alter table Course
Drop constraint FK_Cpno_;
Alter table SC
alter column Cno char(3) not null
Alter table SC
alter column Sno char(5) not null
Alter table SC
Add constraint PK_sc primary key(Sno,Cno),constraint FK_Sno foreign key(Sno) references Student(Sno),constraint FK_Cno foreign key(Cno) references Course(Cno)
<--插入数据-->
insert into Student(Sno,Sname,Ssex,Sage,Sdept) values('08001','张力','男','18','cs');
select * from Course
select Getdate()
create table Student
(
Sno char(5),//学号
Sname char(20),//姓名
Ssex char(2),//性别
Sage Smallint,//年龄
Sdept char(15)//系别
);
create table Course
(
Cno char(3),//课程号
Cname char(30),//课程名
Cpno char(3),//先修课号
Ccredit Smallint//学分
);
create table SC
(
Sno char(5),//学号
Cno char(3),//课程号
Grade int//分数
)
<--查询语句-->
select Sno,Grade from SC where Cno='002' order by Grade desc;
select * from SC ORDER BY Cno,Sno desc;
select count(distinct Sno) from Student
select AVG(Grade) from SC where Cno='002';
select max(grade) from SC where Cno='001'
select Sdept,count(Sno) from Student Group by Sdept;
select Cno,avg(Grade) from SC group by Cno;
select Sno,avg(Grade) from SC group by Sno;
<--查询选修了3门课程以上的学生的学号-->
select Sno,Count(Cno) from SC group by Sno having count(cno)>3 ;
<-查询所有成绩为优秀的学生的学号->
select Sno,min(grade)
from SC
where Sno
not in(select Sno from SC where Grade is null)
Group by Sno
having min(Grade)>=90;
<--等值连接:查询每个学生及其选修课程的情况-->
select Student.*,Sc.*
from Student,Sc
where Student.Sno=Sc.Sno;
select Sno,Cno from Student,Course;
<--自身连接查询:查询每门课程的见解先修课-->
select First.Cno,Second.Cpno
from Course as First,Course as Second
where First.Cpno=Second.Cno;
<--自身连接查询:查询和刘晨在同一个系的学生-->
Select S2.* from Student S1,Student S2
where S1.Sname='刘晨' And S1.Sdept=S2.Sdept;
<--外连接查询->
Select Student.*,Sc.* from Student Left Join Sc On Student.Sno=Sc.Sno;
<--复合连接查询:查询选修了002课程号且成绩大于90的学生情况-->
select student.* from Student,Sc
where Student.Sno=SC.Sno And Sc.Cno='002' And Grade>'90';
<--复合连接查询:查询选修了课程的学生姓名、课程名、和成绩-->
Select Sname,Cname,Grade
from Student,SC,Course
where Student.Sno=SC.Sno And
Sc.Cno=Course.Cno;
<--查询所有成绩为优秀的学生姓名-->
Select Sname
from Student,Sc
where Student.Sno=SC.Sno And
Student.Sno Not in(Select Sno from SC where Grade is null)
group by Sname
having min(Grade)>80;
<--子查询:查询未被学生选修的课程信息--->
select * from Course where Course.Cno not in (select Distinct Cno from Sc)
<--子查询:查询选修了课程名为数据库的课程的学生信息-->
select Cno from Couse where Cname='数据库'
select Sno from Sc
where Cno
in(select Cno from Couse where Cname='数据库')
select * from Student
where Sno in(select Sno from Sc where Cno in(select Cno from Course where Cname='数据库'));
select Student.* from Student,SC,Course
where Student.Sno=SC.Sno
And Sc.Cno=Course.Cno
and Course.Cname='数据库';
<--子查询:查找其它系中比IS某一系学生年龄小的学生信息-->
select * from Student
where Sage< Any(select Sage from Student where Sdept='is')
And Sdept<>'is' Order by Sage Desc;
<--相关子查询:查询比本系平均年龄大的的学生信息-->
select *
from Student S1
where Sage>
(select avg(Sage)
from Student S2 where S1.Sdept=S2.Sdept)
<--Exists子查询;查询所有选修了001号课程的学生姓名-->
select Sname
from Student
where Exists(select *
from Sc where Sno=Student.Sno And Cno='001');
<--集合查询-->
<--UNION运算符:查询计算机系的学生以及年龄不大于19的学生-->
Select * from Student where Sdept='CS'
Union
Select * from Student where Sage<=19;
Select *
from Student
where Sdept='Cs' Or Sage<=19;
<--集合的交操作 Intersect:查询选修了课程001而且002的学生学号-->
select Sno from Sc
where Cno='001' And Sno In
(Select Sno From Sc where Cno='002');
Select A.Sno from Sc A,Sc B
where A.Cno='001' And B.Cno='002' And A.Sno=B.Sno;
<--插入数据-->
<--创建新表Deptage,保存每一个系的学生平均年龄-->
Create table Deptage
(
Sdept Char(15),
Avgage Smallint
)
<--对Student表按系别进行分组,求平均年龄,然后存入表Deptage-->
Insert into
Deptage(Sdept,Avgage) select Sdept,avg(Sage)
from Student group by Sdept;
<--修改数据-->
<--把选修了课程名为'数据库'的课程的学生的成绩改为0-->
Update Sc set Grade=0 where Cno in(Select cno
from Course
where Cname='数据库')
<--删除数据-->
<--删除所有学生的选课记录-->
delete from sc;
<--删除计算机系(cs)所有学生的选课记录-->
delete
from SC
where Sno in(select Sno
from Student
where Sdept='CS')
delete
from SC
where 'CS'=(select Sdept
from Student
where Student.Sno=Sc.Sno)