[例]设教学数据库中有3个关系:
学生关系S(SNO,SNAME,AGE,SEX)
学习关系SC(SNO,CNO,GRADE)
课程关系C(CNO,CNAME,TEACHER)
下面用关系代数表达式表达每个查询语句。
(1) 检索学习课程号为C2的学生学号与成绩。
πSNO,GRADE(σ CNO='C2'(SC))
(2) 检索学习课程号为C2的学生学号与姓名
πSNO,SNAME(σ CNO='C2'(SSC))
由于这个查询涉及到两个关系S和SC,因此先对这两个关系进行自然连接,同一位学生的有关的信息,然后再执行选择投影 *** 作。
此查询亦可等价地写成:
πSNO,SNAME(S)(πSNO(σ CNO='C2'(SC)))
这个表达式中自然连接的右分量为"学了C2课的学生学号的集合"。这个表达式比前一个表达式优化,执行起来要省时间,省空间。
(3)检索选修课程名为MATHS的学生学号与姓名。
πSNO,SANME(σ CNAME='MATHS'(SSCC))
(4)检索选修课程号为C2或C4的学生学号。
πSNO(σ CNO='C2'∨CNO='C4'(SC))
(5) 检索至少选修课程号为C2或C4的学生学号。
π1(σ1=4∧2='C2'∧5='C4'(SC×SC))
这里(SC×SC)表示关系SC自身相乘的乘积 *** 作,其中数字1,2,4,5都为它的结果关系中的属性序号。
希望能解决您的问题。
//自己把中文替换成英文字段名 我用的sql server数据库
select 学号、姓名、性别、年龄、所在系 from 学生 order by 年龄 desc, 学号 asc
select 学号,姓名 from 学生 where 姓名 in( select 姓名 from 学生 group by 姓名 having count()>1 )
update 成绩 set 成绩=0 where CNO=1
如果/不是除法的话 只是字符串 (除法暂时有问题)下班了 明天再来写
select C课程号,D课程名,D成绩 from COURSE C,(
select CONVERT(VARCHAR(50),A排名)+'/'+CONVERT(VARCHAR(50),BZS) as '排名/人数',a学号,a课程名,a成绩 FROM (
select ROW_NUMBER() over(partition BY 课程名 order by 成绩 desc) as 排名 , from GRADE where 学号='1') A,
(SELECT COUNT() as zs,课程名
FROM GRADE group by 课程名 ) B where a课程名=b课程名) D WHERE C课程名=D课程名
1:insert into student values('990012','梅立松',20,'女')
2: delete sc where sno=(select sno from student where name='夏春秋')
3: update SC set grade=grade(1+20%) where cno =(select cno from course where cname='英语')
1)SELECT ssno, scgrade
FROM (s INNER JOIN sc ON ssno = scsno) INNER JOIN c ON sccno = ccno
WHERE (((ccno)="c2"));
2)SELECT ssno, ssname
FROM (s INNER JOIN sc ON ssno = scsno) INNER JOIN c ON sccno = ccno
WHERE (((ccno)="c2"));
3)SELECT ssno, ssname
FROM (s INNER JOIN sc ON ssno = scsno) INNER JOIN c ON sccno = ccno
WHERE (((ccname)="maths"));
4)SELECT ssno
FROM (s INNER JOIN sc ON ssno = scsno) INNER JOIN c ON sccno = ccno
WHERE (((ccno)="c2")) OR (((ccno)="c4"));
5)SELECT ssname, ssag
FROM (s INNER JOIN sc ON ssno = scsno) INNER JOIN c ON sccno = ccno
WHERE (((ccno)<>"c2"));
1、CREATE TABLE [学生]
(
[学号] [char](8) NOT NULL,
[姓名] [char](4) NULL,
[性别] [char](1) NULL,
[出生日期] [date] NULL,
[班级] [char](3) NULL,
CONSTRAINT [PK_学生] PRIMARY KEY CLUSTERED
(
[学号] ASC
)
WITH
(
PAD_INDEX = OFF, TATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON
)
ON [PRIMARY]
)
ON [PRIMARY]
2、insert into 成绩 values('95031','3-105','90')
3、update 成绩 set 成绩=成绩+5 where 课程号 ='3-105'
4、所有记录指的是每张表的记录吗?如果是单一查询成绩表中的数据使用:
select from 成绩 where 成绩 between '60' and '80'
关联其他表可以用
select from 表名 where 字段 in(select 对应字段 from 成绩 where 成绩 between '60' and '80')
1、第一范式:保证列的原子性
第二范式:当复合主键时,非主键字段必须与主键字段有直接依赖
第三范式:非主键字段不能有直接依赖关系
2、
create dababase 学生信息管理
呵呵
1)
SELECT StudentSName,CourseCname,SCScore
FROM SC
LEFT JOIN Student ON SCSNo = StudentSNo
LEFT JOIN Course ON SCCNo = CourseCNo
WHERE StudentSNo = '20080101'
2)
UPDATE Student SET SAge = SAge + 2
3
INSERT INTO Student(SNo, SName, SAge, SDept) VALUES ('20080102', '李汉', '20', 'soft')
以上就是关于数据库的关系代数问题全部的内容,包括:数据库的关系代数问题、跪求大神帮帮忙!!!有一个【学生选修课】数据库,数据库中包括三个表,学生表,课程表,成绩表、急!关于数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)