mysql concat group_concat functions with examples
Αυτό το σεμινάριο εξηγεί πώς να χρησιμοποιήσετε το MySQL CONCAT με λειτουργίες Select και GROUP_CONCAT με σύνταξη και πρακτικά παραδείγματα:
Το CONCAT είναι μια συνάρτηση String που υποστηρίζεται από τη MySQL για να συνδυάσει ή να ενώσει δύο ή περισσότερες συμβολοσειρές μαζί και να επιστρέψει ως μία τιμή. Το όνομα CONCAT προέρχεται από τη συνένωση ρήματος, που σημαίνει ένωση 2 ή περισσότερων οντοτήτων μαζί.
Σε αυτό το σεμινάριο, θα μάθουμε τη χρήση του CONCAT με παραδείγματα ερωτημάτων και άλλες παραλλαγές της λειτουργίας CONCAT που παρέχονται από τη MySQL.
Τι θα μάθετε:
Συνάρτηση MySQL CONCAT
Σύνταξη:
Η σύνταξη της συνάρτησης CONCAT είναι απλή. Περιλαμβάνει απλώς μια λίστα των συμβολοσειρών που διαχωρίζονται με κόμμα και πρέπει να ενωθούν.
CONCAT(string1, string2, ------ stringN)
Τόσο οι τύποι εισόδου όσο και εξόδου που αναμένεται από τη συνάρτηση CONCAT είναι Strings. Ακόμα κι αν παρέχεται με αριθμούς, η τελική έξοδος θα είναι String.
Για παράδειγμα:
# 1) Με τύπους εισόδου ως συμβολοσειρές.
SELECT CONCAT('string1', 'string2'); //Output string1string2
#δύο) Με εισαγωγή ως αριθμούς / αριθμούς κινητής υποδιαστολής.
SELECT CONCAT(1,2); //Output 12 SELECT CONCAT(1.1234,2); //Output 1.12342
Χρήση CONCAT With SELECT Statements
Το CONCAT χρησιμοποιείται ευρύτερα παράλληλα με τα ερωτήματα SELECT, όπου μπορεί να συνδυάσει δεδομένα από 2 ή περισσότερες στήλες σε μία μόνο στήλη.
Ένα κλασικό παράδειγμα μπορεί να είναι, ας υποθέσουμε ότι έχουμε έναν πίνακα που έχει ξεχωριστές στήλες για τα πεδία FirstName και LastName. Έτσι, ενώ εμφανίζετε δεδομένα, ας υποθέσουμε ότι είναι η επιθυμία να εμφανιστεί το πλήρες όνομα αντί για το όνομα και το επώνυμο. Μπορούμε να χρησιμοποιήσουμε το CONCAT και να εμφανίσουμε τα επιλεγμένα δεδομένα ανάλογα.
Ας το δούμε σε δράση.
το καλύτερο δωρεάν εργαλείο βελτιστοποίησης για τα Windows 10
Αρχικά, δημιουργήστε έναν πίνακα μαθητών με πεδία - αναγνωριστικό, όνομα, επώνυμο, ηλικία, ημερομηνία γέννησης & τμήμα.
CREATE TABLE student (id INT PRIMARY KEY, fname VARCHAR(100), lname VARCHAR(100), age INT, dob DATE, department VARCHAR(100));
Εισαγάγετε ορισμένα εικονικά δεδομένα στον πίνακα.
INSERT INTO student values (1,'Darren', 'Still', 32, '1988-05-20', 'ENGINEERING'), (2,'Abhishek', 'Kumar', 28, '1992-05-20', 'ACCOUNTING'), (3,'Amit', 'Singh', 30, '1990-09-20', 'ENGINEERING'), (4,'Steven', 'Johnson', 40, '1980-05-21', 'HUMAN RESOURCES'), (5,'Kartik', 'Shamungam', 20, '2000-05-12', 'TRAINEE');
Τώρα, γράψτε ένα ερώτημα SELECT για να λάβετε ένα πλήρες όνομα ως συνδυασμένη συμβολοσειρά που συνδυάζει το όνομα και το επώνυμο.
SELECT CONCAT(fname,lname) as fullName from student
//Παραγωγή
πλήρες όνομα |
---|
Ντάρεν Στίλ |
AbhishekKumar |
AmitSingh |
Στίβεν Τζόνσον |
KartikShamungam |
Όπως μπορείτε να δείτε στην παραπάνω έξοδο, δεν υπάρχει απόσταση μεταξύ του ονόματος και του επωνύμου, γεγονός που το καθιστά δυσανάγνωστο. Μπορούμε να προσθέσουμε διαστήματα ενημερώνοντας τη συνάρτηση CONCAT για να έχουμε έναν επιπλέον χαρακτήρα διαστήματος ως συμβολοσειρά που θα συνδυαστεί.
SELECT CONCAT(fname, ' ', lname) as fullName from student
Αυτό θα εξασφάλιζε ότι με κάθε καταχώριση, θα έχετε επιπλέον απόσταση μεταξύ τους.
Χρήση CONCAT με GROUP
Η MySQL παρέχει μια άλλη λειτουργία που ονομάζεται GROUP_CONCAT.
Είναι παρόμοιο με το CONCAT, αλλά διαφέρει στον τρόπο με τον οποίο το CONCAT χρησιμοποιείται για το συνδυασμό τιμών μεταξύ των στηλών, ενώ η συνάρτηση GROUP_CONCAT χρησιμοποιείται ως επί το πλείστον για τη συνένωση τιμών μεταξύ γραμμών.
Σύνταξη MySQL GROUP_CONCAT
SELECT col1, col2, ..., colN GROUP_CONCAT ( (DISTINCT) col_name1 (ORDER BY clause) (SEPARATOR str_val) ) FROM table_name GROUP BY col_name2;
Έτσι, στη συνάρτηση GROUP_CONCAT, μπορείτε να δείτε:
- col_name: Αυτή είναι η στήλη με την οποία θέλετε να συνενώσετε. Υπάρχει μια προαιρετική ρήτρα DISTINCT για την αποφυγή επανάληψης τιμών.
- ΤΑΞΙΝΟΜΗΣΗ ΚΑΤΑ: Η ρήτρα ORDER BY χρησιμοποιείται για τον καθορισμό της παραγγελίας εντός της συνδυασμένης λίστας και είναι προαιρετική.
- ΔΙΑΧΩΡΙΣΤΗΣ: Αυτή είναι και πάλι μια προαιρετική ρήτρα που μπορεί να χρησιμοποιηθεί για τον καθορισμό ενός προσαρμοσμένου διαχωριστή μεταξύ των συνδυασμένων τιμών. Από προεπιλογή, το κόμμα (,) είναι το διαχωριστικό.
Παραδείγματα MySQL GROUP_CONCAT
Στο παραπάνω παράδειγμα πίνακα μαθητών, ας υποθέσουμε ότι θέλουμε μάθετε μια λίστα με συνενωμένα τμήματα .
SELECT GROUP_CONCAT(department) as departments FROM student //Output ENGINEERING,ACCOUNTING,ENGINEERING,HUMAN RESOURCES,TRAINEE
Στο παραπάνω ερώτημα,
- Η έξοδος περιέχει μια λίστα διαχωρισμένη με κόμμα για όλα τα τμήματα που είναι διαθέσιμα στη στήλη τμήματος.
- Επίσης, υπάρχουν επαναλαμβανόμενες τιμές ( Για παράδειγμα, ΜΗΧΑΝΙΚΗ) καθώς δεν έχουμε προσδιορίσει μια ρήτρα DISTINCT.
Ας δοκιμάσουμε το ίδιο παράδειγμα με τη ρήτρα DISTINCT:
SELECT GROUP_CONCAT(DISTINCT department) as departments FROM student //Output ACCOUNTING,ENGINEERING,HUMAN RESOURCES,TRAINEE
Αυτό θα επέστρεφε απλώς τις ξεχωριστές τιμές της στήλης τμήματος.
Τώρα προσθέστε έναν προσαρμοσμένο διαχωριστή ως ρήτρα «|» και ORDER BY για να ταξινομηθούν τα ονόματα των τμημάτων σε αύξουσα σειρά
SELECT GROUP_CONCAT(DISTINCT department separator ' | ') as departments FROM student //Output ACCOUNTING | ENGINEERING | HUMAN RESOURCES | TRAINEE
Έτσι, στο παραπάνω ερώτημα,
- Τα ονόματα των τμημάτων ταξινομούνται με αύξουσα σειρά.
- Δεν επιστρέφονται επαναλαμβανόμενες τιμές.
- Το διαχωριστικό αλλάζει από ',' σε '| «.
Ας δούμε ένα άλλο παράδειγμα για να καταγράψετε τις συνδυασμένες τιμές των μαθητών σε κάθε τμήμα.
Εδώ δεν θα θέλαμε τόσο διαφορετικό όσο 2 μαθητές σε ένα τμήμα μπορεί να έχουν το ίδιο όνομα.
SELECT department, GROUP_CONCAT(fname ORDER BY fname ASC SEPARATOR ' | ') AS students FROM student GROUP BY department
// Έξοδος
τμήμα | Φοιτητές |
---|---|
ΛΟΓΙΣΤΙΚΗ | Abhishek |
ΜΗΧΑΝΙΚΗ | Amit | Ντάρεν |
ΑΝΘΡΩΠΙΝΟ ΔΥΝΑΜΙΚΟ | Στίβεν |
ΕΚΠΑΙΔΕΥΟΜΕΝΟΣ | Καρτίκ |
Συνδυάζοντας CONCAT και GROUP_CONCAT
Στο παραπάνω παράδειγμα, ας υποθέσουμε ότι θέλουμε να δείξουμε τις ΣΥΝΟΠΤΙΚΕΣ τιμές ονόματος και επώνυμου μαζί με κάθε τμήμα.
Για να το επιτύχουμε αυτό, μπορούμε να χρησιμοποιήσουμε το CONCAT μέσα στην εντολή GROUP_CONCAT.
Ας το δούμε σε δράση παρακάτω:
SELECT department, GROUP_CONCAT(CONCAT(fname, ' ', lname) order by fname asc SEPARATOR ' | ') as students from student group by department
//Παραγωγή
τμήμα | Φοιτητές |
---|---|
ΛΟΓΙΣΤΙΚΗ | Abhishek kumar |
ΜΗΧΑΝΙΚΗ | Αμιτ Σινγκ | Ντάρεν Στίλ |
ΑΝΘΡΩΠΙΝΟ ΔΥΝΑΜΙΚΟ | Στίβεν Τζόνσον |
ΕΚΠΑΙΔΕΥΟΜΕΝΟΣ | Kartik shamungam |
Χειρισμός τιμών NULL με CONCAT
Το CONCAT αναμένει ορίσματα String και επιστρέφει την έξοδο ως String.
Εάν οποιαδήποτε είσοδος στη συνάρτηση CONCAT είναι NULL, τότε η έξοδος θα είναι επίσης NULL.
SELECT CONCAT('string1','string2', NULL); //Output NULL
Για να χειριστείτε τις τιμές NULL, μπορείτε να χρησιμοποιήσετε μια δήλωση ifNull στη συνάρτηση CONCAT, η οποία θα εξασφάλιζε μια προεπιλεγμένη ή κενή τιμή σε περίπτωση της τιμής NULL από τη στήλη.
Ας υποθέσουμε ότι έχουμε 2 συμβολοσειρές και 1 τιμή NULL στο CONCAT, όπως το παραπάνω παράδειγμα.
SELECT CONCAT('string1','string2', ifNull(NULL,'hello')); //Output string1string2hello
Στο παραπάνω ερώτημα, έχουμε προσθέσει μια συνάρτηση ifNull που περιβάλλει την τιμή NULL (ή μια στήλη που θα μπορούσε να είναι NULL) - εάν η αντιστοίχιση NULL είναι επιτυχής, τότε θα επιστρέψει «γεια» αλλιώς την πραγματική τιμή της στήλης.
Έτσι, στην έξοδο, μπορείτε να δείτε τη συμβολοσειρά NULL, εκτυπώνεται το «γεια».
Συχνές Ερωτήσεις
Ε # 1) Πώς μπορώ να συγχωνεύσω στήλες στη MySQL;
Απάντηση: Η MySQL παρέχει μια συνάρτηση CONCAT για να συνδυάσει ή να συγχωνεύσει 2 ή περισσότερες στήλες από έναν ή περισσότερους πίνακες και να επιστρέψει τις συγχωνευμένες τιμές στην έξοδο.
Ε # 2) Πού και πότε πρέπει να χρησιμοποιήσω τη μέθοδο concat στο MySQL;
Απάντηση: Η μέθοδος CONCAT χρησιμοποιείται γενικά έναντι της εμφάνισης των αποτελεσμάτων ερωτήματος όπου θα θέλατε να ενώσετε 2 ή περισσότερες στήλες και να τις αντιπροσωπεύσετε ως μία στήλη.
Για παράδειγμα, ας υποθέσουμε ότι έχετε έναν πίνακα που περιέχει το όνομα και το επίθετο ως ξεχωριστές στήλες και θέλετε να τα εμφανίσετε ως μία οντότητα που ονομάζεται πλήρες όνομα - τότε μπορείτε να χρησιμοποιήσετε τη συνάρτηση CONCAT για να συγχωνεύσετε τις τιμές της στήλης ονόματος και επώνυμου και να τις εμφανίσετε μαζί ως μία στήλη.
Q # 3) Τι είναι το MySQL GROUP_CONCAT;
Απάντηση: Παρόμοια με το CONCAT, το MySQL GROUP_CONCAT χρησιμοποιείται επίσης για τη συνένωση τιμών σε έναν πίνακα. Η διαφορά εδώ είναι, ενώ το CONCAT χρησιμοποιείται για το συνδυασμό τιμών σε όλες τις στήλες, το GROUP_CONCAT σάς δίνει τη δυνατότητα να συνδυάζετε τιμές μεταξύ γραμμών.
Είναι επίσης σημαντικό να σημειωθεί ότι τόσο το GROUP_CONCAT όσο και το CONCAT μπορούν να συνδυαστούν για να επιστρέψουν τα επιθυμητά αποτελέσματα.
Το GROUP_CONCAT χρησιμοποιείται γενικά σε σενάρια όπου θα θέλατε να ομαδοποιήσετε ή να συνδυάσετε τιμές σε σειρές. Για παράδειγμα - έχετε έναν πίνακα προϊόντων με όνομα και κατηγορία προϊόντος και θέλετε να απαριθμήσετε όλα τα προϊόντα σε μια δεδομένη κατηγορία ως τιμές διαχωρισμένες με κόμμα - τότε μπορείτε να χρησιμοποιήσετε το GROUP_CONCAT.
Ερώτηση:
SELECT categoryName, GROUP_CONCAT(itemName) AS itemList FROM products GROUP BY categoryName
Q # 4) Πώς μπορώ να καθορίσω ένα διαχωριστικό χρησιμοποιώντας την εντολή CONCAT;
Απάντηση: Με το CONCAT, μπορείτε να ορίσετε το διαχωριστικό ως ξεχωριστή συμβολοσειρά που θα συνδυαστεί.
Για παράδειγμα: Ας υποθέσουμε ότι θέλετε να χρησιμοποιήσετε το '|' ως διαχωριστικό και στη συνέχεια στην εντολή CONCAT μπορείτε να καθορίσετε αυτήν τη συμβολοσειρά μεταξύ των ονομάτων στηλών που συνενώνετε.
SELECT CONCAT(fname, '| ', lname) as fullName from student
Ε # 5) Ποια είναι η διαφορά μεταξύ των εντολών CONCAT και CONCAT_WS;
Απάντηση: Το CONCAT_WS είναι μια άλλη παραλλαγή του CONCAT που παρέχεται από τη MySQL, η οποία επιτρέπει στον χρήστη να καθορίσει ένα διαχωριστικό για τις στήλες που συνενώνονται.
Αυτό προτιμάται από το CONCAT σε περιπτώσεις όπου θέλετε να συγχωνεύσετε περισσότερο αριθμό στηλών και να χρησιμοποιήσετε το ίδιο διαχωριστικό για όλες τις στήλες που είναι συνδυασμένες.
Παράδειγμα: Ας υποθέσουμε ότι υπάρχει ένας μαθητής πίνακα με πεδία - όνομα, όνομα και διεύθυνση.
Τώρα θέλουμε να συνδυάσουμε και τα τρία αυτά πεδία και να διαχωρίσουμε με '|'.
Χρησιμοποιώντας CONCAT , πρέπει να καθορίσουμε το διαχωριστικό ως ξεχωριστή συμβολοσειρά για συνένωση.
SELECT CONCAT(fname, '|', lname, '|', address) as mergedColumn from student
Ενώ με CONCAT_WS απλά θα πρέπει να καθορίσετε το διαχωριστικό μία φορά.
SELECT CONCAT_WS('|', fname, lname, address) as mergedColumn from student
συμπέρασμα
Σε αυτό το σεμινάριο, μάθαμε για τη λειτουργία MySQL CONCAT και τη χρήση του. Αυτή η συνάρτηση είναι γενικά πολύ χρήσιμη κατά την εμφάνιση αποτελεσμάτων ερωτήματος για συγχώνευση τιμών σε διαφορετικές στήλες.
Μάθαμε επίσης για 2 διαφορετικές παραλλαγές της συνάρτησης CONCAT - μία συνενώνει με διαχωριστικό χρησιμοποιώντας CONCAT_WS και άλλη συνενώνει τιμές σειρών χρησιμοποιώντας τη συνάρτηση MySQL GROUP_CONCAT.
Συνιστώμενη ανάγνωση
- MySQL JOIN Tutorial: Εσωτερικό, εξωτερικό, σταυρό, αριστερά, δεξιά και μόνος
- MySQL UNION - Πλήρης οδηγός με παραδείγματα Union
- Μορφή ημερομηνίας MySQL και συναρτήσεις χρονικής σήμανσης με παραδείγματα
- Εισαγωγή MySQL σε πίνακα - Εισαγωγή σύνταξης δήλωσης και παραδείγματα
- Tutorial MySQL Update Statement - Ενημέρωση σύνταξης ερωτημάτων και παραδείγματα
- MySQL Δημιουργία εκπαιδευτικού προγράμματος με παραδείγματα κώδικα
- C # Λειτουργίες / Μέθοδοι Εκμάθηση με παραδείγματα κώδικα