数据库系统及应用复习——第三章关系数据库SQL

(1)SQL数据库的体系结构,SQL的组成。

(2)SQL的数据定义:SQL模式、基本表和索引的创建和撤销(CREATE、DROP、ALTER)

(3)SQL的数据查询;SELECT语句的句法,SELECT语句的三种形式及各种限定,基本表的联接操作,SQL3中的递归查询。

(4)SQL的数据更新:插入、删除和修改语句。

(5)视图的创建和撤消,对视图更新操作的限制。 为了使通过视图插入新行时,元组满足视图的定义条件, 在定义视图时必须加上WITH CHECK OPTION子句    

        视图是一张虚表,视图中的数据并不实际存储,定义保存在数据字典中,为了使通过视图插入新行时,元组满足视图的定义条件,定义视图时要加上WITH CHECK OPTION子句。

        视图不能再建表,但可以再建视图,可以建立在一个或多个基本表或视图上

CREATE VIEW <视图名>[(<列名>[,<列名>[....]])]

AS <子查询>

[WITH CHECK OPTION](防止修改视图以外的点)

更新视图要转换为对基本表的更新,类似视图的消解,并不是所有视图都是可更新的,但一般行列子集视图是可更新的。

创建表:

数据库系统及应用复习——第三章关系数据库SQL_第1张图片

例3.9将年龄的数据类型由字符型改为整数。

        ALTER TABLE Student ALTER COLUMN Sage INT;

删除基本表:

         DROP TABLE <表名> [RESTRICT|CASCADE];

前者表示表的删除是有限制条件的,不能被其他表的约束所引用,不能有视图,不能有触发器

后者表示表的删除没有限制条件,在删除基本表的同时,相关的依赖对象一起被删除。

数据查询

数据库系统及应用复习——第三章关系数据库SQL_第2张图片

 字符匹配

[NOT] LIKE '<匹配串>' [ESCAPE'<换码字符>']

外连接

SELECT Student.Sno, Sname, Ssex, Sage,Sdept,Cno,Grade

FROM Student LEFT OUTER JOIN SC ON (Student.Sno = SC.Sno);

                                                                /USING(Sno) //使用using删除重复值

左外连接列出左边所有元组

在嵌套查询中,子查询的SELECT语句不能使用ORDER BY子句

数据更新:

插入

INTO <表名> [(<属性列1>[,<属性列2>]....)]

VALUES(<常量1>[,<常量>]....);

修改

UPDATE <表名>

SET <列名>=<表达式>[,<列名> = .....]....

[WHERE<条件>];

 习题:

(2)选修了2门以上课程的学生学号。

SELECT   Sno  

FROM  SC      

GROUP   BY   Sno  HAVING  COUNT(*)>2

(3)查询没有选修C2号课程的学生的姓名。

SELECT Sname

FROM Student

WHERE Sno NOT IN (

        SELECT Sno

        FROM SC

        WHERE Cno = 'C2'

)

(4)求选修了C4号课程的学生的平均年龄

SELECT Sname, AVG(Sage)

FROM SC

WHERE Cno = 'C4'

(5)将计算机科学系学生的所有成绩置零。

UPDATE SC

SET Grade = 0

WHERE Sno IN(

        SELECT Sno

        FROM Studnet

        WHERE Sdept = 'CS'

)

(6)查询其他系中比计算机科学系(CS)所有学生年龄都小的学生姓名及年龄

SELECT Sname, Sage

FROM Student

WHERE Sage < ALL(SELECT Sage FROM Studnet WHERE Sdept = 'CS')

        AND Sdept <> 'CS'

7)查询年龄在18到22之间的学生的姓名,年龄,所在系。

SELECT Sname, Sage, Sdept

FROM Student

WHERE Sage BETWEEN 18 AND 22

8)查询所有姓“李”的学生的成绩。

SELECT Grade

FROM SC, Studnet

WHERE Student.Sno = SC.Sno 

        AND Sname LIKE '李%';

9)查询选修了5门以上课程的学生学号。

SELECT Sno 

FROM SC

GROUP BY Sno

HAVING COUNT(*) > 5

10)查询选修了“数据库原理”这门课的学生的姓名。

SLECT Sname 

FROM Studnet, SC, Course

WHERE Studnet.Sno = SC.Sno AND SC.Cno = Course.Cno and Cname = '数据库原理'

11)插入一条记录(99001,李明,男,22,经管系)到学生表中。

INSERT

INTO Student(Sno, Sname, Ssex , Sage, Sdept)

VALUES('99001','李明', '男', 22,'经管系')

12)将学生“95001”的学号改成“99089”。

UPDATE Student

SET Sno = '99089'

WHERE Sno = '95001'

13)设有三个关系:S(S#,SNAME,AGE,SEX) SC(S#,C#,GRADE)C(C#,CNAME,TEACHER)

试用关系代数表达式表示下列查询语句。

  • 检索LIU老师所授课程的课程号和课程名。

SELECT C#,CNAME  

FROM C  

WHERE TEACHER=‘LIU’

  • 检索年龄大于23岁的男学生的学号和姓名。

 SELECT S#,SNAME  

FROM S  

WHERE (AGE>23) AND (SEX=‘M’)

  • 检索至少选修LIU老师所授课程中一门课程的女学生姓名。

SELECT SNAME  

FROM S  

WHERE SEX=‘F’ AND S# IN   (

        SELECT S#  

        FROM SC  

        WHERE C# IN   (

                SELECT C#  

                FROM C  

                WHERE TEACHER=‘LIU’

        )

  • 检索WANG同学不学的课程的课程号 。

关系代数表达式有误,应当是C,不是CS

SELECT C#  

FROM C  

WHERE C# NOT IN   (

        SELECT C#  

        FROM SC  

         WHERE S# IN   (

                SELECT S#  

                FROM S  

                WHERE SNAME='WANG'

        )

)

  • 检索至少选修两门课程的学生学号。

SELECT S#   

FROM SC  

HAVING COUNT(C#)>=2

1)查询年龄小于20岁的学生学号和姓名。

        ΠSno,Sname(σSage<20(S))

2)查询选修了5号课程的学生学号和姓名。

        ΠSno,Sname(σCno=’5’(S∞C))

3)查询没有选修5号课程的学生学号。

        ΠSno(S)-ΠSno(σCno=’5’(S∞C))

4)查询至少选修了5号课程和6号课程的学生学号。

        ΠSno,Cno(SC)÷ΠCno(σCno=’5’or Cno=’6’(C))

例题:

(1)建立一张教师工资表teacher,它由编号BH,姓名XM,部门BM,基本工资JBGZ,补贴BT,工会费GHF,公积金GJJ,实发工资SFGZ组成,主码为编号BH。

Create table teacher (

        BH char(9) primary key,  

        XM char(20),      

        BM char(20),      

        JBGZ int,      

        BT int,      

        GHF int,      

        GJJ int,      

        SFGZ int

)

(2)向上述教师工资表增加一个“误餐费(WCF)”列,类型为整型。

alter table  teacher  add WCF int

(3)建立上述教师工资表teacher的视图,视图包括姓名、基本工资、实发工资,名称为BMV,条件是部门是“经管系”。

Create view BMV(XM, JBGZ, SFGZ)

As Select XM, JBGZ, SFGZ

From teacher

Where BM=’ 经管系’

(4)删除基本表教师工资表teacher。

drop table teacher

你可能感兴趣的:(数据库系统及应用,数据库,sql)