查询没有使用天津供应商供应的零部件的工程项目代码 S(SNO, SNAME, STATUS, CITY)P(PNO, PNAME, COLOR, WEIGHT )J(JNO, JNAME, CITY) SPJ(SNO, PNO, JNO, QTY )
时间: 2023-10-07 14:13:50 浏览: 120
这个问题需要进行多表联合查询,使用NOT IN语句可以筛选出没有使用天津供应商供应的零部件的工程项目代码。具体SQL语句如下:
SELECT DISTINCT J.JNO, J.JNAME
FROM J
INNER JOIN SPJ ON J.JNO = SPJ.JNO
INNER JOIN S ON SPJ.SNO = S.SNO
WHERE S.CITY <> '天津'
AND J.JNO NOT IN (
SELECT DISTINCT J.JNO
FROM J
INNER JOIN SPJ ON J.JNO = SPJ.JNO
INNER JOIN S ON SPJ.SNO = S.SNO
WHERE S.CITY = '天津'
)
解释:
首先,我们需要联合查询4个表格,建立起它们之间的关系。
然后,我们筛选出S表格中不是天津供应商的记录。这里使用了S表格的CITY字段进行筛选。
接下来,我们需要筛选出没有使用天津供应商供应的零部件的工程项目代码。这里使用NOT IN语句,将使用天津供应商的工程项目代码排除掉。
最后,我们使用SELECT DISTINCT语句,查询出不同的JNO和JNAME。
相关问题
针对供应管理数据库SPJ,进行各种嵌套与集合查询供应管理数据库SPJ模式: 供应商表S(SNO,SNAME,STAT,CITY) 零部件表P(PNO,PNAME,COLOR,WT) 工程项目表J(JNO,JNAME,CITY) 供应情况表SPJ(SNO,PNO,JNO,QTY):查询没有使用“天津”供应商供应的“红色”零件的工程项目信息;
好的,供应管理数据库SPJ的表结构如下:
供应商表S(SNO,SNAME,STAT,CITY)
零部件表P(PNO,PNAME,COLOR,WT)
工程项目表J(JNO,JNAME,CITY)
供应情况表SPJ(SNO,PNO,JNO,QTY)
查询没有使用“天津”供应商供应的“红色”零件的工程项目信息,可以通过以下SQL语句实现:
```
SELECT * FROM J WHERE JNO NOT IN (
SELECT JNO FROM SPJ WHERE PNO IN (
SELECT PNO FROM P WHERE COLOR = '红色'
) AND SNO IN (
SELECT SNO FROM S WHERE CITY = '天津'
)
)
```
这个查询语句中,首先查询出供应红色零件的所有供应商(即在S表中城市为“天津”的供应商),然后查询出这些供应商供应的所有零件(即在SPJ表中对应的零件编号),最后查询出这些零件对应的所有工程项目(即在SPJ表中对应的工程项目编号),并使用NOT IN关键字查询出不包含这些工程项目的所有工程项目信息。
S(SNO,SNAME,STATUS,CITY) 供应商表:供应商代码,供应商姓名,供应商状态,所在城市 P(PNO,PNAME,COLOR,WEIGHT) 零件表:零件代码,零件名称,颜色,重量 J(JNO,JNAME,CITY) 工程项目表:工程项目代码,工程项目名,工程项目所在城市 SPJ(SNO,PNO,JNO,QTY) 供应情况表:供应商代码,零件代码,工程项目代码,供应数量 请用关系代数表达查询:求供应工程项目J3零件的供应商代码。
可以用如下关系代数表达式来查询供应工程项目J3零件的供应商代码:
π SNO (σ JNAME='J3' ∧ PNAME='零件' (SPJ ⨝J(JNO)))
其中,σ表示选择符号,π表示投影符号,⨝表示自然连接符号,∧表示逻辑与符号。上述表达式中,SPJ ⨝J(JNO)表示将SPJ表与J表做自然连接,连接条件是它们的JNO相等,然后再根据JNAME='J3' ∧ PNAME='零件'做进一步选择,最后对结果投影出SNO即可得到供应工程项目J3零件的供应商代码。