Domanda

C'è qualche differenza significativa tra le seguenti?

SELECT a.name, b.name FROM a, b WHERE a.id = b.id AND a.id = 1

E

SELECT a.name, b.name FROM a INNER JOIN b ON a.id = b.id WHERE a.id = 1

farlo gli utenti hanno una preferenza di uno sopra l'altro?

È stato utile?

Soluzione

Non c'è alcuna differenza, ma la leggibilità del secondo è molto meglio quando si dispone di una grande-join a più query con in più in cui le clausole per il filtraggio.
Separare il join clausole e le clausole di filtro è una buona cosa:)

Altri suggerimenti

Il primo è ANSI 89 sintassi, il secondo è ANSI 92.

Per che query specifica non v'è alcuna differenza. Tuttavia, con l'ex si perde la capacità di separare un filtro da una condizione di join nelle query complesse, e la sintassi per specificare SINISTRA DESTRA vs vs interno è spesso fonte di confusione, soprattutto se si dispone di andare avanti e indietro tra diversi fornitori db. Non mi piace la sintassi più vecchio a tutti.

Non v'è alcuna differenza per il motore di query SQL.

Per facilitare la lettura, il secondo è molto più facile da leggere se si utilizzano le interruzioni di linea e rientro.

Per INNER JOIN, non importa se si mette "filtri" e "si unisce" in ON o clausola WHERE, query optimizer deve decidere cosa fare prima in ogni caso (si può scegliere di fare un filtro prima, un join tardi , o viceversa

Per OUTER join tuttavia, v'è una differenza, e, talvolta, youll vuole mettere la condizione nella clausola ON, a volte in WHERE. Mettere una condizione nella clausola WHERE per un outer join può trasformarlo in un INNER JOIN (a causa di come funzionano NULL)

Ad esempio, controllare la leggibilità tra le due seguenti campioni:

SELECT c.customer_no, o.order_no, a.article_no, r.price
FROM customer c, order o, orderrow r, article a
WHERE o.customer_id = c.customer_id
AND r.order_id = o.order_id
AND a.article_id = r.article_id
AND o.orderdate >= '2003-01-01'
AND o.orderdate < '2004-01-01'
AND c.customer_name LIKE 'A%'
ORDER BY r.price DESC 

vs

SELECT c.customer_no, o.order_no, a.article_no, r.price
FROM customer c 
INNER JOIN order o
   ON  o.customer_id = c.customer_id
   AND o.orderdate >= '2003-01-01'
   AND o.orderdate < '2004-01-01'
INNER JOIN orderrow r
   ON  r.order_id = o.order_id
INNER JOIN article a 
   ON  a.article_id = r.article_id
WHERE  c.customer_name LIKE 'A%'
ORDER BY r.price DESC 

Mentre è possibile eseguire la maggior parte delle attività utilizzando entrambi e nel tuo caso non v'è alcuna differenza, io sarò sempre utilizzare il secondo in ogni momento.

  1. E 'lo standard supportato corrente
  2. Si mantiene unisce nella clausola FROM e filtri nella clausola WHERE
  3. Si fa più complessa SINISTRA, DESTRA, PIENO ESTERNO unisce molto più facile
  4. MSSQL Guida è tutto basato intorno che la sintassi quindi molto più facile per ottenere aiuto sui vostri dubbi problema

Mentre non v'è alcuna differenza tecnicamente, è necessario essere molto attenti a fare join utilizzando il primo metodo. Se si sbaglia per caso, si potrebbe finire per fare un join cartesiano tra il a e tabelle B (un tempo molto lungo, di memoria e cpu interrogazione intensiva - sarà abbinare ogni singola riga in una con tutte le righe in b Bad se un. e b sono grandi tavoli per cominciare). L'utilizzo di un esplicito INNER JOIN è più sicuro e più facile da leggere.

Nessuna differenza. Trovo il primo formato più leggibile e utilizzare il secondo formato solo quando fare altri tipi di si unisce (ESTERNO, SINISTRA INTERNA, ecc).

La seconda forma è SQL92 sintassi compatibile. Questo dovrebbe significare che è supportata da tutti i fornitori di basi di dati attuali e futuri. Tuttavia, la verità è che la prima forma è così pervasiva che è anche garantito di essere in giro per più di ci preoccupiamo.

In caso contrario, essi sono gli stessi in tutti gli aspetti nel modo in cui i database trattano i due.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top