我的考试需要一些帮助,有2个问题,但我不知道如何加入它们以及我需要哪些SQL语句。
答案 0 :(得分:0)
理解这是一个练习考试,并且您无权访问表格/值....
你真的应该展示你尝试过的东西......但是因为你是新手......
问题1: 返回薪水高于最昂贵产品价格的所有员工的员工ID,姓氏和工资(比如他们如何避免使用max there那里......)
因此,这使用子查询从产品中获取最高价格,并简单地将薪水与其进行比较。
SELECT Employee_ID, Last_Name, Salary
FROM employees
WHERE salary > (Select max(price) from Products);
问题2:
为product_ID为3生成两个集合,其中product_ID为1,并确保1的那些不在3的组中。
并使用相关的子查询(注意PUR别名在子查询中是如何的?这就是它相关的原因)
因此,第一个查询获得所有购买产品1的客户。第二个查询查找所有购买产品3的客户。由于我们只想要购买1而不是3的客户,我们将查询关联使用不存在我们有答案。
存在 - 通常最快,因为一旦找到客户的单个记录,就可以提前退出子查询。
SELECT Distinct PUR.Customer_ID
FROM purchases PUR
WHERE PRODUCT_ID = 1
and not exists (SELECT 1
FROM Purchases PUR2
WHERE Product_ID = 3
and PUR.Customer_ID = PUR2.Customer_I
有2-3种方法可以做到这一点。在大多数情况下,我发现上述效率最高。不过你也可以通过...自我加入;或使用非IN语句
Self LEFT join(如果您需要来自多个表的数据,则效果很好
)我们自行加入购买,但过滤每个表格实例以用于特定产品。我们使用左连接,因为我们想要所有带有产品ID 1的记录以及在p2中找到匹配的记录,我们想要排除那些记录,所以如果customer_ID为空,则表示他们没有产品3购买
SELECT Distinct P1.customer_ID
FROM Purchases P1
LEFT JOIN Purchase P2
on P1.customer_Id = P2.customer_ID
and P2.Product_ID = 3
WHERE P1.Product_ID = 1
and P2.customer_ID is null
不在(通常最慢,但如果子查询适用于非常小的数据集,则工作正常)
SELECT Distinct PUR.Customer_ID
FROM purchases PUR
WHERE PRODUCT_ID = 1
and customer_ID not in (SELECT Customer_Id
FROM Purchases
WHERE Product_ID = 3)
请注意,前两个答案都没有使用连接;虽然相关的子查询很接近。