INNER Join su 3 o più tabelle

di il
6 risposte

INNER Join su 3 o più tabelle

Salve a tutti.

Alcune domande su inner join. 

1) Queste query sono equivalenti?

a) Select qualcosa from tabella1 inner join tabella2 on tabella1.id = tabella2.fk….

b) Select qualcosa from tabella2 inner join tabella1 on tabella1.id = tabella2.fk….

Cioè posso scambiare l'ordine delle tabelle nel from e/o l'ordine delle chiavi nella clausola on?

2) In un join a 3 tabelle, queste sintassi sono equivalenti?

STILE MIO

select cognome, nome, classe, sezione, anno

from (studente inner join studente_classe on studente.id = studente_classe.fkstudente) inner join classe on studente_classe.fkclasse = classe.id

STILE ACCESS

select cognome, nome, classe, sezione, anno

from studente inner join (classe inner join studente_classe on classe.id = studente_classe.fkclasse) on (studente.id = studente_classe.fkstudente)

6 Risposte

  • Re: INNER Join su 3 o più tabelle

    09/01/2023 - zoro82 ha scritto:


    Alcune domande su inner join.  […]

    La clausola INNER JOIN, includendo forzatamente tutti i record che sono presenti in TUTTE le tabelle coinvolte nella relazione, in base ai campi specificati, può essere usata scambiando l'ordine delle tabelle, per quanto ne so.

  • Re: INNER Join su 3 o più tabelle

    Quindi, sia nel primo che nel secondo caso l'ordine è indifferente?

  • Re: INNER Join su 3 o più tabelle

    Salve,
    per definizione, l'ordine delle tabelle in un'operazione di INNER JOIN con cambia il risultato in quanto la proprieta' e' commutativa.

    salutoni romagnoli
    -- 
    Andrea

  • Re: INNER Join su 3 o più tabelle

    Record tabella 1:

    Id. Campo1.          campo fk

    1.  Ciao.                 4

    2.  Buongiorno.   1

    Record tabella 2

    Id.  Campo 1       campo n

    1.      XXX.             Fff

    Select from tabella 1

    Inner join tabella 2

    Where tabella1.campofk=tabella2.id

    Risultato: 

    2 buongiorno xxx fff

    Select from tabella2

    Inner join tabella 1 where

    Tabella1.campofk=tabella2.id

    Risultato:

    1 xxx fff 2 buongiorno

    Nel primo caso estrapoli i dati di tabella 1 dove fk è uguale a tabella 2 id

    Nel secondo caso estrapoli i dati della tabella 2 dove fk=tabella2.id

    Dipende da quale tabella fai la select.

    Con 3 tabelle dipende da quali tabelle colleghi

    Devono essere soddisfatte tutte le condizioni.

  • Re: INNER Join su 3 o più tabelle

    Salve,

    espresso in questi termini, senza specifica della clausola ON, mi pare piu' un CROSS JOIN rispetto a un INNER JOIN...
    vedi anche https://tableplus.com/blog/2019/09/sql-join-without-on.html

    mentre appunto, mi risulta che INNER JOIN goda delle proprieta' associativa e commutativa... vedi anche
    https://dba.stackexchange.com/questions/160916/proof-that-inner-join-is-commutative

    salutoni romagnoli
    -- 
    Andrea

  • Re: INNER Join su 3 o più tabelle

    09/01/2023 - zoro82 ha scritto:


    Salve a tutti.

    Alcune domande su inner join. 

    1) Queste query sono equivalenti?

    a) Select qualcosa from tabella1 inner join tabella2 on tabella1.id = tabella2.fk….

    b) Select qualcosa from tabella2 inner join tabella1 on tabella1.id = tabella2.fk….

    Cioè posso scambiare l'ordine delle tabelle nel from e/o l'ordine delle chiavi nella clausola on?

    2) In un join a 3 tabelle, queste sintassi sono equivalenti?

    STILE MIO

    select cognome, nome, classe, sezione, anno

    from (studente inner join studente_classe on studente.id = studente_classe.fkstudente) inner join classe on studente_classe.fkclasse = classe.id

    STILE ACCESS

    select cognome, nome, classe, sezione, anno

    from studente inner join (classe inner join studente_classe on classe.id = studente_classe.fkclasse) on (studente.id = studente_classe.fkstudente)

    Stai usando Access?
    Non sono bravo con SQL. Uso prevalentemente la visualizzazione struttura query.
    Per domanda 1) …forse vale pure la proprietà commutativa, ma per onore di prassi e ortodossia, pensa sempre INNER JOIN da TabellaMadre verso TabellaFiglia.
    Per domanda 2) prova a usare la visualizzazione struttura query, poi guarda cosa scrive SQL.

Devi accedere o registrarti per scrivere nel forum
6 risposte