Quando utilizzare un left outer join?

Non riesco a capire il concetto di un join esterno sinistro, un join esterno destro, o, anzi, perché abbiamo bisogno di usare join! La domanda che mi sto lottando con la tavola, io sto lavorando da qui: Link

Domanda 3(b)

Costruire un comando SQL per risolvere la query riportata di seguito, e spiega perché ha dovuto utilizzare il
(esterno) metodo join. [5 punti]
“Trovare il nome di ogni membro del personale e la sua/il suo coniuge a carico, se qualche”

Domanda 3(c) –

Costruire un comando SQL per risolvere la query seguente, utilizzando (i) il metodo join, e (ii) il
sottoquery metodo. [10 punti]
“Trovare il nome di identità di ogni membro del personale che ha lavorato per più di 20 ore
Informatizzazione Del Progetto”

Qualcuno può spiegare questo a me basta?

  • suo il “se”… left outer join sono la stessa sinistra si unisce (in mysql) e li si usa per restituire le righe, anche se non necessariamente corrispondono alle righe di un’altra tabella.
  • E inoltre, è necessario utilizzare un join perché questo è, molto semplicemente, come le query di database di lavoro. È come chiedere perché abbiamo bisogno di usare i polmoni per respirare. Join sono il meccanismo con cui la query a un database relazionale sono fatti. Join non sono affatto un concetto complicato e se ci sono problemi ti suggerisco di effettuare ulteriori inizio la lettura su database relazionali. Se, in effetti, sono uno studente presso l’Università di Cork, allora si dovrebbe essere in grado di accedere a questa risorsa: proquest.safaribooksonline.com/…
InformationsquelleAutor John Conrad | 2011-05-03



5 Replies
  1. 82

    Join vengono utilizzati per unire due tabelle correlate insieme.

    Nel tuo esempio, è possibile combinare la tabella Dipendenti e il Dipartimento della tabella, in questo modo:

    SELECT FNAME, LNAME, DNAME
    FROM
    EMPLOYEE INNER JOIN DEPARTMENT ON EMPLOYEE.DNO=DEPARTMENT.DNUMBER

    Il risultato sarebbe un recordset come:

    FNAME   LNAME   DNAME
    -----   -----   -----
    John    Smith   Research
    John    Doe     Administration

    Ho usato un INNER JOIN sopra. INNER JOINs unire le due tabelle in modo che solo record di partite in entrambe le tabelle vengono visualizzate, e sono aderito in questo caso, il numero di reparto (campo DNO dei Dipendenti, DNUMBER nel Reparto tabella).

    LEFT JOINs consente di unire due tabelle quando si hanno i record della prima tabella, ma potrebbe non hanno il record della seconda tabella. Per esempio, diciamo che si desidera un elenco di tutti i dipendenti, oltre a eventuali persone a carico:

    SELECT EMPLOYEE.FNAME as employee_first, EMPLOYEE.LNAME as employee_last, DEPENDENT.FNAME as dependent_last, DEPENDENT.LNAME as dependent_last
    FROM
    EMPLOYEE INNER JOIN DEPENDENT ON EMPLOYEE.SSN=DEPENDENT.ESSN

    Il problema qui è che se un dipendente non sono un dipendente, quindi il loro record non si presenta a tutti — perché non c’è nessun record corrispondente nella tabella DIPENDENTE.

    Modo, è possibile utilizzare un sinistra join che mantiene tutti i dati della “sinistra” (cioè la prima tabella) e tira in qualsiasi corrispondenza dei dati sul “diritto” (seconda tabella):

    SELECT EMPLOYEE.FNAME as employee_first, EMPLOYEE.LNAME as employee_last, DEPENDENT.FNAME as dependent_first, DEPENDENT.LNAME as dependent_last
    FROM
    EMPLOYEE LEFT JOIN DEPENDENT ON EMPLOYEE.SSN=DEPENDENT.ESSN

    Ora abbiamo tutti del record dei dipendenti. Se non c’è corrispondenza dipendente(s) di un dipendente, il dependent_first e dependent_last campi null.

    • +1 per la risposta esauriente!
    • Sì, mi sono reso conto di come ho finito la mia risposta che era fondamentalmente un compito a casa (ho ignorato le domande in fondo e si concentra solo sulla prima parte più collegato doc). Ho aggiunto la frase “Tagged come” compiti a casa”, ma poi ha visto che qualcuno mi aveva battuto il pugno così ho rimosso la riga. 🙂
    • Non fare i compiti. Grazie mille per la risposta, molto utile :).
    • thx giordano, chiara spiegazione!!! mi ha aiutato troppo!
    • Questa è la risposta migliore che ho letto su Left Join su internet!
    • +1 per la spiegazione come docente

  2. 25

    esempio (non utilizzando il tuo esempio tabelle 🙂

    Ho una società di noleggio auto.

    Table car
    id: integer primary key autoincrement
    licence_plate: varchar
    purchase_date: date
    
    Table customer
    id: integer primary key autoincrement
    name: varchar
    
    Table rental
    id: integer primary key autoincrement
    car_id: integer
    bike_id: integer
    customer_id: integer
    rental_date: date

    Semplice no? Ho 10 record per le auto, perché ho 10 auto.

    Sono stato in esecuzione di questa attività per 10 anni, quindi ho 1000 clienti.

    E posso noleggiare l’auto di circa 20 volte all’anno per le auto = 10 x 10 auto x 20 = 2000 a noleggio.

    Se devo conservare il tutto in un unico grande tavolo ho 10x1000x2000 = 20 milioni di dischi.

    Se memorizzo in 3 tabelle ho 10+1000+2000 = 3010 record.

    3 ordini di grandezza, in modo che il motivo per cui io uso 3 tabelle.

    Ma perché io uso 3 tabelle (per risparmiare spazio e tempo) devo usare unisce al fine di ottenere i dati fuori di nuovo

    (almeno se voglio I nomi e le targhe al posto dei numeri).

    Utilizzando inner join

    Tutti i noleggi per cliente 345?

    SELECT * FROM customer
    INNER JOIN rental on (rental.customer_id = customer.id)
    INNER JOIN car on (car.id = rental.car_id)
    WHERE customer.id = 345.

    Che un INNER JOIN, perché abbiamo solo volete sapere su auto linked to affitti linked to clienti che è realmente accaduto.

    Notare che abbiamo anche un bike_id, collegamento alla moto tabella, che è molto simile all’auto tabella, ma diversi.
    Come possiamo ottenere tutte le moto + noleggio auto per il cliente 345.

    Siamo in grado di provare e fare questo

    SELECT * FROM customer
    INNER JOIN rental on (rental.customer_id = customer.id)
    INNER JOIN car on (car.id = rental.car_id)
    INNER JOIN bike on (bike.id = rental.bike_id)
    WHERE customer.id = 345.

    Ma che darà un insieme vuoto!!

    Questo perché un noleggio può essere una bike_rental O un car_rental, ma non entrambi allo stesso tempo.

    E il non-lavoro inner join query solo dare dei risultati per tutti i noleggi in cui si affitta sia una moto e un’auto, nella stessa transazione.

    Stiamo cercando di ottenere e boolean OR relazione con un booleano AND join.

    Utilizzo di outer join

    Per risolvere questo abbiamo bisogno di un outer join.

    Si risolve con left join

    SELECT * FROM customer
    INNER JOIN rental on (rental.customer_id = customer.id) <<-- link always
    LEFT JOIN car on (car.id = rental.car_id) <<-- link half of the time
    LEFT JOIN bike on (bike.id = rental.bike_id) <<-- link (other) 0.5 of the time.
    WHERE customer.id = 345.

    Guardate in questo modo. Un inner join è un AND e un left join è un OR come il seguente pseudocodice:

    if a=1 AND a=2 then {this is always false, no result}
    if a=1 OR a=2 then  {this might be true or not}

    Se si creano le tabelle ed eseguire la query, è possibile vedere il risultato.

    terminologia

    Un left join è la stessa come un left outer join.
    Un join senza nessuna aggiunta di prefissi è un inner join
    C’è anche un full outer join. In 25 anni di programmazione non l’ho mai usato.

    Perché Left join

    Bene, ci sono due tabelle coinvolte. Nell’esempio abbiamo collegato

    cliente di affitto con un inner join, in una inner join entrambe le tabelle deve link, in modo che non vi è alcuna differenza tra il left:customer tabella e il right:rental tabella.

    Il link che è stato un left join tra left:rental e right:car. Sul lato sinistro tutte le righe devono link e la destra non hanno per. Questo è il motivo per cui left join

    • bello 😀 grazie per la bella spiegazione al punto AND e OR relazione 😀 mi fa capire diverse di quelle. Prima di questo, non capisco perché la gente usa LEFT JOIN quando si prendono sempre INTERE tabelle 😀
  3. 0

    Penso che la Domanda 3(b) è fonte di confusione, perché la sua intera premessa sbagliata: non è necessario utilizzare un outer join “risolvere la query, ad esempio a considerare questo (secondo lo stile di sintassi in esame è probabilmente saggio):

    SELECT FNAME, LNAME, DEPENDENT_NAME
      FROM EMPLOYEE, DEPENDENT
     WHERE SSN = ESSN
           AND RELATIONSHIP = 'SPOUSE'
    UNION 
    SELECT FNAME, LNAME, NULL
      FROM EMPLOYEE
    EXCEPT 
    SELECT FNAME, LNAME, DEPENDENT_NAME
      FROM EMPLOYEE, DEPENDENT
     WHERE SSN = ESSN
           AND RELATIONSHIP = 'SPOUSE'
  4. 0

    In generale:
    UNIRE i giunti di due tabelle.
    Utilizzare INNER JOIN quando si vuole “guardare in alto”, come cercare informazioni di dettaglio di ogni colonna specifica.
    Utilizzare OUTER JOIN quando vuoi “dimostrare”, come l’elenco di tutte le info di 2 tavoli.

Lascia un commento