查询所有供应了P5 零件的供应商的号码、供应商名称(使用EXISTS谓词与非EXISTS谓词)
时间: 2024-03-02 18:52:46 浏览: 60
使用EXISTS谓词的查询语句:
```
SELECT sid, sname
FROM S
WHERE EXISTS (
SELECT *
FROM SP
WHERE SP.sid = S.sid AND SP.pid = 'P5'
);
```
这个查询语句的含义是先在SP表中查找所有供应了P5零件的记录,然后在S表中查找所有在SP表中存在该记录的供应商,最后查询出这些供应商的供应商号和供应商名称。
使用非EXISTS谓词的查询语句:
```
SELECT sid, sname
FROM S
WHERE sid NOT IN (
SELECT sid
FROM SP
WHERE pid <> 'P5'
);
```
这个查询语句的含义是先在SP表中查找所有不供应P5零件的供应商号,然后在S表中查找所有不在该列表中的供应商,最后查询出这些供应商的供应商号和供应商名称。
这两个查询语句的结果是一样的,只是使用了不同的方法实现。
相关问题
查询所有没有供应P5零件的供应商的号码、供应商名称(使用EXISTS谓词与非EXISTS 谓词)
好的,以下是针对你的问题的 SQL 查询语句:
使用 EXISTS 谓词:
```
SELECT *
FROM suppliers s
WHERE NOT EXISTS (
SELECT *
FROM parts p
WHERE p.part_no = 'P5' AND s.supplier_no = p.supplier_no
);
```
使用非 EXISTS 谓词:
```
SELECT *
FROM suppliers s
WHERE supplier_no NOT IN (
SELECT supplier_no
FROM parts
WHERE part_no = 'P5'
);
```
这两个查询语句都可以达到相同的结果,即查询出所有没有供应 P5 零件的供应商的号码和名称。
带有EXISTS谓词的子查询与其他子查询有什么区别?
带有EXISTS谓词的子查询与其他子查询的区别在于,它只关心子查询是否返回了结果,而不关心结果集中具体的值是什么。因此,带有EXISTS谓词的子查询通常用于判断子查询是否返回了至少一行结果,以此来决定外层查询的结果。而其他子查询则通常用于返回具体的结果集,以供外层查询使用。
下面是一个带有EXISTS谓词的子查询的例子,它用于判断是否存在至少一个员工的工资高于平均工资:
```sql
SELECT *
FROM employees e
WHERE EXISTS (
SELECT *
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees)
);
```
阅读全文