我是sql新手,仍在学习如何编写查询。。我有一些关于我写的代码的问题,这些代码主要考虑使用左连接/内连接
供应商(sid:int,sname:varchar(30),地址:varchar(50))
零件(pid:int,pname:varchar(30),颜色:varchar(10))
目录(sid:int,pid:int,cost:double)
找出供应每一个黑色零件的供应商的陷阱。
select s.sid, s.sname from Suppliers s, Parts p
where p.color = 'black'
having count(p.pid) = 15;
对于这个查询,我的问题是,我是否需要在where子句中的任何地方有供应商,以便找到供应每个黑色部件的供应商?
列出所有供应黑色零件的供应商的名单。
select s.sname from Suppliers s
inner join Parts p
on p.color = 'black';
这也是同样的情况,在这个问题中,我是正确地使用内部联接还是应该如何使用这两个表。
还有这两个问题,我是否需要使用目录,因为这是什么可以联系在一起的供应商和零件?
2条答案
按热度按时间hzbexzde1#
是的,假设数据插入正确,您的目录表就是实现您要查询的内容的方法。在没有目录的情况下,零件和供应商之间没有任何联系。
让我们以第二个颜色查询为例:(suppliers表没有
color
列,因此列不能用于联接)这样就可以了,如果不行,就在问题后面加上表模式。你通过做一个
SHOW CREATE TABLE Catalog
然后复制/粘贴输出。然后对其他两个表执行相同的操作。u0njafvf2#
是的,这两个查询都需要目录,因为这是连接供应商和产品的共同点。
我可能想得太多了。这是我的思路。
结构
选择所有黑色部分
选择供应商销售的所有黑色零件
找到供应所有黑色零件的供应商
与上述内容类似,您的第二个查询也必须更改为以下内容:
第二个查询
在上面的查询中,我们将catalog与parts结合起来,得到所有包含黑色部分的catalog。然后将结果与供应商相结合,得到供应商的名称。如果供应商提供多个黑色零件,则其信息可能出现多次。所以,我们使用distinct来获得不同的名称。
例子:http://rextester.com/idh97131