mysql join tutorial inner
Μάθετε για διάφορες δηλώσεις MySQL JOIN όπως Inner, Outer, Cross, Left, Right και Self με παραδείγματα σύνταξης και προγραμματισμού:
Σε αυτό το σεμινάριο, θα μάθουμε για το MySQL JOIN και επίσης θα κατανοήσουμε τους διαφορετικούς τύπους συνδέσεων που υποστηρίζονται στο MySQL. ΕΓΓΡΑΦΕΙΤΕ στην απλούστερη μορφή του μπορεί να θεωρηθεί ως μέσο ανάκτησης / ενημέρωσης ή διαγραφής δεδομένων από πολλούς πίνακες σε ένα μόνο ερώτημα.
Έτσι, στην ουσία, το JOIN συνδυάζει 2 ή περισσότερους πίνακες για τη λήψη δεδομένων έναντι μιας δεδομένης συνθήκης.
Η MySQL υποστηρίζει επίσης άλλους διαφορετικούς τρόπους για την αναζήτηση δεδομένων από πολλαπλούς πίνακες χρησιμοποιώντας - υποερωτήματα και συνδυάζοντας πολλαπλά ερωτήματα χρησιμοποιώντας UNION κ.λπ.
Τι θα μάθετε:
- Κανονικοποιημένοι πίνακες
- ΣΥΝΔΕΣΗ MySQL
- Τύποι ΕΓΓΡΑΦΗΣ MySQL
- ΣΥΝΔΕΣΗ MySQL ΜΕ ΕΝΗΜΕΡΩΣΗ ΚΑΙ ΔΙΑΓΡΑΦΗ
- συμπέρασμα
Κανονικοποιημένοι πίνακες
Σε κανονικοποιημένες βάσεις δεδομένων MySQL, οι πίνακες έχουν σχέσεις με κοινές στήλες μέσω μέσων περιορισμών όπως ξένων κλειδιών.
Ας προσπαθήσουμε να το καταλάβουμε με τη βοήθεια ενός παραδείγματος - Ας υποθέσουμε ότι υπάρχουν 2 πίνακες, EMPLOYEE και EMPLOYEE_DEPARTMENT. Τώρα σε μια αποδιαμορφωμένη βάση δεδομένων - δηλ. Έναν ενιαίο πίνακα με όλες τις στήλες, πολλές πληροφορίες για παράδειγμα για το Τμήμα θα αντιγραφούν καθώς μπορεί να υπάρχουν πολλοί Υπάλληλοι που ανήκουν στο ίδιο Τμήμα.
Ως εκ τούτου, για να μειώσετε αυτές τις επαναλήψεις και να εξοικονομήσετε χώρο αποθήκευσης, οι βάσεις δεδομένων διατηρούνται σε κανονικοποιημένη κατάσταση.
Σε αυτήν την περίπτωση, θα αναφερθούμε στο Τμήμα με ένα πεδίο Department_id στον πίνακα EMPLOYEE και όλες οι σχετικές πληροφορίες που σχετίζονται με το Τμήμα - όπως Πληροφορίες Τμήματος, επικεφαλής τμήματος κ.λπ. μπορούν να διατηρηθούν ως μέρος του πίνακα EMPLOYEE_DEPARTMENT.
Με λίγα λόγια - EMPLOYEE και EMPLOYEE_DEPARTMENT συνδέονται μεταξύ τους μέσω του πεδίου Department_id, το οποίο ενεργεί ως ΞΕΝΟ ΚΛΕΙΔΙ για τον πίνακα EMPLOYEE και PRIMARY KEY για τον πίνακα EMPLOYEE_DEPARTMENT.
Η παρακάτω εικόνα είναι μια εικονική αναπαράσταση που έχει σχέση μεταξύ των δύο αυτών πινάκων μέσω του Περιορισμός ξένου κλειδιού
ΣΥΝΔΕΣΗ MySQL
Το MySQL JOIN χρησιμοποιείται για τη λήψη, ενημέρωση ή διαγραφή δεδομένων από 2 ή περισσότερους πίνακες σε δεδομένη συνθήκη. Ως εκ τούτου, το JOIN χρησιμοποιείται πάντα σε συνδυασμό με δηλώσεις SELECT, UPDATE ή DELETE
Σύνταξη της εντολής JOIN:
ΕΓΓΡΑΦΕΙΤΕ ΜΕ ΕΠΙΛΟΓΗ
SELECT {column_list} FROM tableName1 {joinType} tableName2 ON {joinCondition}
ΕΓΓΡΑΦΕΙΤΕ με ΕΝΗΜΕΡΩΣΗ
DELETE FROM tableName1 {joinType} tableName2 ON {joinCondition} WHERE {condition}
ΕΓΓΡΑΦΕΙΤΕ ΜΕ ΔΙΑΓΡΑΦΗ
UPDATE tableName1 SET targetColumn = targetValue FROM tableName1 {joinType} tableName2 ON {joinCondition} WHERE {condition}
Λάβετε υπόψη ότι το JOIN θα μπορούσε να εφαρμοστεί σε πολλούς πίνακες σε ένα μόνο ερώτημα, αλλά για απλότητα, ας προσπαθήσουμε πρώτα να κατανοήσουμε τη χρήση του Joins με 2 πίνακες.
Τα διάφορα μέρη της σύνταξης περιλαμβάνουν:
- {στήλη_ λίστα} - Αυτό αντιπροσωπεύει τα ονόματα των στηλών που θέλουμε να ανακτήσουμε ως αποτέλεσμα του ερωτήματός μας.
- {JoinType} - Αυτό δείχνει τον τύπο συμμετοχής που εφαρμόζουμε. Υπάρχουν ακόλουθοι διαφορετικοί τύποι ΣΥΝΔΕΣΕΩΝ που μπορούν να πάρουν δεδομένα:
- ΕΣΩΤΕΡΙΚΗ ΣΥΝΔΕΣΗ
- ΕΞΩ ΕΓΓΡΑΦΗ
- ΑΡΙΣΤΕΡΑ ΕΓΓΡΑΦΗ
- ΔΕΞΙΑ ΕΞΩ ΕΓΓΡΑΦΗ
- ΕΓΓΡΑΦΕΙΤΕ ΣΤΑΥΡΟΣ
Θα μάθουμε για όλους αυτούς τους διαφορετικούς τύπους MySQL JOINS σε προσεχείς ενότητες του σεμιναρίου.
- {JoinCondition} - Αυτές είναι οι συνθήκες στηλών που θα χρησιμοποιηθούν για το JOIN για την αναζήτηση και τη λήψη δεδομένων.
Στην επόμενη ενότητα, θα συζητήσουμε διαφορετικούς τύπους συνδυασμών που είναι διαθέσιμοι στη MySQL.
Τύποι ΕΓΓΡΑΦΗΣ MySQL
Προετοιμασία δεδομένων δειγμάτων
Για να χρησιμοποιήσουμε το JOINS, θα χρησιμοποιήσουμε 2 πίνακες Υπάλληλος και Υπάλληλος_Διαμερίσματα με τις παρακάτω λεπτομέρειες. Μπορείτε να χρησιμοποιήσετε / να ανατρέξετε σε έναν χρήσιμο ιστότοπο εδώ προκειμένου να δημιουργηθούν εικονικά δεδομένα για το σχήμα.
Ερωτήματα καταχώρησης για δημιουργία και εισαγωγή πίνακα:
CREATE TABLE IF NOT EXISTS Employee_Department ( name varchar(100), id INT NOT NULL auto_increment, PRIMARY KEY (id) ); CREATE TABLE IF NOT EXISTS Employee ( name varchar(100), id int not null auto_increment, address varchar(100), Department_id int, PRIMARY KEY (id), FOREIGN KEY (Department_id) references Employee_Department(id) ); INSERT INTO `Employee_Department` VALUES ('Information Technology','1'), ('HR','2'), ('Finance','3'), ('Accounting','4'), ('Housekeeping','5'), ('Security','6'), ('Support','7'), ('Contract Staff','8'), ('Sales','9'), ('Management','10'); INSERT INTO `Employee` VALUES ('Veniam','1','640 Damon Junction
East Mathew, NY 68818','3'), ('Molestiae','2','6658 Hollis Club
Ernamouth, TX 19743','10'), ('Officiis','3','59965 Mason Neck Apt. 985
Kareemborough, NV 85535','9'), ('Rerum','4','91067 Geovany Fort
Hanefort, WA 92863','6'), ('Et','5','7647 Reva Shores Suite 970
New Audrafort, OH 17846-5397','2'), ('Et','6','9419 Carmela Burg Apt. 687
Aimeebury, SD 32389-4489','8'), ('Laborum','7','6961 Weissnat Drive
Donnellyfort, MT 53947','6'), ('Cupiditate','8','117 Nellie Summit Suite 982
South Heavenfurt, CA 45675','8'), ('Eveniet','9','9086 Mariam Square Suite 698
South Dulce, MT 82861-3079','2'), ('Rerum','10','783 Goodwin Burgs Apt. 429
Willmsfort, UT 42820-1019','9'), ('Quis','11','42928 Ernesto Trail
East Jules, WV 87169-2851','1'), ('Esse','12','161 Kassulke Stravenue Apt. 937
Williamsonton, MS 62622','7'), ('Dolores','13','22811 Liliana Trail Apt. 890
South Ernesto, MT 04134','10'), ('Ut','14','981 Laron Overpass Suite 361
West Olahaven, FL 46982-7801','10'), ('Mollitia','15','411 Louisa Mill
South Maximefort, MA 04903','8'), ('Necessitatibus','16','2853 Jonathon Turnpike
Quitzonville, KY 54776','4'), ('Fugit','17','3647 Rosalinda Corner
Maureenstad, RI 96605','5'), ('Corporis','18','03559 Nicholas Circle Apt. 364
West Zettaberg, ID 58592-3447','8'), ('Neque','19','56111 Alysson Gateway Apt. 212
Leschbury, VT 90605-2306','8'), ('Velit','20','263 O'Keefe Avenue Apt. 884
West Missouri, IL 50303','6'),
ΕΣΩΤΕΡΙΚΗ ΣΥΝΔΕΣΗ
Το INNER JOIN είναι η πιο κοινή μορφή του JOIN και χρησιμοποιείται ευρέως. Σχεδόν όλοι σας θα έπρεπε να το έχετε χρησιμοποιήσει κάποια στιγμή ή άλλο. Ας δούμε τη σύνταξη και έπειτα μερικά δείγματα ερωτημάτων.
Σύνταξη:
SELECT {column_list} FROM tableName1 INNER JOIN tableName2 ON {joinCondition}
Ερώτημα για ανάκτηση ονομάτων τμήματος για όλους τους υπαλλήλους από τους πίνακες που δηλώθηκαν παραπάνω (Υπάλληλος και υπάλληλος_Τμήμα):
SELECT Employee.name as Employee_name, Employee_Department.name as Department_name FROM Employee INNER JOIN Employee_Department ON Employee.Department_id = Employee_Department.id
Ακολουθεί η έξοδος του παραπάνω ερωτήματος:
Ονομα υπαλλήλου | Ονομα τμήματος |
---|---|
πράγματα | Ασφάλεια |
Οι οποίοι | ΤΕΧΝΟΛΟΓΙΑ της ΠΛΗΡΟΦΟΡΙΑΣ |
Και | ΩΡ |
συμβαίνω | ΩΡ |
Εγώ | Χρηματοδότηση |
ανάγκες των | Λογιστική |
Φιτ | Νοικοκυριό |
σνακ | Ασφάλεια |
σας παρακαλούμε | Ασφάλεια |
Οτι | Υποστήριξη |
Και | Συμβασιούχοι υπάλληλοι |
προθυμία | Συμβασιούχοι υπάλληλοι |
ελαστικότητα | Συμβασιούχοι υπάλληλοι |
σώμα | Συμβασιούχοι υπάλληλοι |
Εκθεση | Συμβασιούχοι υπάλληλοι |
γραφεία | Εκπτώσεις |
πράγματα | Εκπτώσεις |
ενοχλήσεις | Διαχείριση |
Κόποι | Διαχείριση |
Εξω | Διαχείριση |
Σημείωση: Εδώ έχουμε χρησιμοποιήσει ψευδώνυμα με όνομα στήλης. Παράδειγμα: Employee.name as Employee_name - απλώς για να κάνετε τα αποτελέσματα πιο ευανάγνωστα και περιεκτικά.
Ας τροποποιήσουμε αυτό το ερώτημα για να πάρουμε μόνο τα ονόματα που ξεκινούν με το γράμμα «m».
SELECT Employee.name as Employee_name, Employee_Department.name as Department_name FROM Employee INNER JOIN Employee_Department ON Employee.Department_id = Employee_Department.id WHERE Employee.name like 'm%'
Παρακάτω είναι η έξοδος:
Ονομα υπαλλήλου | Ονομα τμήματος | |||||
---|---|---|---|---|---|---|
σνακ | 7 | 6961 Weissnat Drive Donnellyfort, MT 53947 | 6 | ΜΗΔΕΝΙΚΟ | ΜΗΔΕΝΙΚΟ | ΜΗΔΕΝΙΚΟ |
ενοχλήσεις | Διαχείριση | |||||
ελαστικότητα | Συμβασιούχοι υπάλληλοι |
Και τώρα ας κατανοήσουμε το INNER JOIN με τη βοήθεια του διαγράμματος Venn όπως παρακάτω. Οι προκύπτουσες σειρές που επιστρέφονται αποτελείται από τα αλληλεπικαλυπτόμενα δεδομένα μεταξύ των δύο πινάκων, όπως αντιστοιχούν στην συνθήκη JOIN.
ΕΞΩ ΕΓΓΡΑΦΗ
Το OUTER JOIN χρησιμοποιείται για τη λήψη δεδομένων από 2 ή περισσότερους πίνακες, με εξαίρεση τη συμπερίληψη μη αντιστοιχισμένων σειρών (ή σειρών με μηδενικά δεδομένα για τις στήλες που έχουν τεθεί σε ερώτηση).
Για να κατανοήσετε καλύτερα την Εξωτερική εγγραφή, προσθέστε έναν νέο πίνακα_επιλογές γραφείου με πεδία - αναγνωριστικό και διεύθυνση και προσθέστε μια νέα στήλη με την ονομασία «office_id» στον πίνακα υπαλλήλων που δημιουργήθηκε αρχικά.
Εδώ είναι τα ερωτήματα για το ίδιο:
CREATE TABLE IF NOT EXISTS office_locations ( address varchar(100), id INT NOT NULL auto_increment, PRIMARY KEY (id) ); ALTER TABLE Employee ADD COLUMN office_id int; INSERT INTO `office_locations`(address) VALUES('Bangalore'), ('Mumbai'), ('Seattle'), ('Santa Clara'); UPDATE Employee SET office_id=1 where id % 2 = 0; UPDATE Employee SET office_id=2 where id % 3 = 0;
Ανατρέξτε στο παρακάτω διάγραμμα Venn για να κατανοήσετε εικονικά τις ΕΞΩΤΕΡΙΚΕΣ ΣΥΝΔΕΣΕΙΣ:
Υπάρχουν 2 τύποι ΕΞΩΤΕΡΙΚΩΝ ΕΝΩΣΕΩΝ
α) ΑΡΙΣΤΕΡΑ ΕΓΓΡΑΦΗ
Όπως υποδηλώνει το όνομα, αυτός ο τύπος σύνδεσης θα πάρει όλες τις σειρές (συμπεριλαμβανομένων των τιμών NULL) από τον πίνακα που βρίσκεται στην αριστερή πλευρά του ερωτήματος JOIN. Με απλά λόγια, όλα τα αποτελέσματα / σειρές που δεν ταιριάζουν με την συνθήκη JOIN θα επιστραφούν με το αποτέλεσμα να έχει τιμές NULL για τον σωστό πίνακα.
Για παράδειγμα, χρειαζόμαστε δεδομένα τοποθεσίας για όλους τους υπαλλήλους - δηλαδή μάθετε ποια είναι η διεύθυνση γραφείου όλων των υπαλλήλων.
SELECT * from Employee LEFT OUTER JOIN office_locations ON Employee.office_id = office_locations.id
Έξοδος του παραπάνω ερωτήματος:
Ονομα | Ταυτότητα | Διεύθυνση | Τμήμα_id | Office_id | Διεύθυνση γραφείου | Ταυτότητα |
---|---|---|---|---|---|---|
Εγώ | 1 | 640 Damon Junction East Mathew, Νέα Υόρκη 68818 | 3 | ΜΗΔΕΝΙΚΟ | ΜΗΔΕΝΙΚΟ | ΜΗΔΕΝΙΚΟ |
ενοχλήσεις | δύο | 6658 Hollis Club Έρναμουθ, ΤΧ 19743 | 10 | 1 | Μπανγκαλόρ | 1 |
γραφεία | 3 | 59965 Mason Neck Apt. 985 Kareemborough, NV 85535 | 9 | δύο | Μουμπάι | δύο |
πράγματα | 4 | 91067 Geovany Fort) Hanefort, WA 92863 | 6 | 1 | Μπανγκαλόρ | 1 |
Και | 5 | 7647 Reva Shores Σουίτα 970 Νέο Audrafort, OH 17846-5397 | δύο | ΜΗΔΕΝΙΚΟ | ΜΗΔΕΝΙΚΟ | ΜΗΔΕΝΙΚΟ |
Και | 6 | 9419 Carmela Burg Apt. 687 Aimeebury, SD 32389-4489 | 8 | δύο | Μουμπάι | δύο |
προθυμία | 8 | 117 Nellie Summit Suite 982 South Heavenfurt, Καλιφόρνια 45675 | 8 | 1 | Μπανγκαλόρ | 1 |
συμβαίνω | 9 | 9086 Mariam Square Σουίτα 698 South Dulce, MT 82861-3079 | δύο | δύο | Μουμπάι | δύο |
πράγματα | 10 | 783 Goodwin Burgs Apt. 429 Willmsfort, UT 42820-1019 | 9 | 1 | Μπανγκαλόρ | 1 |
Οι οποίοι | έντεκα | 42928 Ernesto Trail East Jules, WV 87169-2851 | 1 | ΜΗΔΕΝΙΚΟ | ΜΗΔΕΝΙΚΟ | ΜΗΔΕΝΙΚΟ |
Οτι | 12 | 161 Kassulke Stravenue Apt. 937 Williamsonton, MS 62622 | 7 | δύο | Μουμπάι | δύο |
Κόποι | 13 | 22811 Liliana Trail Apt. 890 South Ernesto, MT 04134 | 10 | ΜΗΔΕΝΙΚΟ | ΜΗΔΕΝΙΚΟ | ΜΗΔΕΝΙΚΟ |
Εξω | 14 | 981 Laron Overpass Σουίτα 361 Δυτικό Olahaven, FL 46982-7801 | 10 | 1 | Μπανγκαλόρ | 1 |
ελαστικότητα | δεκαπέντε | 411 Louisa Mill South Maximefort, MA 04903 | 8 | δύο | Μουμπάι | δύο |
ανάγκες των | 16 | 2853 Jonathon Turnpike Quitzonville, ΚΥ 54776 | 4 | 1 | Μπανγκαλόρ | 1 |
ΦΕΥΓΑΤΟΣ | 17 | 3647 Κόρνερ Rosalinda Maureenstad, RI 96605 | 5 | ΜΗΔΕΝΙΚΟ | ΜΗΔΕΝΙΚΟ | ΜΗΔΕΝΙΚΟ |
σώμα | 18 | 03559 Nicholas Circle Apt. 364 West Zettaberg, ID 58592-3447 | 8 | δύο | Μουμπάι | δύο |
ή | 19 | 56111 Alysson Gateway Apt. 212 Leschbury, VT 90605-2306 | 8 | ΜΗΔΕΝΙΚΟ | ΜΗΔΕΝΙΚΟ | ΜΗΔΕΝΙΚΟ |
σας παρακαλούμε | είκοσι | 263 O'Keefe Avenue Apt. 884 Δυτικό Μισούρι, IL 50303 | 6 | 1 | Μπανγκαλόρ | 1 |
β) ΔΕΞΙΑ ΕΞΩ ΕΓΓΡΑΦΗ
Παρόμοια με το LEFT JOIN, σε αυτόν τον τύπο Συμμετοχής επιστρέφονται όλες οι εγγραφές που δεν ταιριάζουν από το δεξί πίνακα με τιμές NULL στις στήλες για τον αριστερό πίνακα.
πώς να χρησιμοποιήσετε την εντολή cut στο unix
Για παράδειγμα, με τους πίνακες δειγματοληψίας μας, εάν εκτελέσουμε το RIGHT JOIN με το ίδιο ερώτημα που χρησιμοποιήσαμε για το LEFT JOIN, θα λάβουμε τιμές NULL για τις πόλεις «Seattle» και «Santa Clara», καθώς δεν υπάρχουν σειρές στον πίνακα υπαλλήλων που έχουν οριστεί τοποθεσίας σε αυτές τις τιμές.
SELECT * from Employee RIGHT OUTER JOIN office_locations ON Employee.office_id = office_locations.id
Έξοδος του παραπάνω ερωτήματος:
Ονομα | Ταυτότητα | Διεύθυνση | Τμήμα_id | Office_id | Διεύθυνση γραφείου | Ταυτότητα |
---|---|---|---|---|---|---|
σας παρακαλούμε | είκοσι | 263 O'Keefe Avenue Apt. 884 Δυτικό Μισούρι, IL 50303 | 6 | 1 | Μπανγκαλόρ | 1 |
ενοχλήσεις | δύο | 6658 Hollis Club Έρναμουθ, ΤΧ 19743 | 10 | 1 | Μπανγκαλόρ | 1 |
πράγματα | 4 | 91067 Φρούριο Geovany Hanefort, WA 92863 | 6 | 1 | Μπανγκαλόρ | 1 |
προθυμία | 8 | 117 Nellie Summit Suite 982 South Heavenfurt, Καλιφόρνια 45675 | 8 | 1 | Μπανγκαλόρ | 1 |
πράγματα | 10 | 783 Goodwin Burgs Apt. 429 Willmsfort, UT 42820-1019 | 9 | 1 | Μπανγκαλόρ | 1 |
Εξω | 14 | 981 Laron Overpass Σουίτα 361 Δυτικό Olahaven, FL 46982-7801 | 10 | 1 | Μπανγκαλόρ | 1 |
ανάγκες των | 16 | 2853 Jonathon Turnpike Quitzonville, ΚΥ 54776 | 4 | 1 | Μπανγκαλόρ | 1 |
γραφεία | 3 | 59965 Mason Neck Apt. 985 Kareemborough, NV 85535 | 9 | δύο | Μουμπάι | δύο |
Και | 6 | 9419 Carmela Burg Apt. 687 Aimeebury, SD 32389-4489 | 8 | δύο | Μουμπάι | δύο |
συμβαίνω | 9 | 9086 Mariam Square Σουίτα 698 South Dulce, MT 82861-3079 | δύο | δύο | Μουμπάι | δύο |
Οτι | 12 | 161 Kassulke Stravenue Apt. 937 Williamsonton, MS 62622 | 7 | δύο | Μουμπάι | δύο |
ελαστικότητα | δεκαπέντε | 411 Louisa Mill South Maximefort, MA 04903 | 8 | δύο | Μουμπάι | δύο |
σώμα | 18 | 03559 Nicholas Circle Apt. 364 West Zettaberg, ID 58592-3447 | 8 | δύο | Μουμπάι | δύο |
ΜΗΔΕΝΙΚΟ | ΜΗΔΕΝΙΚΟ | ΜΗΔΕΝΙΚΟ | ΜΗΔΕΝΙΚΟ | ΜΗΔΕΝΙΚΟ | Σιάτλ | 3 |
ΜΗΔΕΝΙΚΟ | ΜΗΔΕΝΙΚΟ | ΜΗΔΕΝΙΚΟ | ΜΗΔΕΝΙΚΟ | ΜΗΔΕΝΙΚΟ | Σάντα Κλάρα | 4 |
Σημειώσεις / Συμβουλές:
- Σε άλλες σχεσιακές βάσεις δεδομένων όπως το Microsoft SQL - μπορεί να βρείτε έναν άλλο τύπο OUTER JOIN που ονομάζεται FULL OUTER JOIN. Δεν είναι παρά ένας συνδυασμός τόσο των εσωτερικών όσο και των εξωτερικών συνδέσεων - δηλαδή θα επιστρέψει τιμές NULL και από τους δύο πίνακες ΑΡΙΣΤΕΡΑ και ΔΕΞΙΑ.
- Για μια λεπτομερή συζήτηση μαζί με εξηγήσεις και παραδείγματα σχετικά με τις διαφορές μεταξύ INNER και OUTER JOINS, ανατρέξτε στο σεμινάριό μας εδώ.
- Στα ερωτήματα OUTER JOIN - το RIGHT OUTER JOIN και το LEFT OUTER JOIN θα μπορούσαν να καθοριστούν ως RIGHT JOIN και LEFT JOIN αντίστοιχα για περισσότερη αναγνωσιμότητα.
ΕΓΓΡΑΦΕΙΤΕ ΣΤΑΥΡΟΣ
Το CROSS JOIN ονομάζεται επίσης Καρτεσιανό Προϊόν. Επιστρέφει ένα αποτέλεσμα εναντίον των συνθηκών Συνδυασμού Συμμετοχής με ένα σύνολο σειρών m x n όπου τα m και n είναι ένας αριθμός αντίστοιχων σειρών στον πίνακα 1 και στον πίνακα 2 έναντι της συνθήκης JOIN.
Ας δούμε δείγμα ερωτήματος για ένα CROSS JOIN για λήψη αποτελεσμάτων από 2 πίνακες - Υπάλληλοι και θέσεις_ γραφείου
SELECT * from Employee CROSS JOIN office_locations
Η έξοδος που επιστρέφεται θα περιέχει συνολικά 80 σειρές που δεν είναι τίποτα άλλο από το προϊόν των σειρών και στους δύο πίνακες - Υπάλληλος (20) x θέσεις_ γραφείου (4) => 80
Παρακαλούμε να σημειώσετε ότι, ενώ κάνετε CROSS JOIN δεν χρειάζεται να καθορίσετε καμία συνθήκη JOIN όπως θα έχετε ούτως ή άλλως αποτέλεσμα m x n.
Σημειώσεις / Συμβουλές:
Δεν θα βρείτε πολλές φορές τη χρήση CROSS JOIN, καθώς δεν έχει συσχετιστεί πολλές περιπτώσεις χρήσης. Αυτή η Συμμετοχή εκτελείται γενικά όταν κάποιος ψάχνει να πάρει όλους τους δυνατούς συνδυασμούς με δεδομένα από 2 πίνακες.
Για παράδειγμα: Ας υποθέσουμε ότι είστε εξαγωγέας ενδυμάτων και έχετε 2 πίνακες - ο ένας έχει δεδομένα χρώματος και ο άλλος έχει δεδομένα μεγέθους. Εδώ, για να εξασφαλίσετε το απόθεμα, μπορείτε να εξετάσετε το ενδεχόμενο να κάνετε ένα CROSS JOIN και των δύο τραπεζιών για να διασφαλίσετε ότι όλα τα ενδύματα προμηθεύονται για όλους τους συνδυασμούς μεγεθών και χρωμάτων.
ΑΥΤΟ ΕΓΓΡΑΦΕΙΤΕ
Το SELF JOIN είναι ακριβώς όπως οποιοδήποτε άλλο ΕΣΩΤΕΡΙΚΟ ή ΕΞΩΤΕΡΙΚΟ ΣΥΜΜΕΤΟΧΗ, με τις μόνες εξαιρέσεις ότι και οι δύο πίνακες, δηλαδή ο πίνακας Συμμετοχή και Συμμετοχή είναι οι ίδιοι.
Γενικά χρησιμοποιούμε SELF Joins όταν θέλουμε να μάθουμε τη σχέση μεταξύ σειρών του ίδιου πίνακα. Για παράδειγμα, εάν ένας πίνακας έχει ταυτότητα υπαλλήλου και αναγνωριστικό υπαλλήλου επόπτη, μπορούμε να ενταχθούμε στον πίνακα εναντίον του αν θέλουμε να μάθουμε το όνομα του διαχειριστή με το όνομα του υπαλλήλου.
Λάβετε υπόψη ότι για SELF JOIN θα πρέπει να χρησιμοποιείτε ψευδώνυμα πίνακα, ώστε να μπορούν να καθοριστούν οι συνθήκες συμμετοχής με αναφορά στον σωστό πίνακα.
Ας δούμε ένα παράδειγμα εδώ:
SELECT e1.name as Employee1, e2.name as Employee2 from Employee e1 inner join Employee e2 on e1.office_id = e2.office_id where e1.Department_id = e2.Department_id
Εδώ, έχουμε ενταχθεί στον πίνακα 'Εργαζόμενοι' για να ανακαλύψουμε τα ονόματα των υπαλλήλων που έχουν την ίδια θέση γραφείου και τμήμα
Υπάλληλος | Υπάλληλος2 |
---|---|
Και | ελαστικότητα |
ενοχλήσεις | ενοχλήσεις |
ενοχλήσεις | Εξω |
Οφισίς | γραφεία |
πράγματα | πράγματα |
πράγματα | σας παρακαλούμε |
Και | Και |
Και | σώμα |
προθυμία | προθυμία |
συμβαίνω | συμβαίνω |
πράγματα | πράγματα |
Οτι | Οτι |
Εξω | ενοχλήσεις |
Εξω | Εξω |
ελαστικότητα | Και |
ελαστικότητα | ελαστικότητα |
ελαστικότητα | σώμα |
ανάγκες των | ανάγκες των |
σώμα | Και |
σώμα | ελαστικότητα |
σώμα | σώμα |
σας παρακαλούμε | πράγματα |
σας παρακαλούμε | σας παρακαλούμε |
Όπως είχαμε συζητήσει, το SELF JOIN έχει απλά τραπέζια Joining and Joined, μπορούμε να χρησιμοποιήσουμε SELF JOIN με INNER ή OUTER Joins.
ΣΥΝΔΕΣΗ MySQL ΜΕ ΕΝΗΜΕΡΩΣΗ ΚΑΙ ΔΙΑΓΡΑΦΗ
Μέχρι στιγμής, έχουμε συζητήσει το Joins με SELECT δηλώσεις. Ωστόσο, το Joins θα μπορούσε επίσης να χρησιμοποιηθεί με τις δηλώσεις MySQL DELETE και UPDATE.
Η σύνταξη παραμένει η ίδια εδώ. Ας δούμε μερικά παραδείγματα για να κατανοήσουμε καλύτερα την έννοια.
ΕΝΗΜΕΡΩΣΗ ΜΕ ΕΣΩΤΕΡΙΚΗ ΕΓΓΡΑΦΗ
Ας υποθέσουμε ότι θέλουμε να αλλάξουμε τη διεύθυνση στον πίνακα 'Υπάλληλος' στο όνομα της θέσης του γραφείου που υπάρχει στον πίνακα 'Θέσεις_ γραφείου'. Εδώ μπορούμε να χρησιμοποιήσουμε το INNER JOIN για να πάρουμε το όνομα της πόλης από το office_locations και να ενημερώσουμε το ίδιο ερώτημα.
Δείγμα ερωτήματος:
UPDATE Employee emp inner join office_locations off_loc on emp.office_id = off_loc.id set emp.address = off_loc.address;
Παρόμοια με αυτό, το UPDATE μπορεί να χρησιμοποιηθεί και με άλλους τύπους Joins, ανάλογα με την απαίτηση έναντι συγκεκριμένων περιπτώσεων χρήσης.
ΔΙΑΓΡΑΦΗ ΜΕ ΕΣΩΤΕΡΙΚΗ ΣΥΝΔΕΣΗ
Θα χρησιμοποιήσουμε πίνακες, Employee και Employee_Departments ως παράδειγμα. Ας υποθέσουμε ότι θέλουμε να διαγράψουμε όλες τις εγγραφές υπαλλήλων που ανήκουν στο τμήμα πωλήσεων και θέλουμε επίσης να διαγράψουμε την καταχώριση για το τμήμα πωλήσεων.
Δεδομένου ότι χρησιμοποιήσαμε το Department_id ως τον περιορισμό FOREIGN KEY, ως εκ τούτου πρέπει πρώτα να ΣΤΑΜΑΤΟΥΜΕ αυτόν τον περιορισμό πριν χρησιμοποιήσουμε το DELETE with JOIN για πολλούς πίνακες.
Ας μάθουμε πρώτα το όνομα του περιορισμού που δημιουργήθηκε για το Department_id στον πίνακα 'Υπάλληλος'. Απλώς εκτελέστε την εντολή για να λάβετε την εντολή CREATE TABLE.
show create table Employee
Θα λάβετε την έξοδο ως:
CREATE TABLE `Employee` ( `name` varchar(100) DEFAULT NULL, `id` int NOT NULL AUTO_INCREMENT, `address` varchar(100) DEFAULT NULL, `Department_id` int DEFAULT NULL, `office_id` int DEFAULT NULL, PRIMARY KEY (`id`), KEY `Department_id` (`Department_id`), CONSTRAINT `Employee_ibfk_1` FOREIGN KEY (`Department_id`) REFERENCES `Employee_Department` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
Τώρα μπορείτε να αναφέρετε το όνομα του περιορισμού FOREIGN_KEY από την παραπάνω εντολή που είναι «Employee_ibfk_1» και μπορούμε να χρησιμοποιήσουμε αυτό το όνομα για να αποθέσουμε αυτόν τον περιορισμό από τον πίνακα υπαλλήλων εκτελώντας την παρακάτω εντολή:
alter table Employee drop constraint Employee_ibfk_1
Τώρα ας εκτελέσουμε την εντολή DELETE με INNER JOIN
delete emp_dept, emp from Employee emp inner join Employee_Department emp_dept on emp.Department_id = emp_dept.id where emp.Department_id = 9
Η έξοδος αυτής της εντολής θα ήταν όχι. διαγραμμένων σειρών (και αυτό θα πρέπει να διαγράψει επιτυχώς τις σειρές και από τους δύο πίνακες που αναφέρονται στο ερώτημα JOIN παραπάνω)
δωρεάν λογισμικό δημιουργίας αντιγράφων ασφαλείας για τα Windows 7
Συχνές Ερωτήσεις
Ε # 1) Πόσοι τύποι συμμετοχών υπάρχουν στη MySQL;
Απάντηση: Η MySQL υποστηρίζει κυρίως 3 τύπους Joins. Αυτά είναι:
- Εσωτερική σύνδεση
- Εξωτερική Συμμετοχή - Αριστερή Εξωτερική Συμμετοχή και Δεξιά Εξωτερική Συμμετοχή
- Συμμετοχή
Ε # 2) Μπορώ να εγγραφώ μόνο για 2 τραπέζια;
Απάντηση: Οι συνδέσεις μπορούν να εφαρμοστούν σε 2 ή περισσότερα από 2 τραπέζια. Τις περισσότερες φορές το Joins χρησιμοποιείται για 2 τραπέζια.
Ακολουθεί ένα παράδειγμα μιας ΕΣΩΤΕΡΙΚΗΣ ΣΥΝΔΕΣΗΣ που χρησιμοποιεί 3 πίνακες:
select Employee.name as emp_name, Employee_Department.name as dept_name, office_locations.address as office_location from Employee inner join Employee_Department on Employee.Department_id = Employee_Department.id inner join office_locations on Employee.office_id = office_locations.id
Έξοδος του παραπάνω ερωτήματος:
emp_name | dept_name | τοποθεσία γραφείου |
---|---|---|
Εξω | Διαχείριση | Μπανγκαλόρ |
ενοχλήσεις | Διαχείριση | Μπανγκαλόρ |
πράγματα | Ασφάλεια | Μπανγκαλόρ |
Και | Συμβασιούχοι υπάλληλοι | Μουμπάι |
προθυμία | Συμβασιούχοι υπάλληλοι | Μπανγκαλόρ |
συμβαίνω | ΩΡ | Μουμπάι |
Οτι | Υποστήριξη | Μουμπάι |
ελαστικότητα | Συμβασιούχοι υπάλληλοι | Μουμπάι |
ανάγκες των | Λογιστική | Μπανγκαλόρ |
σώμα | Συμβασιούχοι υπάλληλοι | Μουμπάι |
σας παρακαλούμε | Ασφάλεια | Μπανγκαλόρ |
Q # 3) Πώς να χρησιμοποιήσετε τα ψευδώνυμα πίνακα με το Joins;
Απάντηση: Τα ψευδώνυμα είναι ένας τρόπος για να έχετε ένα προσωρινό όνομα για έναν πίνακα που θα αναφέρεται σε ένα ερώτημα. Δεδομένου ότι τα ερωτήματα JOIN είναι μερικές φορές περίπλοκα και για να κάνουν τα ερωτήματα ευανάγνωστα και να αποφεύγονται αναφορές σε ονόματα πινάκων για κάθε αναφορά στήλης, μπορούμε να συντομεύσουμε τα ονόματα με ψευδώνυμα.
Ας γράψουμε ένα ερώτημα INNER JOIN για τη λήψη δεδομένων για όλα τα ονόματα υπαλλήλων και τα ονόματα των τμημάτων από τους πίνακες Υπάλληλος και Τμήματα Εργαζομένων αντίστοιχα.
select emp.name as emp_name, Department.name as dept_name from Employee emp inner join Employee_Department as Department on emp.Department_id = Department.id
Στο παραπάνω ερώτημα, μπορείτε να δείτε ότι έχουμε ψευδώνει τον πίνακα υπαλλήλων ως emp και τον πίνακα Employee_Department ως τμήμα και χρησιμοποιήσαμε τα ψευδώνυμα για την αναφορά ονομάτων στηλών και συνθηκών συμμετοχής.
Q # 4) Τι είναι το CROSS JOIN;
Απάντηση: Το CROSS JOIN είναι ένας τύπος συμμετοχής όπου ο χρήστης θέλει να πάρει το καρτεσιανό προϊόν των πινάκων που συμμετέχουν.
Το αποτέλεσμα του CROSS JOIN είναι m x n όπου το m είναι ο αριθμός των ταιριασμένων γραμμών στον πρώτο πίνακα και το n είναι ο αριθμός των αντίστοιχων σειρών στον δεύτερο πίνακα.
Q # 5) Τρόπος απόκτησης ΠΛΗΡΗΣ ΕΓΓΡΑΦΗΣ στο MySQL
Απάντηση: Η MySQL δεν παρέχει FULL OUTER JOIN ως ξεχωριστό τύπο συμμετοχής σε αντίθεση με άλλες βάσεις δεδομένων όπως το Microsoft SQL. Ωστόσο, για να λάβουμε αποτελέσματα ως FULL OUTER JOIN, θα μπορούσαμε να συνδυάσουμε τα αποτελέσματα LEFT OUTER JOIN και RIGHT OUTER JOIN.
Για παράδειγμα, μπορούμε να πάρουμε στοιχεία υπαλλήλου και τμήματος και να εφαρμόσουμε ένωση στα αριστερά και τα δεξιά εξωτερικά μέλη.
Συνιστώμενη ανάγνωση = >> Χειριστής MySQL Union
συμπέρασμα
Σε αυτό το σεμινάριο, μάθαμε για διαφορετικούς τύπους Joins που είναι διαθέσιμοι στη MySQL.
Συζητήσαμε INNER, OUTER, CROSS και SELF Joins και είδαμε επίσης πώς θα μπορούσαν να χρησιμοποιηθούν τα ερωτήματα JOIN με δηλώσεις ΕΝΗΜΕΡΩΣΗΣ και ΔΙΑΓΡΑΦΗΣ για να έχουν αποτελεσματικά και βελτιστοποιημένα ερωτήματα για Συμμετέχοντα δεδομένα μεταξύ 2 ή περισσότερων από 2 πίνακες.
Το JOINS είναι ένα από τα πιο βασικά χρησιμοποιημένα ερωτήματα και όποιος χρησιμοποιεί ή μαθαίνει βάσεις δεδομένων SQL θα πρέπει να έχει πλήρη κατανόηση του SQL Joins.
Συνιστώμενη ανάγνωση
- Inner Join Vs Outer Join: Ακριβής διαφορά με παραδείγματα
- MySQL Δημιουργία εκπαιδευτικού προγράμματος με παραδείγματα κώδικα
- MySQL Delete Statement - Διαγραφή σύνταξης εντολών και παραδείγματα
- Εισαγωγή MySQL σε πίνακα - Εισαγωγή σύνταξης δήλωσης και παραδείγματα
- Tutorial MySQL Update Statement - Ενημέρωση σύνταξης ερωτημάτων και παραδείγματα
- Διαφορά μεταξύ SQL Vs MySQL Vs SQL Server (με παραδείγματα)
- Τι είναι το MySQL και γιατί χρησιμοποιείται;
- 20+ MongoDB Tutorial για αρχάριους: Δωρεάν μαθήματα MongoDB