数据库实习答案
1、E-R图向关系模式的转化。
最终答案:
    职工(职工号,姓名,性别,工资,职称,简历,部门号);
    部门(部门号,名称,地址,领导人职工号);
    工程(工程号,工程名,参加人数,预算,部门号,负责人职工号);
    办公室(编号,地点,电话,部门号);
    参加(职工号,工程号,日期,具体职务);
    (红部分为主键,绿部分为外键)。
2、SQL查询语句练习。
/******************************************************
* 实验3 数据库的简单查询实验答案
******************************************************/
【例】查询全体学生的学号与姓名
SELECT Sno,Sname FROM Students
【例】查询全体学生的学号、姓名、性别、年龄、所在系。
SELECT Sno,Sname,Sname Ssex,Sage,Sdept FROM Students
【例】查询全体学生的选课情况,即学号、课程号、成绩,成绩值都加5
SELECT Sno,Cno,Grade+5 FROM Enrollment
【例】查询全体学生的学号、姓名,并为原来的英文列名设置中文列别名。以下三种方法等价。
SELECT Sno '学号' , Sname '姓名' FROM Students
SELECT Sno AS '学号' ,Sname  AS '姓名' FROM Students
SELECT '学号'=Sno  , '姓名'=Sname FROM Students
【例】查询全体学生的选课情况,其成绩列值都加5,并为各列设置中文的别名
SELECT Sno '学号',Cno '课程号',Grade+5 '成绩'  FROM Enrollment
【例】显示所有选课学生的学号。
SELECT Sno '学号' FROM Enrollment
等价于:
SELECT ALL Sno '学号' FROM Enrollment
【例】显示所有选课学生的学号,并去掉重复行。
SELECT DISTINCT Sno '学号' FROM Enrollment
【例】查询学生选课成绩大于80分的学生学号、课程号、成绩。
SELECT * FROM Enrollment WHERE Grade>80
【例】查询数学系全体学生的学号、姓名。
SELECT Sno ,Sname FROM Students WHERE Sdept='Math'
【例】查询学生选课成绩在80~90分之间的学生学号、课程号、成绩。
SELECT * FROM Enrollment WHERE Grade BETWEEN 80 AND 90
等价于:
SELECT * FROM Enrollment WHERE Grade >= 80 AND Grade <=90
【例】查询学生年龄不在20~30之间的学生学号、姓名、所在系。
SELECT Sno ,Sname,Sdept FROM Students WHERE Sage NOT BETWEEN 20 AND 30
等价于:
SELECT Sno ,Sname,Sdept FROM Students WHERE Sage<20 OR Sage>30
【例】查询数学系、计算机系、艺术系学生的学号、姓名。
SELECT Sno,Sname FROM Students
WHERE Sdept IN ('Math', 'Computer', 'Art')
等价于:
SELECT Sno,Sname FROM Students
    WHERE Sdept ='Math' OR Sdept = 'Computer' OR Sdept = 'Art'
【例】查询既不是数学系、计算机系,也不是艺术系学生的学号、姓名。
SELECT Sno,Sname FROM Students
WHERE Sdept NOT IN ('Math', 'Computer', 'Art')
等价于:
SELECT Sno,Sname FROM Students
    WHERE Sdept! ='Math' AND Sdept! = 'Computer' AND Sdept! = 'Art'
【例】查姓名的第二个字符是u并且只有三个字符的学生的学号、姓名。
SELECT Sno,Sname FROM Students WHERE Sname LIKE '_u_'
【例】查姓名以S开头的所有学生的学号、姓名。
select distinct fromSELECT Sno,Sname FROM Students WHERE Sname LIKE 'S%'
【例】查姓名以S、D或J开头的所有学生的学号、姓名。
SELECT Sno,Sname FROM Students WHERE Sname LIKE '[SDJ]%'
【例】查姓名不是以S、D或J开头的所有学生的学号、姓名。
SELECT Sno,Sname FROM Students WHERE Sname LIKE '[^SDJ]%'
等价于:
SELECT Sno,Sname FROM Students WHERE Sname NOT LIKE '[SDJ]%'
【例】查询无考试成绩的学生的学号和相应的课程号。
SELECT Sno, Cno FROM Enrollment WHERE Grade IS NULL
不等价于:SELECT Sno, Cno FROM Enrollment WHERE Grade =0
【例】查询有考试成绩(即成绩不为空值)的学生的学号、课程号。
SELECT Sno, Cno FROM Enrollment WHERE Grade IS NOT NULL
【例3.3.20】查询计算机系年龄在18岁以上的学生学号、姓名。
SELECT Sno,Sname FROM Students WHERE Sdept='Computer' AND Sage>18
【例】求选修了C1课程或C2课程的学生学号、成绩。
SELECT Sno,Grade FROM Enrollment WHERE Cno='C1' OR Cno='C2'
为了使查询语句的可读性更好, 可以将WHERE后面的整个条件用括号括起来。
等价于:
SELECT Sno,Grade FROM Enrollment WHERE (Cno='C1' OR Cno='C2')
【例】求学生的总人数
SELECT COUNT(*) FROM Students
【例】求选修了课程的学生人数
SELECT COUNT(DISTINCT Sno) FROM Enrollment
【例】求选修了C1课程的学生的平均成绩。
SELECT AVG(Grade) FROM Enrollment WHERE Cno='C1'
【例】求号学生的考试总成绩之和。
SELECT SUM(Grade) FROM Enrollment WHERE Sno = ''
【例】选修了C1课程的学生的最高分和最低分
SELECT MAX(Grade) , MIN(Grade)  FROM Enrollment WHERE Cno='C1'
【例3.3.27】求选修每门课程的学生人数。
SELECT Cno AS '课程号', COUNT(Sno) AS '选修人数' 
FROM Enrollment GROUP BY Cno
【例】求每个学生的学号和各门课程的总成绩。
SELECT Sno '学号', Sum(grade) '总成绩'  FROM Enrollment  GROUP BY Sno
【例】求选修课程超过2门课的学生的学号、平均成绩,选修的门数。
SELECT Sno, AVG(Grade) AS '平均成绩', COUNT(*) AS ' 选修门数'

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。