7.把李梅的性别和年龄分别用女和19岁填充。update student
set sex=‘女’
set age=‘19’
where name= ‘李梅’
7.删除分数低于400的人。
delet from student where score<400
8.添加学生郭八,学号I0008,性别男,年龄20,总分411。
insert into student values(‘I0008’, ‘郭八’, ‘男’, 20, ‘411.00’);
9.将所有学生的分数按总分为500,换算成百分制。
updata student set score=score/500*100
10.删除学号为“C0003”的学生。
delet form student where id=‘C0003’
11.将年龄为25岁的学生分数加3。
updata student set score=score+3 where age=25
实验三
1.打开数据库SQL Server 2000的查询分析器,用Create Table建表Student,表结构如下所示:
| 字段名 | 类型 | 长度 | 含义 |
| ID | Varchar | 20 | 学号 |
| Name | Varchar | 10 | 姓名 |
| Age | Int | | 年龄 |
| Department | Varchar | 30 | 所在系 |
create table student(id varchar(20),name varchar(10),age int,department varchar(30))2.用Create Table建表Course,表结构如下所示:
| 字段名 | 类型 | 长度 | 含义 |
| CourseID | Varchar | 15 | 课程号 |
| CourseName | Varchar | 30 | 课程名 |
| CourseBefore | Varchar | 15 | 先行课 |
create table course(courseid varchar(15),coursename varchar(30),coursebefore varchar(15))3.用Create Table建表Choose,表结构如下所示:
create table choose(id varchar(20),courseid varchar(30),score dec(5,2))
4.用INSERT语句向表Student中插入3条记录:
| ID | Name | Age | Department |
| 00001 | 张三 | 20 | 计算机系 |
insert into student values('00001','张三',20,'计算机系')insert into student values('00002','李四',19,'计算机系')
insert into student values('00003','王五',21,'计算机系')
5.INSERT语句向表Course中插入3条记录:
| CourseID | CourseName | CourseBefore |
| C1 | 计算机引论 | Null |
| C2 | PASCAL语言 | C1 |
| C3 | 数据结构 | C2 |
insert into course values('C1','计算机引论',' Null ').........\6.用INSERT语句向表Choose中插入7条记录:
insert into choose values('00001','C1','95')....................7.用SELECT语句求计算机系学生的学号和姓名。
select department AS 计算机系,id AS 学号,name AS 姓名
from student
8.用SELECT语句求学生的学号、姓名、选的课程名及成绩。
select student.id AS 学号,student.name AS 姓名,course.coursename AS 课程,choose.score AS 成绩
from student,course,choose
where student.id=choose.id and course.courseid=choose.courseid
9.用SELECT语句求C1课程的成绩低于张三的学生的学号和成绩。
select id AS 学号,score AS 成绩
from choose
where courseid='C1'and score<95
10.用SELECT语句求选了C2课程并且也选了C3课程的学生的学号。
select id AS 学号
from choose
where (courseid='C1')and(courseid='C3')
实验四
1. 建立教学数据库teaching
2. 建立教学数据库的三个基本表:
S (S#, SNAME, AGE, SEX) 学生(学号,姓名,年龄,性别)
SC (S#, C#, GRADE ) 选修(学号,课程号,成绩)
C (C#, CNAME, TEACHER) 课程(课程号,课程名,任课教师)
CREATE DATABASE teaching
create table S (S# varchar(20), SNAME varchar(30) ,AGE int,SEX varchar(2));
create table SC (S# varchar(20), C# varchar(30) ,GRADE dec(5,2));
create table C(C# varchar(30) ,CNAME Varchar(15),TEACHER varchar(30));
3.输入数据
基本表S的数据
基本表C的数据基本表SC的数据(空格为未修课)| S# C# | S1 | S2 | S3 | S4 | S5 | S6 |
| C1 | 80 | 85 | 90 | 75 | 70 | 90 |
| C2 | 70 | | 85 | | 60 | |
insert into S values('S1','WANG','20','M');............insert into C values('C2','MATHS','MA');.........................
insert into SC values('S1','C1','80');............
4.建立男学生的视图schoolboy,属性包括学号、姓名和年龄。
CREATE VIEW schoolboy
AS
SELECT S.S#, S.SNAME, S.AGE
FROM S where S.SEX=('M')
5在视图schoolboy中查询年龄为19的学生学号与姓名。
SELECT S#,SNAME FROM schoolboy where AGE='19'
6将学号为S2的年龄改为21。
update schoolboy set S#=('21') where S#=('S2')
7向男学生视图schoolboy中插入一个新的男生记录,其中学号为S7,姓名为MING,年龄为20。
insert into schoolboy values('S7','MING',20);
8删除视图schoolboy中学号为S3的记录。
delete from schoolboy where S#=('S3')
9建立女学生的视图,属性包括学号、姓名、选修课程名和成绩。
CREATE VIEW schoolgirl
AS SELECT S.S#, S.SNAME,
SC.GRADE, C.CNAME
FROM S INNER JOIN
SC ON
S.S# = SC.S# INNER JOIN
C ON SC.C# = C.C#
where S.SEX=('F')
10在女学生视图中查询平均成绩大于80分的学生学号与姓名。
SELECT S#,SNAME FROM schoolgirl where GRADE>('80')
11删除女学生视图。
DROP VIEW shoolgirl
实验五
1、在SQL SERVER 2000任一示例数据库中建立如下三个学生选课相关的表,并输入相应的记录行。
create table Student (sno varchar(20), sname varchar(30) , age int, sex varchar(2));
create table Course(cno varchar(30) , cname Varchar(15), teacher varchar(30), office varchar(30));
create table SC (sno varchar(20), cno varchar(30) , score dec(5,2));
学生表Student
insert into Student values('98601','李强','20','男');课程表Course
| cno | cname | teacher | office |
| C601 | 高等数学 | 周振兴 | 416 |
insert into Course values('C601','高等数学','周振兴','416');选课表SC
insert into SC values('98601','C601','90');2、用SQL完成下列查询。
(1) 查询“周振兴”老师所授课程的课程号CNO和课程名CNAME。
SELECT cno ,cname FROM Course where teacher='周振兴'
(2) 查询年龄大于21的男学生学号SNO和姓名SNAME。
SELECT sno ,sname FROM Student where (sex='男' and age>'21')
(3) 查询至少选修“刘建平”老师所授全部课程的学生姓名SNAME。
SELECT SNAME FROM STUDENT WHERE SNO IN
(SELECT DISTINCT S1.SNO FROM SC S1,SC S2 WHERE S1.SNO=S2.SNO AND S1.CNO!=S2.CNO AND S1.CNO IN
(SELECT CNO FROM COURSE WHERE TEACHER='刘建平') AND S2.CNO IN
(SELECT CNO FROM COURSE WHERE TEACHER='刘建平'))
(4) 查询“刘丽”同学不学课程的课程号。
SELECT CNO FROM COURSE WHERE CNO NOT IN
(SELECT CNO FROM SC WHERE SNO IN
(SELECT SNO FROM STUDENT WHERE SNAME='刘丽'))
(5) 查询至少选修两门课程的学生学号。
SELECT sno FROM SC group by SC.sno having count(cno)>=2
(6) 查询全部学生都选修的课程的课程号和课程名。
SELECT COURSE.CNO,COURSE.CNAME FROM COURSE,SC
WHERE COURSE.CNO=SC.CNO GROUP BY COURSE.CNO,COURSE.CNAME HAVING COUNT(SNO)=(SELECT COUNT(SNO) FROM STUDENT)
(7) 查询选修课程包含“王志伟”老师所授课程的学生学号。
(SELECT DISTINCT SNO FROM SC WHERE CNO IN
(SELECT CNO FROM COURSE WHERE TEACHER='王志伟'))
(8) 查询选修课程号为C601和C603的学生学号。
SELECT DISTINCT SNO FROM SC WHERE CNO='C601' OR CNO='C603'
(9) 查询选修全部课程的学生姓名
SELECT STUDENT.SNAME
FROM STUDENT,SC
WHERE STUDENT.SNO=SC.SNO GROUP BY STUDENT.SNO,STUDENT.SNAME HAVING COUNT(CNO) =(SELECT COUNT(CNO) FROM COURSE);
(10)查询选修课程包含学号为98603的学生所修课程的学生学号。
SELECT SNO FROM SC WHERE CNO IN
(SELECT CNO FROM SC WHERE SNO='98603') AND SNO != '98603'
GROUP BY SNO HAVING COUNT(SNO)=(SELECT COUNT(*) FROM SC WHERE SNO='98603')
(11)查询选修课程名为“操作系统”的学生学号和姓名。
SELECT SNO,SNAME FROM STUDENT WHERE SNO IN
(SELECT SNO FROM SC WHERE CNO IN
(SELECT CNO FROM COURSE WHERE CNAME='操作系统'))
(12)查询各学生所有课程的平均成绩。
SELECT SNAME,SCORE_AVG FROM (SELECT SNO,AVG(SCORE) SCORE_AVG FROM SC GROUP BY SNO) T INNER JOIN STUDENT ON T.SNO=STUDENT.SNO
(13)查询各学生选修课程的总门数。
SELECT SNAME,C_NUM FROM (SELECT SNO,COUNT(CNO) C_NUM FROM SC GROUP BY SNO) T INNER JOIN STUDENT ON T.SNO=STUDENT.SNO
(14)查询每门课程的平均分。
SELECT CNO,AVG(SCORE) SCORE_AVG FROM SC GROUP BY CNO
(15)查询选修课程的最低成绩大于等于60 分的学生信息。
SELECT * FROM STUDENT
WHERE SNO IN
(SELECT SNO FROM STUDENT
WHERE SNO NOT IN
(SELECT SNO FROM SC WHERE SCORE<60));
(16)查询选修课程的所有成绩均大于等于80 分的学生信息。
SELECT * FROM STUDENT
WHERE SNO IN
(SELECT SNO FROM STUDENT
WHERE SNO NOT IN
(SELECT SNO FROM SC WHERE SCORE<80));
实验六
1. 建立教学数据库teaching
2. 建立教学数据库的三个基本表:
S (S#, SNAME, AGE, SEX) 学生(学号,姓名,年龄,性别)
SC (S#, C#, GRADE ) 选修(学号,课程号,成绩)
C (C#, CNAME, TEACHER) 课程(课程号,课程名,任课教师)
create table S(S# varchar(20),SNAME varchar(20),AGE int,SEX varchar(20))
create table SC(S# varchar(20),C# varchar(20),GRADE dec(5,2))
create table C(C# varchar(20),CNAME varchar(20),TEACHER varchar(20))
4.输入数据
基本表S的数据
insert into S values('S1','WANG','20','M').............基本表C的数据
insert into C values('C2','MATHS','MA')............基本表SC的数据(空格为未修课)
| S# C# | S1 | S2 | S3 | S4 | S5 | S6 |
| C1 | 80 | 85 | 90 | 75 | 70 | 90 |
| C2 | 70 | Null | 85 | | 60 | Null |
insert into SC values('S1','C1','80')...insert into SC values('S2','C2',Null)..
4. 数据修改、删除
1)把C2课程的非空成绩提高10%。
UPDATE SC SET GRADE=GRADE*1.1 WHERE C#='C2' AND C# IS NOT NULL
2)在SC表中删除课程名为PHYSICS的成绩的元组。
delete from C where C.CNAME='PHYSICS'
3)在S和SC表中删除学号为S8的所有数据。
delete from S where S#='S8' delete from SC where S#='S8'
5. 计算每个学生有成绩的课程门数、平均成绩。
SELECT SNAME,avg(GRADE) as平均成绩, count(C#)AS选修课程的总门数
FROM SC INNER JOIN S on SC.S#=S.S# group by S.SNAME下载本文