在对话框中选择创建视图的基表TB03、TB04、TB06、TC04 , 单击“添加”按纽将四张表添加到表区。
(3)在表区的TB03、TB04、TB06、TC04四个表中单击字段左边复选框,将需要显示字段(TB03.*,TB0402,TC0402,TB0602)添加到列区中去。
(4)在列区中的准则框中输入查询条件,并可进行排序类型和排序顺序的设置。 (5)上述工作完成后,相应的SQL脚本将出现在SQL Script区中,如图5-16所示。 (6)单击对话框右上角的“关闭”按钮,出现保存视图的对话框,输入视图名View_TB03,则视图建立完毕。
图5-16 用企业管理器建立视图
注意:当建立视图的数据基表结构发生变化时,必须重新修改创建视图的语句并执行后,才能对变化后数据基表进行查询。常用的做法就是先删除视图(删除视图的语句为:Drop View <视图名>),然后再重新创建视图。
5.2.3 使用视图
视图主要用于数据查询,可以用Select语句查询视图中的数据,语句格式与数据表的Select语句完全相同,只须将From子句中的数据表名换成视图名即可。
【例5-32】 用视图View_TB03查询“计算机系”所有班级的班级名称、入学年份、专业名称、毕业标志、所属系部。
Select TB0302,TB0303,TB0402,TC0402,TB0602 From View_TB03 Where TB0602='计算机系'
【例5-33】 创建学生档案表XA01的视图View_XA01,能显示学生档案表XA01所有字
- 166 -
段,及性别、籍贯、民族、班级名称、系部名称字段信息。使用视图View_XA01查询姓王男生的信息(系部,班级,学号,姓名,性别),使用视图View_XA01分组统计各系各班男女生人数。
(1)创建视图View_XA01 Create View View_XA01 As
Select XA01.*,GC0102,GC0202,GC0302,GC0402,TB0302,TB0601,TB0602 From XA01
Join GC01 On XA0106 = GC0101 Join GC02 On XA0109 = GC0201 Join GC03 On XA0108 = GC0301 Join GC04 On XA0110=GC0401 Join TB03 On XA0114=TB0301 Join TB06 On TB0309=TB0601
(2)使用视图View_XA01查询“王”姓男生的信息 Select TB0602 As '系部' ,TB0302 As '班级',XA0102 As '学号',
XA0104 As '姓名' ,GC0102 As '性别'
From View_XA01 Where GC0102='男' And
XA0104 Like '王%'
(3)使用视图View_XA01分组统计各系各班男女生人数 Select TB0602 As '系部名称',TB0302 As '班级名称',
GC0102 As '性别',Count(*) As '学生人数'
From View_XA01
Group By TB0602,TB0302,GC0102,TB0601 Order By TB0601
显然,原先要用连接查询和子查询实现的复杂查询语句,现在使用事先定义好的视图,Select语句变得简单多了。
【例5-34】 创建学生成绩表XA05的视图View_XA05,能显示学生成绩表XA05所有字段、学生学号、班内序号、姓名、班级名称、系部名称等信息。用视图View_XA05查询选修“C++程序设计”课程的所有学生成绩信息(系名、班名、学号、姓名、课程名、考核标志、成绩),查询各班各门课程的学生人数、平均分、最高分、最低分。
(1)创建视图View_XA05 Use Xsgl Go
Create View View_XA05 As
- 167 -
Select XA05.*,XA0102,XA0103,XA0104,TB0302,TB0602,TB0103,TC0202,TC0302 From XA05
Join XA01 On XA0501 = XA0101 Join TB03 On XA0502 = TB0301 Join TB06 On TB0309=TB0601 Join TB01 On XA0506=TB0101 Join TC02 On XA0507=TC0201 Join TC03 On XA0508=TC0301
(2)使用视图View_XA05查询选修“C++程序设计”课程的所有学生成绩信息 Use Xsgl
Select TB0602,TB0302,XA0102,XA0104,TB0103,TC0302,XA0509 From View_XA05
Where TB0103 = 'C 语言程序设计'
(3)使用视图View_XA05查询计算机系各班各门课程的学生人数、平均分、最高分、最低分,并按班级与课程排序。
Select TB0302 As '班级名称',TB0103 As '课程名称',Count(XA0501) As '学生人数',
Cast (Avg(Cast(XA0509 as float)) as int) As '平均成绩', Cast (Max(Cast(XA0509 as float)) as int) As '最高分', Cast (Min(Cast(XA0509 as float)) as int) As '最低分'
From View_XA05
Where TB0602='计算机系' and XA0509 Between '00' AND '99' Group By TB0302,TB0103 Order By TB0302,TB0103
5.3 数据插入语句
当数据表创建后,就要对数据表进行数据插入操作。可以使用企业管理器与SQL语句两种方法实现数据插入操作。用企业管理器对数据进行更新操作的方法是,在企业管理器的树形目录中右击数据表,在弹出式菜单中选择“打开表 | 返回所有行 ”命令,进入数据表编辑对话框,在此对话框内可进行记录的插入,同时也可进行记录的删除和修改,操作比较简单,读者可以自行练习。这里只介绍用SQL语言进行数据插入的方法(数据删除与修改也仅介绍用语句实现)。
Insert插入语句有两种格式,一种是使用Values关键字直接给字段赋值,另一种是使用Select子句,从其他表或视图中取出数据插入到数据表中去。
- 168 -
5.3.1 使用Values关键字的Insert语句
语句格式如下:
Insert Into <数据表名> [(字段名表)] Values (字段值表)
执行语句时,先在数据表中添加一条新记录,然后将关键字Values后的字段值依次赋给新记录的每个字段。
说明:
(1)插入整条记录的所有字段值时,语句中的“字段名表”可省略。 【例5-35】按下列要求编写插入语句。 ① 在系部编码表TB06中插入汽车系信息。 Insert Into TB06 Values('11','汽车系','QCX','冯明东') ② 在班级编码表TB03中插入班级的信息。
Insert Into TB03 Values('10200232','机械10232','2002','04','3',32,'','1','10') Insert Into TB03 Values('10300132','模具10132','2001','06','3',30,'327','1','10') Insert Into TB03 Values('2001131','制冷20031','2000','11','3',38,'','1','50') Insert Into TB03 Values('2001901','电子20001','2000','25','3',45,'328','1','20') Insert Into TB03 Values('2001902','电子20002','2000','25','3',47,'332','1','20') Insert Into TB03 Values('20400101','制冷20101','2001','20','3',47,'','1','50') 插入语句执行后,可用Select语句查询插入结果,如Select * From TB03。 (2)插入记录的部分字段数据时,必须写明插入字段名。 【例5-36】在学生档案表XA01中插入“戴明波”学生的部分信息。 Insert Into
XA01(XA0101,XA0102,XA0103,XA0104,XA0106,XA0108,XA0109,XA0110,XA0114) Values('02479','980140','51','戴明波','1','01','320100','01','990101')
(3)插入数据时要保证数据完整性,即不能违反实体完整性、参照性完整性、用户自定义完整性,否则会出现插入错误的信息,如图5-17所示。
图5-17 插入数据时的错误
(4)字段值表中的数目、顺序和数据类型必须与字段名表中列的数目、顺序和数据类型相对应。
- 169 -
5.3.2 使用Select子句的Insert语句
语句格式如下:
Insert Into <数据表名> [(字段名表1)] Select 字段名表2 From 表名
说明:字段名表1与字段名表2中的数目、顺序和数据类型必须相对应。
【例5-37】 在学生成绩表XA05初始化程序中,要将学生档案表XA01中指定班级学生编码与班级课程表TA19中该班所上课程编码等信息添加到学生成绩表XA05中去。
学生档案表XA01、班级课程表TA19与学生成绩表XA05的表结构见附录A的表A.5、表A.11、表A.14。在Insert语句中,可用Select子句从学生档案表XA01中,将指定班级的学生编码XA0101、班内序号XA0103插入到学生成绩表XA05的XA0501与XA0503字段中;从班级课程表TA19中,将指定班级的班级编码TA1901、学年TA1902、学期TA1903、课程编码TA1904等字段内容插入到学生成绩表的XA0504、XA0505、XA0506等字段中。假设指定班级编码为'3001231'、学年为'2001-2002'、学期为'1',则将学生编码与课程信息插入学生成绩表中的Insert语句如下。
Insert Into
XA05 ( XA0501,XA0502,XA0503,XA0504,XA0505,XA0506,XA0507,XA0508) Select XA0101,TA1901,XA0103,TA1902,TA1903,TA1904,TA1907,TA1908 From XA01
Join TA19 On XA0114=TA1901 Where XA0114='3001231' And
TA1902='2004-2005' And TA1903='1'
5.4 数据删除语句
5.4.1 使用Delete语句删除数据
删除语句用于删除数据表中满足条件的记录,语句格式如下。 Delete From <数据表名> Where <条件表达式>
说明:若不加Where子句则删除表中全部数据。 【例5-38】 从系部编码表TB06中删除汽车系记录。 Delete From TB06 Where TB0602='汽车系'
- 170 -