实验二 数据定义
一、实验目的
1、掌握数据库引擎的使用方法,加深对SQL的语句的理解; 2、使用SQL语句创建数据库、删除数据库
3、熟练掌握DDL语言的数据定义操作,包括CREATE、ALTER、DROP。
二、实验内容
在SQL查询分析器中用CREATE、DROP、ALTER语句创建、删除、修改基本表。
三、实验步骤
1、根据课本中的说明,分析S表,P表,J表和SPJ表的主码和外码:
(1) S表,P表,J表的主码分别是哪个属性,S表,P表,J表这三个表有没有外码?如果有,请写出。
S表的主码 SNO P表的主码PNO J表的主码JNO 没有外码
(2) SPJ表的主码是由哪几个属性组成的属性组?SPJ表的外码有几个,分别是哪些属性?分别参照哪些表的哪个属性?
SPJ主码(SNO,PNO,JNO)
外码SNO参照S表的SNO,外码PNO参照P表的PNO,外码JNO参照J表的JNO。
2. 新建数据库SPJ,并在数据库SPJ中创建S表,P表,J表和SPJ表。 (1)创建供应商表S的sql语句,要求设置主码: CREATE TABLE S (
SNO CHAR(4) PRIMARY KEY, SNAME VARCHAR(40), STATUS SMALLINT, CITY VARCHAR(20) );
(2)创建零件表P的sql语句,要求设置主码并将该约束命名为P_PK:
CREATE TABLE P(
PNO CHAR(4) CONSTRAINT P_PK PRIMARY KEY, PNAME VARCHAR(40), COLOR CHAR(2), WEIGHT SMALLINT );
(3)创建工程项目表J的sql语句,要求设置主码并命名为J_PK: CREATE TABLE J (
JNO CHAR(4) CONSTRAINT J_PK PRIMARY KEY, JNAME VARCHAR(40), CITY VARCHAR(20) );
(4)创建基本表供应情况表SPJ的sql语句,要求设置主码和外码: CREATE TABLE SPJ (
SNO CHAR(4) REFERENCES S(SNO), PNO CHAR(4) REFERENCES P(PNO), JNO CHAR(4) REFERENCES J(JNO), QTY SMALLINT,
PRIMARY KEY(SNO,PNO,JNO) );
3. 在窗口下键入DROP TABLE S命令,运行后观察结果。 (1)运行结果是什么? 不能执行
(2)为什么会出现这种结果?
破坏参照完整性。
4. 打开S表,并往S表中输入第一行数据。 (1)如何保存输入的数据?
(2)输入第二行数据时如果不输入属性SNO的值,将出现什么情况?为什么?
不能执行
违背实体完整性。
5. 在S表中增加一个新的字段“TEL”,数据类型为char(11) (1)sql语句:
ALTER TABLE S ADD TEL CHAR(11)
(2)观察属性TEL的值,值为 NULL 。
6. 修改S表中属性SNAME的数据类型改为varchar(20),其sql语句是
ALTER TABLE S ALTER COLUMN SNAME VARCHAR(20);
7. 删除S表中的属性TEL的SQL语句:
ALTER TABLE S DROP COLUMN TEL;
8. 为P表添加约束C1:零件重量必须在0到100之间,其SQL语句:
ALTER TABLE P ADD CHECK(WEIGHT BETWEEN 0 AND 100); 9. 验证完整性约束:
(1)在S表中输入第一条记录,若再往S表中输入一条“S1,盛锡”的记录,能不能输入,为什么?
不能,主键取值唯一。
(2)往P表、J表和SPJ表中分别输入第一条记录,若往SPJ表中输入第二条记录,能不能实现?为什么? 不能,违背参照完整性。
(3)此时若要删除S表中的第一条记录能不能删除?为什么?
不能,违背参照完整性。
(4)往P表中输入一条记录“P7,齿轮,蓝,150”,能不能实现?为什么? 不能,违背CHECK约束。
四、实验小结(实验过程中遇到什么问题?如何解决?)
实验三 单表查询
一、实验目的
1、掌握数据库引擎的使用方法,加深对SQL的语句的理解; 2、使用SELECT语句进行单个表格数据查询; 3、熟练掌握简单表的数据查询、数据排序的操作方法。 二、实验内容
1、使用SELECT语句完成简单查询操作。
2、该实验包括投影、选择条件表达,数据排序,查询结果分组等。 三、实验步骤
1、查询所有供应商的姓名和所在城市。
Sql语句:
SELECT SNAME, CITY FROM S; 2、查询所有零件的名称颜色和重量。
Sql语句:
SELECT COLOR,WEIGHT FROM P; 3、查询S1供应商所供应零件的工程号码。
Sql语句:
SELECT JNO FROM SPJ WHERE SNO=’S1’; 4、查询名称带有“厂”字的工程项目的详细信息。
Sql语句:
SELECT * FROM J WHERE JNAME LIKE ‘%厂%’; 5、查询供应了零件的供应商号。
Sql语句:
SELECT DISTINCT SNO FROM SPJ; 6、查询重量在10到20之间的红色零件。
Sql语句:
SELECT * FROM P
WHERE WEIGHT BETWEEN 10 AND 20 AND COLOR=’红’; 7、查询所有零件的名称,并按重量降序排列
Sql语句:
SELECT PNAME FROM P ORDER BY WEIGHT; 8、查询地址在长春、北京或天津的工程项目的详细信息。
Sql语句:
SELECT * FROM J WHERE CITY IN (‘长春’,’北京’,’天津’); 9.查询零件表中零件的平均重量。
Sql语句:
SELECT AVG(WEIGHT) FROM P; 10. 统计每个供应商各供应了多少个零件。
Sql语句:
SELECT SNO,SUM(QTY) NUM FROM SPJ GROUP BY SNO; 11. 查询至少使用了三种或以上零件的工程项目有哪些。
Sql语句:
SELECT JNO FROM SPJ
GROUP BY JNO HAVING COUNT(DISTINCT PNO)>=3; 12. 查询至少提供了200个P1零件的供应商号。
Sql语句:
SELECT SNO FROM SPJ WHERE PNO=’P1’ GROUP BY SNO HAVING SUM(QTY)>=200;