SQL是我的“弱”部分,但我可以处理它。我想知道下面是否有更好的方法来编写我的查询。任何替代方案,如小调整或编辑都是受欢迎的,这是我学习更多内容的一种方式。
我对所有这些都有预期/正确的结果。
显示哪些商店有产品代码1234,提供代码,名称和地址。
SELECT k.ShopCode, Name, Address FROM shops as k
INNER JOIN availability as d ON k.ShopCode=d.ShopCode
WHERE d.ProductCode = '1234';
显示商店中包含代码2的交易的平均值,包括交易的名称,地址和平均价格。
SELECT Name, Address, AVG(QUANTITY*ProductPrice) AS AveragePrice
FROM shop AS k
INNER JOIN chashier AS t ON k.ShopCode = t.ShopCode
INNER JOIN buy AS a ON t.CashierCode = a.CashierCode
INNER JOIN contains AS p ON a.BuyCode = p.BuyCode
WHERE t.ShopCode = '1'
GROUP BY NAME, ADDRESS
查看该连锁店总购买客户中前三名的名称,地址和金额。
SELECT TOP 3 BuyerName, BuyerSurname, Address, SUM(QUANTITY*ProductPrice) AS AveragePrice
FROM buyer AS pe
INNER JOIN buy AS a ON pe.CardCode = a.BuyerCode
INNER JOIN contains AS p ON a.BuyCode= p.BuyCode
GROUP BY pe.CardCode, BuyerName, BuyerSurname, Address
ORDER BY AveragePrice DESC;
这个展示了尚未在商店推出的新产品 不参加任何购买。答案包括产品的代码和说明。
SELECT BuyCode, description from products
WHERE product.BuyCode not in
( select distinct store_has_products.product_id FROM store_has_products)
显示每个商店的经理。答案包括商店代码和经理的姓名。
SELECT works.store_id as, employee.first_name, employee.last_name FROM manager
left join employee on manager.id = employee.id
lefti join works on employee.id = works. employee_id
答案 0 :(得分:2)
我要更改第4个查询(尚未启动的产品)以使用EXISTS ...
SELECT BuyCode, description FROM products
WHERE NOT EXISTS (SELECT * FROM store_has_products WHERE product_id = products.BuyCode)
(我发现使用IN而不是大型设备的性能非常差。这可能有所改善,我多年没有使用MySQL。但这至少是一种替代配方。)
其余的看起来很好......
答案 1 :(得分:0)
'热'替代方案是ORM(对象关系映射)
答案 2 :(得分:0)
您的查询没有任何问题。只需几个选择:
答案 3 :(得分:-1)
如果您不喜欢sql,请尝试使用PHP Object-relational mapping。