问题一不考虑city属性,重新编写SQL代码
时间: 2024-11-06 18:13:27 浏览: 14
针对第一个问题,如果不考虑`city`属性,即只需要关注到哪些员工向所有至少访问过10次零售店的客户销售过商品,我们可以简化SQL代码如下:
```sql
SELECT DISTINCT E.eid, E.ename
FROM employees E
JOIN (
SELECT cid
FROM customers
WHERE visits_made >= 10
) AS high_visitors
ON E.eid = purchases.eid
JOIN purchases P ON E.eid = P.eid
WHERE P.pid IN (
SELECT PID
FROM products
WHERE pname = 'TV'
)
GROUP BY E.eid, E.ename
HAVING COUNT(DISTINCT P.cid) = (SELECT COUNT(*) FROM high_visitors);
```
这里去掉了城市属性的比较,只保留了客户访问次数的数据。
对于第二个问题,若改为`NOT EXISTS`条件,查询变为:
```sql
SELECT DISTINCT C.cname
FROM customers C
LEFT JOIN purchases P ON C.cid = P.cid AND P.pid IN (
SELECT PID
FROM products
WHERE pname = 'TV'
)
WHERE NOT EXISTS (P.pid);
```
这将返回所有从未购买过电视的客户名称。
关于这两个查询的优化,常见的做法包括创建合适的索引(如在`visits_made`, `eid`, `cid`, `pid`等字段上),特别是对频繁用于联接的字段,以提高查询速度。此外,避免全表扫描也是关键,特别是在大型数据集上。
阅读全文