SQL新手,需要一些查询建议

时间:2016-10-02 01:57:30

标签: sql

我最近开始学习SQL,但似乎无法创建从多个表/关系形成相关结果的SQL语句。

给出以下架构:

Account(accNumber, balance, type)
Branch(BSB, phone, streetAddress, town)
registered(accNumber*, BSB*)

我正在尝试制定一些输出: 列出所有在特定BSB(123)注册的accNumber,并显示其列出的城镇(悉尼)。

我为第一个查询尝试了以下语句:

SELECT accNumber, BSB, town
FROM ACCOUNT, BRANCH
WHERE BSB = 123;

但是,即使他们不属于BSB,我也会列出每个帐户,所以我尝试了:

SELECT accNumber, BSB, town
FROM ACCOUNT, BRANCH
WHERE BSB = 123
AND Town = 'Sydney'
AND account.accNumber=registered.accNumber
AND branch.bsb=registered.bsb;

这次我对列进行了模糊定义,因为它们在"注册"中具有相同的名称。表

我已尝试在选择语句中添加别名,即accNumber AS ACCOUNT_NUMBER等,但仍然会出现含糊不清的错误。

我尝试只列出注册表中的内容,但后来我没有得到城镇名称,只有accNumber和作为外键传入的BSB。

我似乎无法理解如何从其他表中提取数据并正确显示它们,并且非常感谢任何建议!

2 个答案:

答案 0 :(得分:1)

这可能有助于您开始。

SELECT a.ccNumber, b.BSB, c.town
FROM ACCOUNT as a
inner join registered as b on b.accNumber=a.accNumber
inner join BRANCH as c on c.bsb = b.bsb 
WHERE b.BSB = 123
  AND c.Town = 'Sydney'  

答案 1 :(得分:0)

所以这听起来像是一个普通的SQL问题。对于您的查询,这是您正在查看的内容:

select a.account_number
  from account a, brance b, registered r
  where a.account_number = r.account_number and
        a.bsb = b.bsb and
        b.bsb = 123;

这将从帐户表中获取BSB 123中的所有帐号。当您有多个具有相同列的表时,您需要告诉Oracle(以及任何数据库)" account_number& #34;您引用的列(否则它不明确,因为有多个表包含列account_number)。

SQL是关于表和连接的。有时你必须加入几个表来获得你需要的东西,如上所述。如果您没有像原来那样加入表格,那么您将获得一个"交叉产品",这不是您想要的。

我知道这是非常轻松的#34;但希望从上述问题的答案中,您可以了解如何做到这一点。

如果您有疑问,我很乐意为您提供更多帮助。在某些时候,每个人都是SQL新手。不要为此感到难过。这需要练习,然后变得更容易。

-Jim