2016-05-15 67 views
-1

我已在此查询中使用JOIN,我不知道如何但我使用直接引用和结果是相关的...请帮助我如何使用左连接和/或右连接和/或内连接

感谢

问: 什么礼节名在车牌(加泰罗尼亚)= LVU9132

SELECT P.NOME 
FROM MODELO M 
    ,VEICULO V 
    ,PROPRIETARIO P 
WHERE P.COD_PROP = V.PROPRIETARIO 
    AND V.MODELO = M.COD_MOD 
    AND V.PLACA = 'LVU9132'; 

回答

0

你在新的语法查询:

SELECT P.NOME 
FROM MODELO M 
inner join VEICULO V on V.MODELO = M.COD_MOD 
inner join PROPRIETARIO P on P.COD_PROP = V.PROPRIETARIO 
WHERE V.PLACA = 'LVU9132'; 

内部联接既需要匹配的行存在。如果找不到匹配的PROPRIETARIO行,则VEICULO行也不会显示。

如果您想查看车辆行,即使它没有匹配的所有者,也请使用以下内容。 如果找不到匹配的行,则左连接返回右值表PROPRIETARIO的空值。请注意,左连接需要左手表存在,但不关心右手表上是否有匹配的行。

新语法(ANSI92标准)

SELECT P.NOME 
FROM MODELO M 
inner join VEICULO V on V.MODELO = M.COD_MOD 
left join PROPRIETARIO P on P.COD_PROP = V.PROPRIETARIO 
WHERE V.PLACA = 'LVU9132'; 

旧式的语法不再在SQL Server 2012支持的,因为它可以返回不正确的结果。

+0

谢谢约翰D,我从来没有使用JOIN,我只知道这种方式P.COD_PROP = V.PROPRIETARIO。但你的解释是完美的!谢谢!! –

+0

'INNER JOIN'与'JOIN'相同 - 我认为很明显,没有额外的单词。 – Hogan

+0

@Vitor不客气。供参考:这些条件中的任何一个都以相同的方式工作: 'V.PROPRIETARIO * = P.COD_PROP'或'P.COD_PROP = * V.PROPRIETARIO' –

0

你不需要外部连接来回答这个问题(如提出);

SELECT P.NOME 
FROM MODELO M JOIN 
    VEICULO V 
    ON V.MODELO = M.COD_MOD JOIN 
    PROPRIETARIO P 
    ON P.COD_PROP = V.PROPRIETARIO 
WHERE V.PLACA = 'LVU9132'; 
+0

谢谢@Gordon Linoff !!!这是一样的,但我的老师只想这样(左连接等)!我很生气!!! –