SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
FROM Student,SC
WHERE Student.Sno = SC.Sno;
//自然连接完成 同时进行选择与连接查询 通过WHERE子句组合。
//示例二
SELECT Student.Sno,Sname
FROM Student,SC
WHERE Student.Sno = SC.Sno AND SC.Cno='2'AND SC.Grade>90;
//先进行挑选再其次进行连接得出最后结果。
//完成该查询
SELECT FIRST.Cno,SECOND.Cpno
FROM Course FIRST,Course SECOND
WHERE FIRST.Cpno=SECOND.Cno;
若因在SC中没有相应的元组,导致信息的丢失。但仍想要以Student表为主体,则可以以NULL为代表进行补充。
// 示例
SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
FROM Student LEFT OUTTER JOIN SC ON (Student.Sno =SC.Sno);
SELECT Student.Sno,Sname,Cname,Grade
FROM Student,SC,Course
WHERE Student.Sno=SC.Sno AND SC.Cno=Course.Cno;
在返回多值中,要注意相关子查询即x.Sno,t它与父查询有关。
示例一
SELECT Sname,Sage
FROM Student
WHERE Sage<ANY(SELECT Sage FROM Student WHERE Sdept='CS') AND Sdept<>'CS';
实例二
逻辑思想是值得学习的。
在一般的计算机系统中,安全措施是一级一级一层一层进行设置的。系统只有根据用户所出示的标识进行用户身份的鉴定,才可予以进行访问。但用户的身份的识别有区别于其他相关认证,因计算机系统,即所处单位的重要与否,着重于多种口令的鉴别,为防止恶意访问,或窃取修改资料,从而着重发展。
//示例一
GRANT SELECT
ON TABLE Student
TO U1;
//把查询Student表的权限给用户U1
//示例二
GRANT ALL PRIVILEGES
ON TABLE Student,Course
TO PUBLIC;
//把对Student表和Course表的全部操作授权于所有用户
REVOKE INSERT
ON TABLE SC
FROM U5 CASCADE; //联级收取
//对于用户U5的SC表的INSERT权限收回
由于在计算机系统中,用户对于数据的存储权限是依据个人的,所以用户所拥有的权限是可以自由的授予任何人,这就造成数据的无意识泄露。因为所授予方并不能确定被授予方是否将数据备份进行转卖。也就因此对于数据库系统控制下的所有主客体进行强制存储控制。
(强行存储控制是对数据本身进行的标记,通过对数据分级加密(密级),不过数据如何复制,但标记永远不会缺失,只有达到一定权限,才可进行访问。)
对于不同用户定义不同的视图,从而将数据限制在一定范围中,对于无权存取的用户进行隐藏。
CREATE VIEW CS_Student //建立视图
AS
SELECT *
FROM Student
WHERE Sdept='CS';
GRANT SELECT
ON CS_Student
TO U1; //U1检查限定
GRANT ALL PRIVILEGES
ON CS_Student
TO U2;
为了进一步对于数据的保护,从而以日志的方式对于数据库中的所有操作进行记录,但是审计往往是需要耗费大量时间与人力的所以一般用于对于安全性较高的部门。
AUDIT用来设计审计功能,NOAUDIT用于取消。
AUDIT ALTER,UPDATE
ON SC;
//对于SC表的修改(数据与结构)操作进行审计
NOAUDIT ALTER,UPDATE
ON SC;
//取消对于SC表的一切审计。