【发布时间】:2017-02-10 07:54:46
【问题描述】:
表格:
– 啤酒(名称、制造商)
– 酒吧(名称、地址、执照)
– 销售(酒吧、啤酒、价格)
– 饮酒者(姓名、地址、电话)
– 喜欢(饮酒者、啤酒)
– 常客(饮酒者、酒吧)
– 朋友(饮酒者 1、饮酒者 2)
任务:
- 查找两个或更多饮酒者喜欢的所有啤酒
- 查找三个或更多饮酒者喜欢的所有啤酒
- 查找 Anna 的朋友喜欢的所有啤酒
- 查找所有出售比“99 瓶”酒吧出售的所有啤酒都便宜的啤酒的酒吧
查询 #1:
SELECT x name
FROM Beers x, Drinkers y, Likes s
WHERE y.name=s.drinker and s.beer=x.name
GROUP BY x.name
HAVING COUNT(s.drinker) >= 2;
查询 #2:
和上一个一样
查询 #3。
SELECT x name
FROM Beers x, Friends y, Drinkers z, Likes p
WHERE z.name = "Anna"
AND z.name = y.drinker1
AND y.drinker2 = p.drinker
AND p.beer = x.name;
查询 #4:
SELECT x.name
FROM Bars x, Sells y
WHERE x.name = y.bar
AND SOME(SELECT y.price) < ALL(SELECT t.price
FROM Sells t
WHERE t.bar = "99 bottles");
我对最后一个有点犹豫。我可以以这种方式使用 SOME 吗?我可以通过在 select 子句中使用外部变量来创建子查询吗?
【问题讨论】:
-
Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已替换为 ANSI 中的 proper ANSI
JOIN语法-92 SQL 标准(25 年前),不鼓励使用它 -
是的,每个人都告诉我,我一踩到SQL就一直这么说,但那是我老师用的。他告诉我们,我们将在课程的稍后部分了解该语法。
标签: sql