一、运行环境说明
1、电脑环境:win10
2、数据库软件:SQL Server 2008 R2
二、经典例题原型
题目:设有一个 SPJ 数据库,包括 S、P、J 及 SPJ 4 个关系模式:
S (SNO,SNAME,STATUS,CITY) ;
P (PNO,PNAME,COLOR,WEIGHT) ;
J (JNO,JNAME,CITY) ;
SPJ (SNO,PNO,JINO,QTY) ;
应商表 S 由供应商代码(SNO)、供应商姓名(SNAME)、供应商状态(STATUS)、供应商所在城市(CITY)组成。
零件表P由零件代码(PNO)、零件名(PNAME)、颜色(COLOR)、重量(WEIGHT)组成。
工程项目表J由工程项目代码(JNO)、工程项目名(JNAME)、工程项目所在城市(CITY)组成。
供应情况表SPJ由供应商代码(SNO)、零件代码(PNO)、工程项目代码(JNO)、供应数量(QTY)组成,表示某供应商供应某种零件给某工程项目的数量为QTY。
三、经典例题
1、在已创建的数据库中创建四个表的结构:S、P、J、SPJ。
命令:
CREATE TABLE S
(SNO CHAR(2)PRIMARY KEY,
SNAME CHAR(6),
STATUS SMALLINT,
CITY CHAR(4),
);
CREATE TABLE P
(PNO CHAR(2)PRIMARY KEY,
PNAME CHAR(10),
COLOR CHAR(2),
WEIGHT SMALLINT,
);
CREATE TABLE J
(JNO CHAR(2)PRIMARY KEY,
JNAME CHAR(10),
CITY CHAR(4),
);
CREATE TABLE SPJ
(SNO CHAR(2),
PNO CHAR(2),
JNO CHAR(2),
QTY SMALLINT,
PRIMARY KEY(SN0,PNO,JNO),
FOREIGN KEY(SNO)REFERENCES S(SNO)
FOREIGN KEY(PNO)REFERENCES P(PNO)
FOREING KEY(JNO)REFERENCES
2、用INSERT语句插入四个表中的全部数据。
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表的插入命令:
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表的插入命令:
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表的插入命令:
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);
3、用命令完成下列的数据更新操作。
(1)把全部红色零件的颜色改成白色;
命令:
UPDATE P
SET COLOR='白'
WHERE COLOR='红';
相反的命令:
UPDATE P
SET COLOR='红'
WHERE COLOR='白';
(2)由S5供给J4的零件P6改为由S3供应;
命令:
UPDATE SPJ
SET SNO='S3'
WHERE SNO='S5'AND PNO='P6'AND JNO='J4';
相反的命令:
UPDATE SPJ
SET SNO='S5'
WHERE SNO='S3'AND PNO='P6'AND JNO='J4';
(3)将(S2,J6,P4,200)插入供应关系;
命令:
INSERT SPJ
VALUES('S2','J6','P4',200);
相反的命令:
DELETE
FROM SPJ
WHERE JNO='J6';
(4)从供应商关系中删除S2的记录,并从供应关系中删除相应的记录;(只写命令,不用操作)
命令:
DELETE
FROM S
WHERE SNO='S2';
DELETE
FROM SPJ
WHERE SNO='S2';
(5)查询北京和天津的供应商的信息。
命令:
SELECT SNO,SNAME,STATUS,CITY
FROM S
WHERE CITY ='北京' AND CITY='天津';
(6)查询重量在10~20的零件名称。
命令:
SELECT PNAME
FROM P
WHERE WEIGHT BETWEEN 20 AND 30;
(7)查询名称中有“轮”的零件信息。
命令:
SELECT *
FROM P
WHERE PNAME LIKE '轮%'AND PNAME LIKE '%轮%'AND PNAME LIKE '%轮' ;
(8)查询所有已开工的工程号码。
命令:
SELECT DISTINCT J.JNO-- DISTINCT取消重复输出的行
FROM J,SPJ
WHERE SPJ.JNO=J.JNO;
(9)查询给工程J1供应零件的供应商号码SNO。
命令:
SELECT SNO
FROM SPJ
WHERE JNO='J1';
(10)查询给工程J1供应零件P1的供应商号码SNO。
命令:
SELECT SNO
FROM SPJ
WHERE JNO='J1'AND PNO='P1';
(11)查询所有供应商的名称和所在城市。
命令:
SELECT SNAME,CITY
FROM S
(12)查收所有零件的名称、颜色、重量。
命令:
SELECT PNAME,COLOR,WEIGHT
FROM P
(13)查询使用了供应商S1供应的零件的工程号码。
命令:
SELECT JNO
FROM SPJ
WHERE SNO='S1';
(14)思考题:应按什么顺序删除数据?为什么顺序不当,删除会失败?
应先删除S表,因为S表中的主键是SPJ表中的外键,S表为子表。删除数据不影响其他表,如若先删除SPJ表中的属性列,则受级联关系影响不能成功删除。
未完,待续。不足之处请大家多多批评指正!!!如有借鉴请评论和点赞!!!