2009-02-05 16 views
14

Ho incontrato alcune query SQL in Oracle che contengono '(+)' e non ho idea di cosa significhi. Qualcuno può spiegare il suo scopo o fornire alcuni esempi del suo utilizzo? GrazieSignificato di (+) in query SQL

+0

dupe: http://stackoverflow.com/questions/430274/oracle-what-does-do-in-a-where-clause – Alkini

+1

Ho effettivamente provato a cercare una risposta prima di pubblicare la domanda ma non ho ricevuto risultati durante la ricerca di '+' o '(+). È strano che il titolo della domanda nell'URL sembra saltare anche la parte (+). – Zabbala

+0

Questo è un duplicato di [questo post] (http://stackoverflow.com/questions/430274/oracle-what-does-do-in-a-where-clause). Potresti trovare ulteriori informazioni lì. –

risposta

35

È sinonimo di Oracle per OUTER JOIN.

SELECT * 
FROM a, b 
WHERE b.id(+) = a.id 

dà stesso risultato

SELECT * 
FROM a 
    LEFT OUTER JOIN b 
    ON b.id = a.id 
+0

Prenderò nota per la persona successiva, presta attenzione a ciò che è successo a 'a''s e' b' è qui. Nell'esempio la clausola from è '[a, b]', ma il controllo di equivalenza è '[b.id = a.id]'. La mia abitudine è di mantenere l'equivalenza '[a.id = b.id]'; quindi ho interpretato male l'esempio. Un'ora della mia vita non tornerò più indietro; ^) – BIBD

+0

Per quello, interpreterò '(+)' come il modo di dire di oracolo "questo lato diventa nullo quando non si trova alcuna corrispondenza". Usando la mia norma per le equivalenze di '[a.id = b.id]'; poi succede uno specchio. Se sto riscrivendo la query per seguire lo standard moderno, '[a.id = b.id (+)]' diventa un LEFT OUTER e '[a.id (+) = b.id]' diventa un GIUSTO ESTERNO. – BIBD

+0

La cosa è l'operatore (+) posto direttamente nell'istruzione condizionale e sul lato della tabella opzionale (quella che può contenere valori vuoti o nulli all'interno del condizionale). – Yergalem

4

Il + è una scorciatoia per outer join, a seconda di quale lato si indossa, indica un DESTRA o SINISTRA OUTER JOIN

Controllare la seconda voce in this forum post per alcuni esempi

2

IIRC, il + viene utilizzato nelle versioni precedenti di Oracle per indicare un join esterno nella sintassi di join SQL pre-ANSI. In altre parole:

select foo,bar 
from a, b 
where a.id = b.id+ 

è l'equivalente di

select foo,bar 
from a left outer join b 
on a.id = b.id 

NOTA: questo può essere all'indietro/leggermente corretto, in quanto non ho mai usato la sintassi SQL pre-ANSI.

+1

Viene utilizzato nelle versioni più recenti di Oracle per quelli di noi che odiano ANSI sql. –

+0

@ Mark Brady esattamente. Sento che rende più chiara l'intenzione della domanda. E odio anche * ANSI SQL. –

2

Si utilizza questo per assicurare che la tabella che si sta aggiungendo non riduca la quantità di record restituiti. Quindi è utile quando ti unisci a un tavolo che potrebbe non avere un record per ogni chiave su cui stai partecipando.

Ad esempio, se si stavano unendo un cliente e di acquisto tavolo:

alla lista dei tutti i clienti e tutti i loro acquisti, si vuole fare un outer join (+) sul tavolo di acquisto modo che i clienti che non hai ancora acquistato nulla nel tuo rapporto.