数据库第三章 学生——课程数据库

来源:互联网 发布:企业在淘宝开店流程 编辑:程序博客网 时间:2024/05/01 02:31

3.3数据定义

      3.3.1 模式的定义(CREATE)与删除(DROP)

      3.3.2基本表的定义(CREATE TABLE)、删除(DROP TABLE)与修改(ALTER TABLE)

               1.建立三个表,主码,外码要标出来,特别注意SC表主码为(Sno,Cno),且也是外码

                2.修改基本表:ALTER TABLE  <表名>

                                           ADD[COLUMN]<新列名>

                                            DROP<新列名>

       3.3.3索引的建立(CREATE INDEX)与删除(DROP INDEX)

                  1.索引的建立:

                         CREATE [UNIQUE] INDEX<索引名>

                          ON<表名>(<列名><次序>)

                          例:CREATE UNIQUE INDEX SCno

                                  ON SC(Sno ASC,Cno DESC):

3.4数据查询(数据查询是数据库的核心操作

         一般格式:SELETE   [ALL/DISTINCT]

                             FROM        表名

                             WHERE    (不能用于聚集函数

                              GROUP BY <列名>  HAVING<条件表达式>

           1.BETWEEN......AND和NOT BETWEEN.......AND              IN和NOT IN

            2.聚集函数

                      统计元组个数 :    COUNT(*)

                      统计一列中值的个数: COUNT([DISTINCT|ALL] <列名>)

                      计算一列值的总和(此列必须为数值型)   SUM([DISTINCT|ALL] <列名>)

                      计算一列值的平均值(此列必须为数值型)  AVG([DISTINCT|ALL] <列名>)

                      求一列中的最大值和最小值          MAX([DISTINCT|ALL] <列名>)          MIN([DISTINCT|ALL] <列名>)

                      SELECT Sno, AVG(Grade)

                       FROM  SC

                      WHERE AVG(Grade)>=90(X)

                       GROUP BY Sno;

                       因为WHERE子句中是不能用聚集函数作为条件表达式!!

                      正确的查询语句应该是:

                      SELECT  Sno, AVG(Grade)  (分组后,只能先Sno后聚集函数,分组属性)

                      FROM  SC

                     GROUP BY Sno

                      HAVING AVG(Grade)>=90;

          3.自身连接

                     查询每一门课的间接先修课(即先修课的先修课)

                         SELECT  FIRST.Cno, SECOND.Cpno

                         FROM  Course  FIRST, Course  SECOND

                         WHERE FIRST.Cpno = SECOND.Cno;

                          过程:先找到一门课的先修课,再按该先修课的课程号找它自己的先修课

          4.左外连接

              查询每个学生及其选修课程的情况

                         SELECT  Student.*, SC.*

                        FROM     Student, SC

                        WHERE  Student.Sno = SC.Sno;

              用左外连接改写

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

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

            5.EXISTS谓词(可用连接代替)

                NOT  EXISTS(不可以用连接代替)

3.5数据更新

            1.插入数据(INSERT)

               INSERT (没有*号)

               INTO

               VALUES

              2.删除数据(DELETE)

3.7视图

         1.并不是所有的视图都是可以更新的,一般行列子视图是可更新的

         2.sql语句的功能:数据查询、数据操作、数据控制和数据定义

         3.视图是从基本表和视图中导出的表,是一个虚表,数据库中实际存放的是视图的定义

         4.视图的作用:

                 (1).视图能够简化用户的操作

                 (2).视图能够使用户从多种角度看待同一数据

                  (3).视图对重构数据库提供了一定程度的逻辑独立性

                  (4).视图能够对机密数据提供安全保护

                  (5)。利用视图能够更清晰的表达查询

原创粉丝点击