(14)查询至少供应了工程 J1 所使用的全部零件的供应商名称。
时间: 2023-06-15 07:07:05 浏览: 226
以下是SQL查询语句:
```
SELECT DISTINCT S.SNAME
FROM SUPPLIER S, PART P, PROJECT J, SPJ SPJ1, SPJ SPJ2
WHERE S.SNO = SPJ1.SNO
AND P.PNO = SPJ1.PNO
AND J.JNO = SPJ1.JNO
AND J.JNAME = 'J1'
AND NOT EXISTS (
SELECT *
FROM PART P2
WHERE NOT EXISTS (
SELECT *
FROM SPJ SPJ3
WHERE SPJ3.PNO = P2.PNO
AND SPJ3.JNO = J.JNO
AND SPJ3.SNO = S.SNO
)
);
```
解释:
1. 首先,通过连接 SUPPLIER、PART、PROJECT 和 SPJ 表,获取所有供应工程 J1 所使用的零件的供应商信息。
2. 然后,使用 NOT EXISTS 子句筛选出至少供应了工程 J1 所使用的全部零件的供应商,即在 PART 表中不存在任何一个工程 J1 所使用的零件不供应给该供应商。
3. 最后,使用 DISTINCT 关键字去重,以避免出现重复的供应商名称。
注意:该查询假设一个供应商不可能为同一工程 J1 提供重复的零件。如果存在这种情况,则需要做进一步的处理。
相关问题
请写出下面查询的SQL语句 1、求供应工程J1零件P1的供应商号码SNO; 2、求供应工程J1零件为红色的供应商号码SNO; 3、求出使用上海产的零件的工程名称; 4、求没有使用天津供应商生产的红色零件的工程号(分别用三种方式写); 5、求至少用了供应商S1所供应的全部零件的工程号JNO; 6、把全部红色零件的颜色改成蓝色; 7、由 S5 供给 J4 的零件 P6 改为由 S3 供应;
1. SELECT SNO FROM 供应 WHERE JNO='J1' AND LNO='P1' AND 工程='供应工程';
2. SELECT SNO FROM 供应 WHERE JNO='J1' AND 颜色='红色' AND 工程='供应工程';
3. SELECT DISTINCT 工程 FROM 使用 WHERE 地点='上海';
4. (1) SELECT DISTINCT JNO FROM 使用 WHERE JNO NOT IN (SELECT DISTINCT JNO FROM 使用 WHERE 地点='天津' AND 颜色='红色');
(2) SELECT DISTINCT JNO FROM 使用 WHERE 地点<>'天津' OR (地点='天津' AND 颜色<>'红色');
(3) SELECT DISTINCT JNO FROM 使用 WHERE NOT EXISTS (SELECT * FROM 使用 WHERE JNO=使用.JNO AND 地点='天津' AND 颜色='红色');
5. SELECT JNO FROM 使用 WHERE SNO='S1' GROUP BY JNO HAVING COUNT(DISTINCT LNO)=(SELECT COUNT(DISTINCT LNO) FROM 使用 WHERE SNO='S1');
6. UPDATE 使用 SET 颜色='蓝色' WHERE 颜色='红色';
7. UPDATE 供应 SET SNO='S3' WHERE JNO='J4' AND LNO='P6' AND SNO='S5';
设有4个关系模式: 供应商关系:S(SNO,SNAME,CITY),属性依次是供应商号、供应商名称和所在城市; 零件关系:P(PNO,PNAME,COLOR,WEIGHT),属性依次是零件号、零件名和颜色; 工程关系:J(JNO,JNAME,CITY),属性依次是工程号、工程名和所在城市; 供应关系:SPJ(SNO,PNO,JNO,QTY),属性依次是供应商号、零件号、工程号和数量。 用SQL语句实现下列操作: (1)创建以上四个表。(8分) (2)求供应工程J1零件的供应商号码SNO。(6分) (3)求供应工程J1零件P1的供应商号码SNO。(6分) (4)求供应工程J1零件为红色的供应商号码SNO。(6分) (5)求没有使用天津供应商生产的红色零件的工程号。(6分) (6)求至少用了供应商S1所供应的全部零件的工程号 JNO ;(8分)
(1) 创建表语句如下:
```sql
CREATE TABLE S(
SNO VARCHAR(10),
SNAME VARCHAR(20),
CITY VARCHAR(20)
);
CREATE TABLE P(
PNO VARCHAR(10),
PNAME VARCHAR(20),
COLOR VARCHAR(20),
WEIGHT FLOAT
);
CREATE TABLE J(
JNO VARCHAR(10),
JNAME VARCHAR(20),
CITY VARCHAR(20)
);
CREATE TABLE SPJ(
SNO VARCHAR(10),
PNO VARCHAR(10),
JNO VARCHAR(10),
QTY INT
);
```
(2) 求供应工程J1零件的供应商号码SNO的SQL语句如下:
```sql
SELECT SNO
FROM SPJ
WHERE JNO = 'J1' AND PNO = 'P1';
```
(3) 求供应工程J1零件P1的供应商号码SNO的SQL语句如下:
```sql
SELECT SNO
FROM SPJ
WHERE JNO = 'J1' AND PNO = 'P1';
```
(4) 求供应工程J1零件为红色的供应商号码SNO的SQL语句如下:
```sql
SELECT DISTINCT SNO
FROM SPJ
INNER JOIN P ON SPJ.PNO = P.PNO
WHERE JNO = 'J1' AND COLOR = '红色';
```
(5) 求没有使用天津供应商生产的红色零件的工程号的SQL语句如下:
```sql
SELECT DISTINCT JNO
FROM SPJ
INNER JOIN S ON SPJ.SNO = S.SNO
INNER JOIN P ON SPJ.PNO = P.PNO
WHERE CITY <> '天津' AND COLOR = '红色'
AND JNO NOT IN (
SELECT JNO
FROM SPJ
INNER JOIN S ON SPJ.SNO = S.SNO
WHERE CITY = '天津'
);
```
(6) 求至少用了供应商S1所供应的全部零件的工程号JNO的SQL语句如下:
```sql
SELECT JNO
FROM SPJ
WHERE SNO = 'S1'
GROUP BY JNO
HAVING COUNT(DISTINCT PNO) = (
SELECT COUNT(DISTINCT PNO)
FROM SPJ
WHERE SNO = 'S1'
);
```
阅读全文