You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

183 lines
5.2 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# task1
CREATE DATABASE dg_mysql;
SHOW DATABASES;
USE dg_mysql;
##分别创建s、p、j和spj数据表
CREATE TABLE s(
sno CHAR(2),
sname VARCHAR(10),
STATUS INT,
city VARCHAR(10)
);
CREATE TABLE p(
pno CHAR(2),
pname VARCHAR(10),
color CHAR(1),
weight INT
);
CREATE TABLE j(
jno CHAR(2),
jname VARCHAR(10),
city VARCHAR(10)
);
CREATE TABLE spj(
sno CHAR(2),
pno CHAR(2),
jno CHAR(2),
qty INT
);
##查看s、p、j和spj数据表的详细结构
DESCRIBE s;
DESCRIBE p;
DESCRIBE j;
DESCRIBE spj;
##插入s表数据
INSERT INTO s VALUES
('S1','精益',20,'天津'),
('S2','盛锡',10,'北京'),
('S3','东方红',30,'北京'),
('S4','丰泰盛',20,'天津'),
('S5','为民',30,'上海');
##插入p表数据
INSERT INTO p VALUES
('P1','螺母','红',12),
('P2','螺栓','绿',17),
('P3','螺丝刀','蓝',14),
('P4','螺丝刀','红',14),
('P5','凸轮','蓝',40),
('P6','齿轮','红',30);
##插入j表数据
INSERT INTO j VALUES
('J1','三建','北京'),
('J2','一汽','长春'),
('J3','弹簧厂','天津'),
('J4','造船厂','天津'),
('J5','机车厂','唐山'),
('J6','无线电厂','常州'),
('J7','半导体厂','南京');
##-插入spj表数据
INSERT INTO spj VALUES
('S1','P1','J1',200),
('S1','P1','J3',100),
('S1','P1','J4',700),
('S1','P2','J2',100),
('S2','P3','J1',400),
('S2','P3','J2',200),
('S2','P3','J4',500),
('S2','P3','J5',400),
('S2','P5','J1',400),
('S2','P5','J2',100),
('S3','P1','J1',200),
('S3','P3','J1',200),
('S4','P5','J1',100),
('S4','P6','J3',300),
('S4','P6','J4',200),
('S5','P2','J4',100),
('S5','P3','J1',200),
('S5','P6','J2',200),
('S5','P6','J4',500);
##分别查询s、p、j和spj表的所有数据
SELECT* FROM s;
SELECT* FROM p;
SELECT* FROM j;
SELECT* FROM spj;
##1. 查询所有供应商的姓名和所在城市(按供应商姓名升序排列)。
SELECT sname,city FROM s ORDER BY sname ASC;
##2. 查询所有零件的名称、颜色、重量(按零件名称升序排列)。
SELECT pname,color,weight FROM p ORDER BY pname ASC;
##1. 查询供应工程J1零件的供应商号码(去除重复,按供应商号码升序排列)。
SELECT DISTINCT sno FROM j NATURAL JOIN spj WHERE jno='J1' ORDER BY sno ASC;
SELECT DISTINCT sno FROM spj WHERE jno='J1' ORDER BY sno ASC;
##2. 查询供应工程J1零件P1的供应商号码按供应商号码升序排列
SELECT sno FROM spj WHERE jno='J1'AND pno='P1' ORDER BY sno ASC;
##3. 查询使用供应商S1所供应零件的工程号码按工程号码升序排列
SELECT jno FROM spj WHERE sno='S1' ORDER BY jno ASC;
##1. 查询工程项目J2使用的各种零件的名称及其数量按零件名称升序排列
SELECT pname,qty FROM spj NATURAL JOIN p WHERE jno='J2' ORDER BY pname ASC;
##2. 查询上海厂商供应的所有零件号码(去除重复,按零件号码升序排列)。
SELECT DISTINCT pno FROM s NATURAL JOIN spj WHERE city='上海' ORDER BY pno ASC;
##3. 查询使用上海产的零件的工程名称(按工程名称升序排列,去除重复数据)。
SELECT DISTINCT jname FROM j INNER JOIN spj ON j.`jno`=spj.`jno` INNER JOIN s ON spj.`sno`=s.`sno` WHERE s.city='上海' ORDER BY jname ASC;
##1. 查询供应工程J1零件为红色的供应商号码按供应商号码升序排列
SELECT sno FROM p NATURAL JOIN spj WHERE jno='J1'AND color='红' ORDER BY sno ASC;
##2. 查询没有使用天津供应商生产的红色零件的工程号码(去除重复数据,按工程号码升序排列)。
SELECT DISTINCT jno FROM j
WHERE jno NOT IN(
SELECT jno FROM s NATURAL JOIN spj NATURAL JOIN p WHERE s.`city`='天津'AND color='红') ORDER BY jno ASC;
##子查询
SELECT DISTINCT jno FROM j
WHERE jno NOT IN(
SELECT jno FROM spj
WHERE sno IN (SELECT sno FROM s WHERE city='天津') AND pno IN(SELECT pno FROM p WHERE color='红'));
##not exists
SELECT DISTINCT jno FROM j
WHERE NOT EXISTS(
SELECT jno FROM spj NATURAL JOIN p NATURAL JOIN s WHERE city='天津'AND color='红'AND j.`jno`=jno) ORDER BY jno ASC;
##1. 把全部红色零件的颜色改成蓝色。
UPDATE p
SET color='蓝'
WHERE color='红';
##2. 由S5供给J4的零件P6改为由S3供应。
UPDATE spj
SET sno='S3'
WHERE sno='S5'AND jno='J4'AND pno='P6';
##3. 从供应商关系中删除供应商号是S2的记录并从供应情况关系中删除相应的记录。
DELETE FROM s
WHERE sno='S2';
DELETE FROM spj
WHERE sno='s2';
##4. 请将(S2J6P4200)插入供应情况关系表。
INSERT INTO spj(sno,jno,pno,qty)VALUES('S2','J6','P4',200);
##1. 请为“三建”工程项目建立一个供应情况的视图(v_spj),包括供应商代码(SNO)、零件代码(PNO)、供应数量(QTY)。
CREATE VIEW v_spj AS
SELECT sno,pno,qty FROM spj
WHERE jno IN(
SELECT jno FROM j
WHERE jname='三建'
);
##(1) 查询“三建”工程项目使用的各种零件代码及其总数量(total)
SELECT pno,SUM(qty) AS total FROM v_spj GROUP BY pno;
##(2) 查询供应商S1的供应情况。
SELECT* FROM v_spj
WHERE sno='S1';
## 1.在spj表定义索引IDX_SPJ包括sno,pno,jno
CREATE INDEX IDX_SPJ ON spj(sno,pno,jno);
## 2. 查看spj表索引定义。
SHOW INDEX FROM spj;
SELECT* FROM s;
SELECT* FROM p;
SELECT* FROM j;
SELECT* FROM spj;