λογισμικό

Γνώση Υπολογιστών >> λογισμικό >  >> SQL Server

Πώς συμμετέχετε σε δύο τραπέζια στο MySQL;

Συμμετέχετε σε δύο πίνακες στο MySQL χρησιμοποιώντας τη ρήτρα `join` σε μια δήλωση` select '. Υπάρχουν διάφοροι τύποι συνδέσεων, ο καθένας με ελαφρώς διαφορετική συμπεριφορά:

1. `Inner join` (πιο συνηθισμένο):

Επιστρέφει σειρές μόνο όταν υπάρχει ένας αγώνας και στους δύο πίνακες που βασίζονται στην κατάσταση σύνδεσης. Εάν δεν υπάρχει καμία αντιστοιχία σε κανέναν πίνακα, η σειρά αποκλείεται από το αποτέλεσμα.

`` sql

Επιλέξτε Column_Names

Από τον Πίνακα1

Εσωτερική συμμετοχή του Πίνακα2 στον Πίνακα1.COLUMN_NAME =ΠΙΝΑΚΑΣ2.COLUMN_NAME;

`` `

* `table1` και` table2`:τα τραπέζια που θέλετε να συμμετάσχετε.

* `column_name`:Οι στήλες που χρησιμοποιούνται για να ταιριάζουν με τις σειρές μεταξύ των πινάκων. Αυτές οι στήλες πρέπει να έχουν συμβατούς τύπους δεδομένων.

Παράδειγμα:

Ας πούμε ότι έχετε δύο πίνακες:

* `πελάτες`: `Customerid`,` name ', `city'

* `Παραγγελίες ': `Orderid`,` customerid ', `orderdate',` Totalamount '

Για να λάβετε το όνομα του πελάτη και τα στοιχεία παραγγελίας για όλες τις παραγγελίες:

`` sql

Επιλέξτε Customer.Name, Orders.ORDERID, ORDERS.ORDERDATE, ORDERS.TOTALAMOUNT

Από πελάτες

Εσωτερική συμμετοχή εντολών σε πελάτες.CustomerId =orders.customerid;

`` `

Αυτό θα επιστρέψει μόνο τους πελάτες που έχουν θέσει παραγγελίες και παραγγελίες που ανήκουν σε υπάρχοντες πελάτες.

2. `Left join '(ή` αριστερά εξωτερικά join'):

Επιστρέφει όλες τις σειρές από τον αριστερό τραπέζι (`table1`), ακόμη και αν δεν υπάρχει αντιστοιχία στο σωστό τραπέζι (` table2`). Εάν δεν υπάρχει καμία αντιστοιχία στο σωστό πίνακα, οι στήλες από το δεξιό πίνακα θα έχουν τιμές «null».

`` sql

Επιλέξτε Column_Names

Από τον Πίνακα1

Αριστερά Join Table2 στον Πίνακα1.COLUMN_NAME =ΠΙΝΑΚΑΣ2.COLUMN_NAME;

`` `

Παράδειγμα: Για να λάβετε όλους τους πελάτες και τις παραγγελίες τους (συμπεριλαμβανομένων των πελατών χωρίς παραγγελίες):

`` sql

Επιλέξτε Customer.Name, Orders.ORDERID, ORDERS.ORDERDATE, ORDERS.TOTALAMOUNT

Από πελάτες

Αριστερά εντολές συμμετοχής σε πελάτες.customerid =orders.customerid;

`` `

3. «Δεξιά ένωση» (ή «δεξιά εξωτερική ένωση»):

Επιστρέφει όλες τις σειρές από το δεξιό τραπέζι (`table2`), ακόμη και αν δεν υπάρχει αντιστοιχία στον αριστερό πίνακα (` table1`). Εάν δεν υπάρχει αντιστοιχία στον αριστερό τραπέζι, οι στήλες από τον αριστερό τραπέζι θα έχουν τιμές «null».

`` sql

Επιλέξτε Column_Names

Από τον Πίνακα1

Δεξιά Συμμετοχή Πίνακας2 στον Πίνακα1.COLUMN_NAME =ΠΙΝΑΚΑΣ2.COLUMN_NAME;

`` `

Παράδειγμα: (Λιγότερο συνηθισμένο, αλλά χρήσιμο σε συγκεκριμένα σενάρια) Αυτό είναι λειτουργικά ισοδύναμο με μια «αριστερή join» με τα τραπέζια που ανταλλάσσονται.

4. «Πλήρης εξωτερική ένωση»:

Επιστρέφει όλες τις σειρές και από τους δύο πίνακες. Εάν υπάρχει ένας αγώνας, επιστρέφεται η αντίστοιχη σειρά. Εάν δεν υπάρχει αντιστοιχία σε έναν πίνακα, οι στήλες από τον άλλο πίνακα θα έχουν τιμές «null». Το MySQL δεν υποστηρίζει άμεσα το `Full Outer Join ' . Πρέπει να το προσομοιώσετε χρησιμοποιώντας «ένωση» της «αριστερά join» και «right join».

`` sql

Επιλέξτε Column_Names

Από τον Πίνακα1

Αριστερά Join Table2 στον πίνακα1.column_name =table2.column_name

ΕΝΩΣΗ

Επιλέξτε Column_Names

Από τον Πίνακα1

Δεξιά Συμμετοχή Πίνακας2 στον Πίνακα1.COLUMN_NAME =ΠΙΝΑΚΑΣ2.COLUMN_NAME;

`` `

Επιλέγοντας τη σωστή συμμετοχή:

Η επιλογή του τύπου σύνδεσης εξαρτάται από τα δεδομένα που χρειάζεστε. `Το Inner Join 'είναι η πιο συχνή επιλογή, αλλά η` left join' και 'right join' είναι κρίσιμα όταν πρέπει να διατηρήσετε όλες τις σειρές από ένα από τα τραπέζια. Προσομοίωση `πλήρης εξωτερική join 'όταν χρειάζεστε όλες τις σειρές και από τα δύο τραπέζια. Θυμηθείτε να χρησιμοποιήσετε ψευδώνυμα (`table1`,` table2 ') για σαφήνεια και να αποφύγετε την ασάφεια όταν τα ονόματα των στηλών είναι τα ίδια και στους δύο πίνακες.

Συναφής σύστασή

Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα