一、实验目标:
根据课本p71提供的表格,实现p130第五大题的问题,理解和掌握关系数据库标准SQL语言,能够熟练使用SQL语言完成各种数据库操作和管理任务。包括使用SQL DDL语句创建、更改和删除数据库、模式和基本表;使用SQL查询语句完成各类查询操作。
二、实验要求:
用mysql command line client完成书本习题。
三、实验步骤:
1、制表
(1)P表:
CREATE TABLE IF NOT EXISTS `P`(
`P_id` INT UNSIGNED AUTO_INCREMENT,
`Pno` VARCHAR(100) NOT NULL,
`Pname` VARCHAR(100) NOT NULL,
`Pcolor` VARCHAR(100) NOT NULL,
`Pweight` VARCHAR(100) NOT NULL,
PRIMARY KEY ( `P_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO P
(Pno, Pname, Pcolor,Pweight)
VALUES
("P1", "螺母", "红" , "12");
INSERT INTO P
(Pno, Pname, Pcolor,Pweight)
VALUES
("P2", "螺栓", "绿" , "17");
INSERT INTO P
(Pno, Pname, Pcolor,Pweight)
VALUES
("P3", "螺丝刀", "蓝" , "14");
INSERT INTO P
(Pno, Pname, Pcolor,Pweight)
VALUES
("P4", "螺丝刀", "红" , "14");
INSERT INTO P
(Pno, Pname, Pcolor,Pweight)
VALUES
("P5", "凸轮", "蓝" , "40");
INSERT INTO P
(Pno, Pname, Pcolor,Pweight)
VALUES
("P6", "齿轮", "红" , "30");
(2)S表:
CREATE TABLE IF NOT EXISTS `S`(
`S_id` INT UNSIGNED AUTO_INCREMENT,
`Sno` VARCHAR(100) NOT NULL,
`Sname` VARCHAR(100) NOT NULL,
`Status` VARCHAR(100) NOT NULL,
`City` VARCHAR(100) NOT NULL,
PRIMARY KEY ( `S_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO S
(Sno, Sname, Status,City)
VALUES
("S1", "精益", "20" , "天津");
INSERT INTO S
(Sno, Sname, Status,City)
VALUES
("S2", "盛锡", "10" , "北京");
INSERT INTO S
(Sno, Sname, Status,City)
VALUES
("S3", "东方红", "30" , "北京");
INSERT INTO S
(Sno, Sname, Status,City)
VALUES
("S4", "丰泰盛", "20" , "天津");
INSERT INTO S
(Sno, Sname, Status,City)
VALUES
("S5", "为民", "30" , "上海");
(3)J表
CREATE TABLE IF NOT EXISTS `J`(
`J_id` INT UNSIGNED AUTO_INCREMENT,
`Jno` VARCHAR(100) NOT NULL,
`Jname` VARCHAR(100) NOT NULL,
`City` VARCHAR(100) NOT NULL,
PRIMARY KEY ( `J_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO J
(Jno, Jname, City)
VALUES
("J1", "三建", "北京" );
INSERT INTO J
(Jno, Jname, City)
VALUES
("J2", "一汽", "长春" );
INSERT INTO J
(Jno, Jname, City)
VALUES
("J3", "弹簧厂", "天津" );
INSERT INTO J
(Jno, Jname, City)
VALUES
("J4", "造船厂", "天津" );
INSERT INTO J
(Jno, Jname, City)
VALUES
("J5", "机车厂", "唐山" );
INSERT INTO J
(Jno, Jname, City)
VALUES
("J6", "无线电厂", "常州" );
INSERT INTO J
(Jno, Jname, City)
VALUES
("J7", "半导体厂", "南京" );
(4)SPJ表
CREATE TABLE IF NOT EXISTS `SPJ`(
`SPJ_id` INT UNSIGNED AUTO_INCREMENT,
`Sno` VARCHAR(100) NOT NULL,
`Pno` VARCHAR(100) NOT NULL,
`Jno` VARCHAR(100) NOT NULL,
`Qty` VARCHAR(100) NOT NULL,
PRIMARY KEY ( `SPJ_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO SPJ
(Sno, Pno, Jno,Qty)
VALUES
("S1", "P1", "J1","200" );
INSERT INTO SPJ
(Sno, Pno, Jno,Qty)
VALUES
("S1", "P1", "J3","100" );
INSERT INTO SPJ
(Sno, Pno, Jno,Qty)
VALUES
("S1", "P1", "J4","700" );
INSERT INTO SPJ
(Sno, Pno, Jno,Qty)
VALUES
("S1", "P2", "J2","100" );
INSERT INTO SPJ
(Sno, Pno, Jno,Qty)
VALUES
("S2", "P3", "J1","400" );
INSERT INTO SPJ
(Sno, Pno, Jno,Qty)
VALUES
("S2", "P3", "J2","200" );
INSERT INTO SPJ
(Sno, Pno, Jno,Qty)
VALUES
("S2", "P3", "J4","500" );
INSERT INTO SPJ
(Sno, Pno, Jno,Qty)
VALUES
("S2", "P3", "J5","400" );
INSERT INTO SPJ
(Sno, Pno, Jno,Qty)
VALUES
("S2", "P5", "J1","400" );
INSERT INTO SPJ
(Sno, Pno, Jno,Qty)
VALUES
("S2", "P5", "J2","100" );
INSERT INTO SPJ
(Sno, Pno, Jno,Qty)
VALUES
("S3", "P1", "J1","200" );
INSERT INTO SPJ
(Sno, Pno, Jno,Qty)
VALUES
("S3", "P3", "J1","200" );
INSERT INTO SPJ
(Sno, Pno, Jno,Qty)
VALUES
("S4", "P5", "J1","100" );
INSERT INTO SPJ
(Sno, Pno, Jno,Qty)
VALUES
("S4", "P6", "J3","300" );
INSERT INTO SPJ
(Sno, Pno, Jno,Qty)
VALUES
("S4", "P6", "J4","200" );
INSERT INTO SPJ
(Sno, Pno, Jno,Qty)
VALUES
("S5", "P2", "J4","100" );
INSERT INTO SPJ
(Sno, Pno, Jno,Qty)
VALUES
("S5", "P3", "J1","200" );
INSERT INTO SPJ
(Sno, Pno, Jno,Qty)
VALUES
("S5", "P6", "J2","200" );
INSERT INTO SPJ
(Sno, Pno, Jno,Qty)
VALUES
("S5", "P6", "J4","500" );
二、用sql语言实现习题
1. 找出所有供应商的姓名和所在城市。
SELECT Sname,City FROM S;
2. 找出所有供应商的姓名和所在城市。
SELECT Pname ,Pcolor,Pweight FROM P;
3. 找出使用供应商S1所供应零件的工程号码。
SELECT Jno FROM SPJ WHERE Sno='S1';
4. 找出使用供应商S1所供应零件的工程号码。
SELECT Pname ,Qty FROM SPJ,P WHERE P.Pno=SPJ.Pno AND SPJ.Jno='J2';
5. 找出上海厂商供应的所有零件号码。
SELECT Pno FROM SPJ,S WHERE S.Sno=SPJ.Sno AND City='上海';
6. 出使用上海产的零件的工程名称。
SELECT Jname FROM SPJ,S,J WHERE S.Sno=SPJ.Sno AND S.City='上海' AND J.Jno=SPJ.Jno;
7. 找出没有使用天津产的零件的工程号码。
SELECT DISP Jno FROM SPJ WHERE Jno NOT IN(SELECT DIST Jno FROM SPJ ,S WHERE S.Sno=SPJ.Sno AND S.City='天津';)适用于Jno是唯一或不是唯一的情况;
SELSECT DIST Jno FROM SPJ ,S WHERE S.Sno=SPJ.Sno AND S.City='天津'; 适用于Jno是唯一情况。
8.把全部红色零件的颜色改成蓝色。
UPDATE P SET Pcolor='蓝' WHERE Pcolor ='红';
9. 由S5供给J4的零件P6改为由S3供应。
UPDATE SPJ SET Sno='S3' WHERE Sno ='S5' AND Jno ='J4' AND Pno='P6';
10. 从供应商关系中删除供应商号是S2的记录,并从供应情况关系中删除相应的记录。
DELETE FROM S WHERE Sno='S2';
或 DELETE FROM SPJ WHERE Sno='S2';
11. 请将(S2,J6,P4,200)插入供应情况关系。
INSERT INTO SPJ VALUES ('S2','J6','P4','200');
三、实验总结:
根据这一系列的学习,并通过习题训练,使我理解和掌握关系数据库标准SQL语言,能够熟练使用SQL语言完成各种数据库操作和管理任务。包括使用SQL DDL语句创建、更改和删除数据库、模式和基本表;使用SQL查询语句完成各类查询操作。