当前位置:   article > 正文

【MySQL】《数据库系统》-实验项目12-SQL语句3(视图、完整性、关系代数查询)_sql查询语句及视图实验

sql查询语句及视图实验

实验项目
实验1  实验环境与操作流程
实验2  数据定义、查询与更新
实验3  基本表的定义、删除与修改
实验4  数据的插入、修改和删除
实验5  数据的查询
实验6  数据的视图
实验7  完整性语言
实验8  触发器
实验9  存储过程与函数
实验10  SQL语句1(创建、插入、查询)
实验11  SQL语句2(查询)
实验12  SQL语句3(视图、完整性、关系代数查询)

实验12  SQL语句3(视图、完整性、关系代数查询)

一、实验目的

1. 掌握数据库SQL语言;

2. 掌握视图的定义以及对视图的查询操作;

3. 掌握实体完整性、参照完整性与用户定义的完整性的定义和维护方法。

二、实验要求

1. 熟练掌握数据库SQL语言;

2. 熟练掌握视图的定义以及对视图的查询操作;

3. 熟练掌握实体完整性、参照完整性与用户定义的完整性的定义和维护方法。

三、实验内容

(课本130页习题39题、课本173页习题56题)

  • 导入备份:S_P_J数据库,以及供应商表(S)、零件表(P)、工程项目表(J)和供应情况表(SPJ4个基本表,以及其中的全部数据。
  • 视图(习题39题):
  1. 请为三建工程项目建立一个供应情况的视图,包括供应商代码(Sno)、零件代码(Pno)、供应数量(QTY)。
  2. 针对该视图完成查询1:找出三建工程项目使用的各种零件代码及其数量。
  3. 针对该视图完成查询2:找出供应商S1的供应情况。
  • 完整性语言(习题56题):

假设有下面两个关系模式:

  • 职工(职工号,姓名,年龄,职务,工资,部门号),其中职工号为主码;
  • 部门(部门号,名称,经理名,电话),其中部门号为主码。

用SQL语言定义这两个关系模式,要求在模式中完成以下完整性约束条件的定义:

  1. 定义每个模式的主码。
  2. 定义参照完整性。
  3. 定义职工年龄不得超过60岁。
  • 查询(写出与下列关系代数查询等价的SQL表达式,类似习题33题):
  • 使用下述命令(复制,并按照自己题目3中的数据类型做简单修改即可),插入上述EMP和Dept表的基本数据。

插入Dept表数据的命令:insert into Dept values('1001','教研部','张三','1234567891'),('1002','学工部','李四','1234567892'),('1003','销售部','王五','1234567893'),('1004','财务部','赵六','1234567894');

插入EMP表数据的命令:insert into EMP values('2023001','孙悟空',20,'经理','50000.00','1003'),('2023002','唐僧',40,'经理','40000.00','1004'),('2023003','猪八戒',22,'销售员','25000.00','1003'),('2023004','沙僧',23,'文员','10000.00','1002');

  • (选择)\sigma_{Eage<25}(EMP)
  • (投影)\pi _{Ename,Eage}(EMP)
  • (等值连接)EMP \underset{EMP.Dno=DEPT.Dno}{\bowtie }DEPT
  • (自然连接)EMP \bowtie DEPT
  • (自然连接和选择)\sigma _{Ename='sunwukong'}(EMP \bowtie DEPT)

实验指导:

  • 视图(习题39题):
  • 请为三建工程项目建立一个供应情况的视图,包括供应商代码(Sno)、零件代码(Pno)、供应数量(QTY)。

  • 针对该视图完成查询1:找出三建工程项目使用的各种零件代码及其数量。

  • 针对该视图完成查询2:找出供应商S1的供应情况。

  • 完整性语言(习题56题):

假设有下面两个关系模式:

  • 职工(职工号,姓名,年龄,职务,工资,部门号),其中职工号为主码;
  • 部门(部门号,名称,经理名,电话),其中部门号为主码。

用SQL语言定义这两个关系模式,要求在模式中完成以下完整性约束条件的定义:

  1. 定义每个模式的主码。
  2. 定义参照完整性。
  3. 定义职工年龄不得超过60岁。

(先定义部门表,再定义职工表。因为在职工表中,有“部门号”这个属性,此属性为外码,参照了部门表的主码字段,所以被参照表要先定义。)

  • 查询(写出与下列关系代数查询等价的SQL表达式,类似习题33题):
  • 使用下述命令(复制,并按照自己题目3中的数据类型做简单修改即可),插入上述EMP和Dept表的基本数据。

插入Dept表数据的命令:insert into Dept values('1001','教研部','张三','1234567891'),('1002','学工部','李四','1234567892'),('1003','销售部','王五','1234567893'),('1004','财务部','赵六','1234567894');

插入EMP表数据的命令:insert into EMP values('2023001','孙悟空',20,'经理','50000.00','1003'),('2023002','唐僧',40,'经理','40000.00','1004'),('2023003','猪八戒',22,'销售员','25000.00','1003'),('2023004','沙僧',23,'文员','10000.00','1002');

  • (选择)\sigma_{Eage<25}(EMP)

上述关系代数所表达的查询意思为:查询年龄小于二十五岁的职工信息。

在职工表中,从行的角度,选择年龄小于二十五岁的记录,这些行放到结果集中。

  • (投影)\pi _{Ename,Eage}(EMP)

上述关系代数所表达的查询意思为:查询所有职工的职工姓名和年龄信息。

在职工表中,从列的角度,将职工的姓名和年龄投影出来,该两列放到结果集中。

  • (等值连接)EMP \underset{EMP.Dno=DEPT.Dno}{\bowtie }DEPT

上述关系代数所表达的查询意思为:查询所有职工的职工号、姓名、年龄、职务、工资、部门号、以及所属部门名称、所属部门经历名、电话信息。

在职工表和部门表中,将职工表和部门表通过相同的部门号字段做连接,此处为等值连接,当职工表中某行的职工号字段与部门表中某行的职工号字段相同的时候,连接起来(列数相加),放入结果集。(等值连接:保留相同的字段,所以SQL查询语句中有两个Dno,一个为职工表Eno,一个为部门表Dno)

  • (自然连接)EMP \bowtie DEPT

上述关系代数所表达的查询意思为:查询所有职工的职工号、姓名、年龄、职务、工资、部门号、以及所属部门名称、所属部门经历名、电话信息。

在职工表和部门表中,将职工表和部门表通过相同的部门号字段做连接,此处为自然连接,当职工表中某行的职工号字段与部门表中某行的职工号字段相同的时候,连接起来(列数相加,去掉重复的列),放入结果集。(自然连接:去掉相同的字段,所以SQL查询语句中只保留一个Dno,可以为职工表Eno,也可以为部门表Dno)

  • (自然连接和选择)\sigma _{Ename='sunwukong'}(EMP \bowtie DEPT)

上述关系代数所表达的查询意思为:查询名为孙悟空的职工的职工号、姓名、年龄、职务、工资、部门号、以及所属部门名称、所属部门经历名、电话信息。

在职工表和部门表中,将职工表和部门表通过相同的部门号字段做连接,此处为自然连接,当职工表中某行的职工号字段与部门表中某行的职工号字段相同的时候,连接起来(列数相加,去掉重复的列),再做选择,选择职工名称为孙悟空的记录,放入结果集。

实验12代码:

  1. create database EMP_DEPT;
  2. use EMP_DEPT;
  3. create table Dept(Dno char(10) primary key,Dname char(10),Mname char(10),Tel char(20));
  4. create table EMP(Eno char(10) primary key,Ename char(10),Eage smallint,Job char(10),Sal numeric(7,2),Dno char(10),constraint C1 check(Eage<=60),constraint C2 foreign key (Dno) references Dept(Dno));
  5. show create table Dept;
  6. show create table EMP;
  7. insert into Dept values('1001','教研部','张三','1234567891'),('1002','学工部','李四','1234567892'),('1003','销售部','王五','1234567893'),('1004','财务部','赵六','1234567894');
  8. insert into EMP values('2023001','孙悟空',20,'经理','50000.00','1003'),('2023002','唐僧',40,'经理','40000.00','1004'),('2023003','猪八戒',22,'销售员','25000.00','1003'),('2023004','沙僧',23,'文员','10000.00','1002');
  9. select * from EMP where Eage<25;
  10. select Ename,Eage from EMP;
  11. select Eno,Ename,Eage,Job,Sal,EMP.Dno,Dept.Dno,Dname,Mname,Tel from EMP,Dept where EMP.Dno=Dept.Dno;
  12. select Eno,Ename,Eage,Job,Sal,EMP.Dno,Dname,Mname,Tel from EMP,Dept where EMP.Dno=Dept.Dno;
  13. select Eno,Ename,Eage,Job,Sal,EMP.Dno,Dname,Mname,Tel from EMP,Dept where EMP.Dno=Dept.Dno and Ename='孙悟空';

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/873034
推荐阅读
相关标签
  

闽ICP备14008679号