《数据库系统概论》课程之实验二:交互式SQL

个人博客地址

《数据库系统概论》课程之实验二:交互式SQL

实验目的

1.熟悉数据库的交互式SQL工具。

2.熟悉通过SQL对数据库进行操作。

3.完成作业的上机练习。

实验工具 MySQL

利用MySQL及其图形化界面工具Navicat来熟悉SQL。

实验流程

1. 建立数据库

在MySQL中建立一个数据库,进行实验所要求的各种操作,所有的SQL操作均在此建立的新库里进行。

image-20220416175415036

第4题

用SQL语句建立第2章习题6中的4个表;针对建立的4个表用SQL语言完成第2章习题6中的查询。

建表并添加数据

运行以下SQL语句:

# 建立供应商表S
CREATE TABLE S 
(
	SNO VARCHAR(5) PRIMARY KEY,
	SNAME VARCHAR(10),
	STATUS VARCHAR(5),
	CITY VARCHAR(10)
);

# 向表S插入数据
INSERT INTO S VALUES('S1','精益','20','天津');
INSERT INTO S VALUES('S2','盛锡','10','北京');
INSERT INTO S VALUES('S3','东方红','30','北京');
INSERT INTO S VALUES('S4','丰泰盛','20','天津');
INSERT INTO S VALUES('S5','为民','30','上海');

# 建立零件表P
CREATE TABLE P
(
	PNO VARCHAR(5) PRIMARY KEY,
	PNAME VARCHAR(10),
	COLOR VARCHAR(5),
	WEIGHT INT
);

# 向表P插入数据
INSERT INTO P VALUES('P1','螺母','红',12);
INSERT INTO P VALUES('P2','螺栓','绿',17);
INSERT INTO P VALUES('P3','螺丝刀','蓝',14);
INSERT INTO P VALUES('P4','螺丝刀','红',14);
INSERT INTO P VALUES('P5','凸轮','蓝',40);
INSERT INTO P VALUES('P6','齿轮','红',30);

# 建立工程项目表J
CREATE TABLE J
(
	JNO VARCHAR(5) PRIMARY KEY,
	JNAME VARCHAR(10),
	CITY VARCHAR(10)
);

# 向表J插入数据
INSERT INTO J VALUES('J1','三建','北京');
INSERT INTO J VALUES('J2','一汽','长春');
INSERT INTO J VALUES('J3','弹簧刀','天津');
INSERT INTO J VALUES('J4','造船厂','天津');
INSERT INTO J VALUES('J5','机车厂','唐山');
INSERT INTO J VALUES('J6','无限电厂','常州');
INSERT INTO J VALUES('J7','半导体厂','南京');

# 建立供应情况表SPJ
CREATE TABLE SPJ
(
	SNO CHAR(5),
	PNO CHAR(5),
	JNO CHAR(5),
	QTY INT,
	PRIMARY KEY(SNO,PNO,JNO),
	FOREIGN KEY(SNO) REFERENCES S(SNO),
	FOREIGN KEY(PNO) REFERENCES P(PNO),
	FOREIGN KEY(JNO) REFERENCES J(JNO)
);

# 向表SPJ插入数据
INSERT INTO SPJ VALUES('S1','P1','J1',200);
INSERT INTO SPJ VALUES('S1','P1','J3',100);
INSERT INTO SPJ VALUES('S1','P1','J4',700);
INSERT INTO SPJ VALUES('S1','P2','J2',100);
INSERT INTO SPJ VALUES('S2','P3','J1',400);
INSERT INTO SPJ VALUES('S2','P3','J2',200);
INSERT INTO SPJ VALUES('S2','P3','J4',500);
INSERT INTO SPJ VALUES('S2','P3','J5',400);
INSERT INTO SPJ VALUES('S2','P5','J1',400);
INSERT INTO SPJ VALUES('S2','P5','J2',100);
INSERT INTO SPJ VALUES('S3','P1','J1',200);
INSERT INTO SPJ VALUES('S3','P3','J1',200);
INSERT INTO SPJ VALUES('S4','P5','J1',100);
INSERT INTO SPJ VALUES('S4','P6','J3',300);
INSERT INTO SPJ VALUES('S4','P6','J4',200);
INSERT INTO SPJ VALUES('S5','P2','J4',100);
INSERT INTO SPJ VALUES('S5','P3','J1',200);
INSERT INTO SPJ VALUES('S5','P6','J2',200);
INSERT INTO SPJ VALUES('S5','P6','J4',500);

结果

  • 供应商表S:

    image-20220324233303964

  • 零件表P:

    image-20220324233550612

  • 工程项目表J:

    image-20220324233528109

  • 供应情况表SPJ:

    image-20220324233643934

查询
  1. 求供应工程J1零件的供应商号码SNO:

    • SQL:

      SELECT DISTINCT SNO FROM SPJ WHERE JNO='J1';
      
    • 结果:

      image-20220325102815380

  2. 求供应工程J1零件P1的供应商号码SNO:

    • SQL:

      SELECT DISTINCT SNO FROM SPJ WHERE JNO='J1' AND PNO='P1';
      
    • 结果:

      image-20220325102913718

  3. 求供应工程J1零件为红色的供应商号码SNO:

    • SQL:

      SELECT DISTINCT SNO FROM SPJ WHERE JNO='J1' AND PNO IN 
      (SELECT DISTINCT PNO FROM P WHERE COLOR='红');
      
    • 结果:

      image-20220325103030728

  4. 求没有使用天津供应商生产的红色零件的工程号JNO:

    • SQL:

      SELECT DISTINCT JNO FROM J WHERE JNO NOT IN 
      (SELECT JNO FROM SPJ,P,S WHERE
      	S.CITY='天津' AND
      	P.COLOR='红' AND
      	S.SNO=SPJ.SNO AND
      	P.PNO=SPJ.PNO);
      
    • 结果:

      image-20220325103213694

  5. 求至少用了供应商S1所供应的全部零件的工程号JNO:

    • SQL:

      SELECT DISTINCT JNO
      FROM SPJ SPJX
      WHERE NOT EXISTS -- 不存在情况:
      	(SELECT *
      	 FROM SPJ SPJY
      	 WHERE SNO='S1'  
      	 AND NOT EXISTS -- S1提供的零件没有被该工程使用 
      		(SELECT *									
      		 FROM SPJ SPJZ
      		 WHERE SPJZ.PNO=SPJY.PNO    -- 确定S1的零件名
               	AND SNO='S1'			-- 确定零件是S1提供的
      			AND SPJZ.JNO=SPJX.JNO)); -- 确定工程
      
    • 结果:

      image-20220325111114717

第5题

针对习题4中的4个表试用SQL语言完成以下各项操作:

  1. 找出所有供应商的姓名和所在城市:

    • SQL:

      SELECT DISTINCT SNAME,CITY FROM S;
      
    • 结果:

      image-20220325120743410

  2. 找出所有零件的名称、颜色、重量;

    • SQL:

      SELECT DISTINCT PNAME,COLOR,WEIGHT FROM P;
      
    • 结果:

      image-20220325121417842

  3. 找出使用供应商S1所供应零件的工程号码:

    • SQL:

      SELECT DISTINCT JNO FROM SPJ WHERE SNO='S1';
      
    • 结果:

      image-20220325121452594

  4. 找出工程项目J2使用的各种零件的名称及其数量:

    • SQL:

      SELECT DISTINCT PNAME,QTY FROM P,SPJ WHERE 
      SPJ.JNO='J2' AND P.PNO=SPJ.PNO;
      
    • 结果:

      image-20220325121520442

  5. 找出上海厂商供应的所有零件号码:

    • SQL:

      SELECT DISTINCT PNO FROM S,SPJ WHERE
      S.CITY='上海' AND S.SNO=SPJ.SNO;
      
    • 结果:

      image-20220325121546585

  6. 找出使用上海产的零件的工程名称:

    • SQL:

      SELECT DISTINCT JNO FROM S,SPJ WHERE
      S.CITY='上海' AND S.SNO=SPJ.SNO;
      
    • 结果:

      image-20220325121633952

  7. 找出没有使用天津产的零件的工程号码:

    • SQL:

      SELECT JNO FROM J WHERE JNO NOT IN
      (SELECT JNO FROM S,SPJ WHERE
      	S.CITY='天津' AND S.SNO=SPJ.SNO);
      
    • 结果:

      image-20220325121707581

  8. 把全部红色零件的颜色改成蓝色:

    • SQL:

      UPDATE P SET COLOR='蓝' WHERE COLOR='红';
      SELECT * FROM P; -- 用于显示结果
      
    • 结果:

      image-20220325121828186

  9. 由S5供给J4的零件P6改为由S3供应,请作必要的修改:

    • SQL:

      UPDATE SPJ SET SNO='S3' WHERE SNO='S5' AND JNO='J4' AND PNO='P6';
      SELECT * FROM SPJ; -- 用于显示结果
      
    • 结果:

      image-20220325121855651

  10. 从供应商关系中删除S2的记录,并从供应情况关系中删除相应的记录:

    因为表SPJ的外键SNO是表S的主键,故要先从表SPJ中删除S2的记录,在从表S中删除S2的记录

    • SQL:

      DELETE FROM SPJ WHERE SNO='S2';
      DELETE FROM S WHERE SNO='S2';
      
    • 结果:

      • 表SPJ:

        image-20220325122904368

      • 表S:

        image-20220325122921502

  11. 请将(S2,J6,P4,200)插入供应情况关系:

    因为表SPJ的外键SNO是表S的主键,故在表SPJ插入关于S2的记录前,要先在表S中还原S2的信息

    • SQL:

      INSERT INTO S VALUES('S2','盛锡','10','北京');
      INSERT INTO SPJ VALUES('S2','P6','J6',200);
      
    • 结果:

      • 表S:

        image-20220325123114711

      • 表SPJ:

        image-20220325123213720

第9题

请为三建工程项目建立一个供应情况的视图,包括供应商代码(SNO)、零件代码(PNO)、供应数量(QTY):

  • SQL:

    CREATE VIEW SANJIAN AS
    SELECT SNO,PNO,QTY FROM SPJ,J
    WHERE SPJ.JNO=J.JNO AND J.JNAME='三建'
    
  • 在“视图”中查看结果:

    image-20220325164742884

针对该试图完成下列查询:

  1. 找出三建工程项目使用的各种零件代码及其数量:

    • SQL:

      SELECT DISTINCT PNO,QTY FROM SANJIAN;
      
    • 结果:

      image-20220325164915171

  2. 找出供应商S1的供应情况。

    • SQL:

      SELECT * FROM SANJIAN WHERE SNO='S1';
      
    • 结果:

      image-20220325165039739

实验心得

通过这次实验,我学会通过SQL语句对基本表、索引和视图进行创建、修改及删除,并完成各类的查询数据、更新数据操作。在整个实验过程中,主要有三个注意点:

  • 一是INNOT IN前需要指定字段,否则会产生SQL语法错误,例子如下:

image-20220325120605243

  • 二是使用INSERT语句插入、UPDATE语句更新数据时注意字段在表中顺序。

  • 三是要注意数据库完整性,包括:

    • 实体完整性,要求每个关系(表)有且仅有一个主键,每一个主键值必须唯一,而且不允许为“空”(NULL)或重复。
    • 域完整性,指数据库表中的列必须满足某种特定的数据类型或约束。
    • 参照完整性,属于表间规则。对于永久关系的相关表,在更新、插入或删除记录时,如果只改其一,就会影响数据的完整性。故删除一个表的主键时,若它是另一个表的外键,要先把在另一个表中把这个外键删除。
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
An Introduction to Database Sy 大连大学信息工程学院 数据库系统概论 An Introduction to Database System 第三章 关系数据库标准语言 SQ L An Introduction to Database Sy 第三章 关系数据库标准语言 SQL 3.1 SQL 概述 3.2 学生 - 课程数据库 3.3 数据定义 3.4 数据查询 3.5 数据更新 3.6 视图 3.7 小结 An Introduction to Database Sy 3.1 SQL 概述 SQL ( Structured Query Language ) 结构化查询语言,是关系数据库的标准语言 SQL 是一个通用的、功能极强的关系数据库语言 An Introduction to Database Sy SQL 概述(续) 3.1.1 SQL 的产生与发展 3.1.2 SQL 的特点 3.1.3 SQL 的基本概念 An Introduction to Database Sy SQL 标准的进展过程 标准 大致页数 发布日期 SQL/86 1986.10 SQL/89(FIPS 127-1) 120 页 1989 年 SQL/92 622 页 1992 年 SQL99 1700 页 1999 年 SQL2003 2003 年 An Introduction to Database Sy 3.1 SQL 概述 3.1.1 SQL 的产生与发展 3.1.2 SQL 的特点 3.1.3 SQL 的基本概念 An Introduction to Database Sy 3.1.2 SQL 的特点 1. 综合统一 集数据定义语言( DDL ),数据操纵语言 ( DML ),数据控制语言( DCL )功能于一体。 可以独立完成数据库生命周期的全部活动: 定义关系模式,插入数据,建立数据库; 对数据库的数据进行查询和更新; 数据库重构和维护 数据库安全性、完整性控制等 用户数据库投入运行后,可根据需要随时逐步修改 模式,不影响数据的运行。 数据操作符统一 An Introduction to Database Sy 2. 高度非过程化 非关系数据模型的数据操纵语言"面向过程", 必须制定存取路径 SQL 只要提出"做什么",无须了解存取路径。 存取路径的选择以及 SQL操作过程由系统自 动完成。 An Introduction to Database Sy 3. 面向集合的操作方式 非关系数据模型采用面向记录的操作方式,操作对 象是一条记录 SQL 采用集合操作方式 操作对象、查找结果可以是元组的集合 一次插入、删除、更新操作的对象可以是元组的集合 An Introduction to Database Sy 4. 以同一种语法结构提供多种使用方式 SQL 是独立的语言 能够独立地用于联机交互的使用方式 SQL 又是嵌入式语言 SQL 能够嵌入到高级语言(例如 C , C+ + , Java )程序,供程序员设计程序时使用 An Introduction to Database Sy 5. 语言简洁,易学易用 SQL 功能极强,完成核心功能只用了 9 个动词。 表 3.1 SQL 语言的动词 SQL 功 能 动 词 数 据 查 询 SELECT 数 据 定 义 CREATE, DROP, ALTER 数 据 操 纵 INSERT,UPDATE DELETE 数 据 控 制 GRANT,REVOKE An Introduction to Database Sy 3.1 SQL 概述 3.1.1 SQL 的产生与发展 3.1.2 SQL 的特点 3.1.3 SQL 的基本概念 An Introduction to Database Sy SQL 的基本概念(续) SQL 视图 2 视图 1 基本表 2 基本表 1 基本表 3 基本表 4 存储文件 2 存储文件 1 外模式 模 式 内模式 SQL 支持关系数据库三级模式结构 An Introduction to Database Sy SQL 的基本概念(续) 基本表 本身独立存在的表 SQL 一个关系就对应一个基本表 一个 ( 或多个 ) 基本表对应一个存储文件 一个表可以带若干索引 存储文件 逻辑结构组成了关系数据库的内模式 物理结构是任意的,对用户透明 视图 从一个或几个基本表导出的表 数据库只存放视图的定义而不存放视图对应的数据 视图是一个虚表 用户可以在视图上再定义视图 An Introduction to Database Sy 第三章 关系数据库标准语言 SQL 3.1 SQL 概述 3.2 学生 - 课程数据库 3.3 数据定义 3.4
数据库系统概论(第四版)答案 第2章 关系数据库 1 .试述关系模型的三个组成部分。 答:关系模型由关系数据结构、关系操作集合和关系完整性约束三部分组成。 2 .试述关系数据语言的特点和分类。 答:关系数据语言可以分为三类: 关系代数语言。 关系演算语言:元组关系演算语言和域关系演算语言。 SQL:具有关系代数和关系演算双重特点的语言。 这些关系数据语言的共同特点是,语言具有完备的表达能力,是非过程化的集合操作语言,功能强,能够嵌入高级语言使用。 4 .试述关系模型的完整性规则。在参照完整性,为什么外部码属性的值也可以为空?什么情况下才可以为空? 答:实体完整性规则是指若属性A是基本关系R的主属性,则属性A不能取空值。 若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R每个元组在F上的值必须为:或者取空值(F的每个属性值均为空值);或者等于S某个元组的主码值。即属性F本身不是主属性,则可以取空值,否则不能取空值。 5.设有一个SPJ数据库,包括S,P,J,SPJ四个关系模式: 1)求供应工程J1零件的供应商号码SNO: πSno(σSno='J1'(SPJ)) 2)求供应工程J1零件P1的供应商号码SNO: πSno(σSno='J1' Pno='P1'(SPJ)) 3)求供应工程J1零件为红色的供应商号码SNO: πSno(σPno='P1' (σCOLOR='红' (P) SPJ)) 4)求没有使用天津供应商生产的红色零件的工程号JNO: πJno(SPJ)- πJNO(σcity='天津' Color='红' (S SPJ P)) 5)求至少用了供应商S1所供应的全部零件的工程号JNO: πJno,Pno(SPJ)÷ πPno(σSno='S1' (SPJ)) 6.试述等值连接与自然连接的区别和联系。 答:连接运算符是"="的连接运算称为等值连接。它是从关系R与S的广义笛卡尔积选取A,B属性值相等的那些元组 自然连接是一种特殊的等值连接,它要求两个关系进行比较的分量必须是相同的属性组,并且在结果把重复的属性列去掉。 7.关系代数的基本运算有哪些 ? 如何用这些基本运算来表示其他运算? 答:并、差、笛卡尔积、投影和选择5种运算为基本的运算。其他3种运算,即交、连接和除,均可以用这5种基本运算来表达。 第3章 关系数据库标准语言SQL 1 .试述 sQL 语言的特点。 答: (l)综合统一。 sQL 语言集数据定义语言 DDL 、数据操纵语言 DML 、数据控制语言 DCL 的功能于一体。 (2)高度非过程化。用 sQL 语言进行数据操作,只要提出"做什么",而无需指明"怎么做",因此 无需了解存取路径,存取路径的选择以及 sQL 语句的操作过程由系统自动完成。 (3)面向集合的操作方式。 sQL 语言采用集合操作方式,不仅操作对象、查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。 (4)以同一种语法结构提供两种使用方式。 sQL 语言既是自含式语言,又是嵌入式语言。作为自含式语言,它能够独立地用于联机交互的使用方式;作为嵌入式语言,它能够嵌入到高级语言程序,供程序员设计程序时使用。 (5)语言简捷,易学易用。 2 .试述 SQL 的定义功能。 SQL的数据定义功能包括定义表、定义视图和定义索引。 SQL 语言使用 CREATE TABLE 语句建立基本表, ALTER TABLE 语句修改基本表定义, DROP TABLE 语句删除基本表;使用 CREATE INDEX 语句建立索引, DROP INDEX 语句删除索引;使用 CREATE VIEW 语句建立视图, DROP VIEW 语句删除视图。 3 .用 sQL 语句建立第习题 5 的 4 个表。 答: 对于 S 表: S ( SNO , SNAME , STATUS , CITY ) ; 建 S 表: CREATE TABLE S ( Sno C(2) UNIQUE,Sname C(6) ,Status C(2),City C(4)); 对于 P 表: P ( PNO , PNAME , COLOR , WEIGHT ); 建 P 表 : CREATE TABLE P(Pno C(2) UNIQUE,Pname C(6),COLOR C(2), WEIGHT INT); 对于 J 表: J ( JNO , JNAME , CITY) ; 建 J 表: CREATE TABLE J(Jno C(2) UNlQUE,JNAME C(8), CITY C(4)) 对于 sPJ 表: sPJ ( sNo , PNo , JNo , QTY) ; 建 S

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yuhan_2001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值