Ένας βασικός οδηγός για αρχάριους

Θέλετε να συνδέσετε δύο ή περισσότερες στήλες συμβολοσειρών στην SQL; Μάθετε πώς να χρησιμοποιείτε τη συνάρτηση SQL CONCAT για τη σύνδεση συμβολοσειρών.

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

Για παράδειγμα, μπορείτε να επιλέξετε ένα πεδίο full_name συνενώνοντας τα πεδία first_name και last_name. Ομοίως, μπορείτε να λάβετε την πλήρη_διεύθυνση συνενώνοντας το δρόμο, την πόλη, την πολιτεία και άλλα απαραίτητα πεδία.

Στην SQL, μπορείτε να χρησιμοποιήσετε τη συνάρτηση CONCAT για να συνδέσετε συμβολοσειρές. Σε αυτόν τον οδηγό, θα εξετάσουμε:

  • Η σύνταξη της συνάρτησης SQL CONCAT
  • Παραδείγματα χρήσης
  • Χειρισμός τιμών NULL σε μία ή περισσότερες στήλες κατά τη συνένωση

Ας αρχίσουμε!

Σύνταξη της συνάρτησης SQL CONCAT

Η σύνταξη για τη χρήση της συνάρτησης SQL CONCAT είναι η εξής:

CONCAT(string_1, string_2, ..., string_n);

Εδώ, string_1, string_2, …, string n δηλώνουν τις συμβολοσειρές που πρόκειται να συνδεθούν. Αυτά μπορεί να είναι συμβολοσειρές ή στήλες ή συνδυασμός και των δύο.

Συνένωση String Literals με CONCAT

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

Εδώ συνενώνουμε τις συμβολοσειρές ‘Hello,’ και ‘world!’ ως η συμβολοσειρά χαιρετισμού:

SELECT CONCAT('Hello, ', 'world!') AS greeting;

Η εκτέλεση του παραπάνω ερωτήματος θα σας δώσει την ακόλουθη έξοδο:

+---------------+
| greeting      |
+---------------+
| Hello, world! |
+---------------+
1 row in set (0.00 sec)

Στην πράξη, ωστόσο, μπορεί να θέλετε να συνδέσετε τις απαιτούμενες στήλες σε έναν πίνακα βάσης δεδομένων και όχι σε κυριολεκτικές συμβολοσειρές. Ας κωδικοποιήσουμε λοιπόν μερικά παραδείγματα χρησιμοποιώντας τη συνάρτηση CONCAT στην SQL.

Πώς να συνδέσετε στήλες στην SQL

Στη συνέχεια, ας προχωρήσουμε στην αναζήτηση ενός πίνακα βάσης δεδομένων.

  8 Καλύτερες Πλατφόρμα Φιλοξενίας Διακομιστών Μηχανικών Διαστήματος για Όλους

📑 Όλα τα δείγματα ερωτημάτων σε αυτό το σεμινάριο εκτελέστηκαν σε ένα MySQL πίνακα βάσης δεδομένων. Αλλά μπορείτε επίσης να ακολουθήσετε ένα άλλο RDBMS της επιλογής σας.

Δημιουργία πίνακα βάσεων δεδομένων με εγγραφές

Ας δημιουργήσουμε μια βάση δεδομένων που μπορούμε να χρησιμοποιήσουμε:

CREATE DATABASE db1;
use db1;

Ας δημιουργήσουμε έναν πίνακα υπαλλήλων στη βάση δεδομένων db1. Για να το κάνετε αυτό, εκτελέστε τη δήλωση CREATE TABLE με τις ακόλουθες στήλες και τους αντίστοιχους τύπους δεδομένων:

CREATE TABLE employees (
    ID INT AUTO_INCREMENT PRIMARY KEY,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    street VARCHAR(100),
    city VARCHAR(50),
    state VARCHAR(2),
    username VARCHAR(20)
);

Στη συνέχεια, ας εισαγάγουμε μερικές εγγραφές στον πίνακα υπαλλήλων:

INSERT INTO employees (first_name, last_name, street, city, state, username) VALUES
    ('John', 'Smith', '123 Main St', 'New York', 'NY', 'john123'),
    ('Alice', 'Johnson', '456 Elm St', 'Boston', 'MA', 'alice456'),
    ('Bob', 'Williams', '789 Oak St', 'Chicago', 'IL', 'bob789'),
    ('Mary', 'Davis', '321 Pine St', 'Houston', 'TX', 'mary456'),
    ('James', 'Brown', '555 Cedar St', 'Seattle', 'WA', 'james789'),
    ('Emily', 'Jones', '777 Maple St', 'Atlanta', 'GA', 'emily123'),
    ('Michael', 'Miller', '999 Birch St', 'Miami', 'FL', 'michael456'),
    ('Jessica', 'Wilson', '111 Walnut St', 'Dallas', 'TX', 'jessica789'),
    ('William', 'Taylor', '222 Cherry St', 'Denver', 'CO', 'william123'),
    ('Sarah', 'Martinez', '444 Pine St', 'Phoenix', 'AZ', 'sarah456');

Παράδειγμα 1: Εμφάνιση πλήρων ονομάτων

Ως πρώτο παράδειγμα, ας συνδέσουμε τις στήλες first_name και last_name για να λάβουμε το πλήρες_όνομα. Για να το κάνουμε αυτό, μπορούμε να χρησιμοποιήσουμε τη συνάρτηση SQL CONCAT στο ερώτημα SELECT όπως φαίνεται:

SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM employees;

Θα πρέπει να λάβετε την ακόλουθη έξοδο:

+----------------+
| full_name      |
+----------------+
| John Smith     |
| Alice Johnson  |
| Bob Williams   |
| Mary Davis     |
| James Brown    |
| Emily Jones    |
| Michael Miller |
| Jessica Wilson |
| William Taylor |
| Sarah Martinez |
+----------------+
10 rows in set (0.00 sec)

Εκτός από το first_name και το last_name, παρατηρήστε ότι χρησιμοποιήσαμε επίσης χώρο ως διαχωριστικό—καθορίζεται από την κυριολεκτική συμβολοσειρά ” “.

Παράδειγμα 2: Κατασκευάστε διευθύνσεις

Τώρα ας πάρουμε ένα άλλο παράδειγμα.

Έχουμε τις στήλες του δρόμου, της πόλης και του κράτους στον πίνακα των εργαζομένων. Μπορούμε λοιπόν να επιλέξουμε την πλήρη_διεύθυνση συνενώνοντας αυτά τα τρία πεδία με κόμμα ως διαχωριστικό:

SELECT CONCAT(street, ', ', city, ', ', state) AS full_address FROM employees;

Εδώ είναι η έξοδος:

+---------------------------+
| full_address              |
+---------------------------+
| 123 Main St, New York, NY |
| 456 Elm St, Boston, MA    |
| 789 Oak St, Chicago, IL   |
| 321 Pine St, Houston, TX  |
| 555 Cedar St, Seattle, WA |
| 777 Maple St, Atlanta, GA |
| 999 Birch St, Miami, FL   |
| 111 Walnut St, Dallas, TX |
| 222 Cherry St, Denver, CO |
| 444 Pine St, Phoenix, AZ  |
+---------------------------+
10 rows in set (0.00 sec)

Παράδειγμα 3: Δημιουργία διευθύνσεων URL προφίλ

Θυμηθείτε ότι έχουμε ένα πεδίο ονόματος χρήστη στον πίνακα υπαλλήλων.

  Πώς να αποκτήσετε έναν αριθμό Google Voice

Ας υποθέσουμε ότι έχετε έναν ριζικό τομέα https://www.example.com/ και τα προφίλ χρηστών βρίσκονται στη διεύθυνση https://www.example.com/user. Μπορείτε να δημιουργήσετε το profile_url χρησιμοποιώντας τη συνάρτηση CONCAT ως εξής:

SELECT CONCAT('https://www.example.com/user/', username) AS profile_url 
FROM employees;

Όπως φαίνεται, λαμβάνουμε τις διευθύνσεις URL προφίλ για όλους τους υπαλλήλους:

+-----------------------------------------+
| profile_url                             |
+-----------------------------------------+
| https://www.example.com/user/john123    |
| https://www.example.com/user/alice456   |
| https://www.example.com/user/bob789     |
| https://www.example.com/user/mary456    |
| https://www.example.com/user/james789   |
| https://www.example.com/user/emily123   |
| https://www.example.com/user/michael456 |
| https://www.example.com/user/jessica789 |
| https://www.example.com/user/william123 |
| https://www.example.com/user/sarah456   |
+-----------------------------------------+
10 rows in set (0.00 sec)

Χειρισμός NULL Τιμών

Στον πίνακα υπαλλήλων, όλες οι εγγραφές έχουν όλα τα πεδία. Τι γίνεται όμως αν έχετε ένα ή περισσότερα πεδία με τιμές NULL;

Ας πάρουμε ένα παράδειγμα για αυτήν την περίπτωση. Εδώ ενημερώνουμε την εγγραφή που αντιστοιχεί στο ID = 2 για να ορίσουμε τη στήλη οδού σε NULL:

UPDATE employees
SET street = NULL
WHERE ID = 2; -- Update the record with ID 2
Query OK, 1 row affected (0.05 sec)
Rows matched: 1  Changed: 1  Warnings: 0

Τώρα χρησιμοποιούμε CONCAT για να επιλέξουμε την πλήρη_διεύθυνση:

SELECT CONCAT(street, ', ', city, ', ', state) AS full_address FROM employees;

Εδώ είναι η έξοδος:

+---------------------------+
| full_address              |
+---------------------------+
| 123 Main St, New York, NY |
| NULL                      |
| 789 Oak St, Chicago, IL   |
| 321 Pine St, Houston, TX  |
| 555 Cedar St, Seattle, WA |
| 777 Maple St, Atlanta, GA |
| 999 Birch St, Miami, FL   |
| 111 Walnut St, Dallas, TX |
| 222 Cherry St, Denver, CO |
| 444 Pine St, Phoenix, AZ  |
+---------------------------+
10 rows in set (0.00 sec)

Σημειώστε ότι το δεύτερο στοιχείο στο σύνολο αποτελεσμάτων είναι NULL.

  11 Καλύτερη Πλατφόρμα Δεδομένων Πελατών για Αναπτυσσόμενη Επιχείρηση

Αλλά θα θέλαμε το αποτέλεσμα να είναι η συνένωση της πόλης και των στηλών της πολιτείας για να έχουμε μια γενική ιδέα της διεύθυνσης. Όταν έχετε τέτοιες τιμές NULL, μπορείτε να χρησιμοποιήσετε το CONCAT_WS ως εναλλακτική στη συνάρτηση CONCAT. Ας δούμε πώς λειτουργεί.

Χρήση CONCAT_WS για χειρισμό NULL τιμών κατά τη συνένωση

Το CONCAT_WS είναι μια εναλλακτική του CONCAT που μπορεί να χρησιμοποιηθεί εάν υποψιάζεστε ότι ένα ή περισσότερα πεδία περιέχουν τιμές NULL.

Μπορείτε να χρησιμοποιήσετε τη συνάρτηση CONCAT_WS ως εξής:

CONCAT_WS(separator, string_1, string_2,..., string_n)

Τώρα εκτελέστε το ακόλουθο ερώτημα SELECT:

SELECT CONCAT_WS(', ', street, city, state) AS full_address FROM employees;

Θα λάβετε την ακόλουθη έξοδο:

+---------------------------+
| full_address              |
+---------------------------+
| 123 Main St, New York, NY |
| Boston, MA                |
| 789 Oak St, Chicago, IL   |
| 321 Pine St, Houston, TX  |
| 555 Cedar St, Seattle, WA |
| 777 Maple St, Atlanta, GA |
| 999 Birch St, Miami, FL   |
| 111 Walnut St, Dallas, TX |
| 222 Cherry St, Denver, CO |
| 444 Pine St, Phoenix, AZ  |
+---------------------------+
10 rows in set (0.01 sec)

Όπως φαίνεται, για το δεύτερο στοιχείο του συνόλου αποτελεσμάτων, παίρνουμε ‘Boston MA’ καθώς το πεδίο δρόμου είναι NULL.

⚠ Όταν χρησιμοποιείτε CONCAT_WS, απαιτείται να καθορίσετε το διαχωριστικό. Εάν δεν καθορίσετε το διαχωριστικό, τότε το αποτέλεσμα είναι NULL εάν μία ή περισσότερες στήλες είναι NULL (παρόμοιο με το CONCAT).

Τυλίγοντας

Ας δούμε τι μάθαμε:

  • Όταν ρωτάτε έναν πίνακα βάσης δεδομένων για να ανακτήσετε δεδομένα, μπορεί να θέλετε να συνδέσετε πολλές στήλες συμβολοσειρών για να λάβετε πιο χρήσιμα και εύκολα ερμηνευτικά αποτελέσματα ερωτημάτων. Για να το κάνετε αυτό, μπορείτε να χρησιμοποιήσετε τη συνάρτηση CONCAT στην SQL με τη σύνταξη CONCAT(string_1, string_2, …, string_n).
  • Μπορείτε να συνδέσετε κυριολεκτικά συμβολοσειράς, στήλες ή συνδυασμό και των δύο. Ωστόσο, εάν υπάρχουν μία ή περισσότερες τιμές NULL, το αποτέλεσμα για τη συγκεκριμένη εγγραφή είναι NULL. Για να το χειριστείτε αυτό, μπορείτε να χρησιμοποιήσετε το CONCAT_WS με τη σύνταξη CONCAT_WS (διαχωριστικό, συμβολοσειρά_1, συμβολοσειρά_2, …, συμβολοσειρά_n).
  • Το CONCAT_WS χειρίζεται τις τιμές NULL με μεγαλύτερη χάρη συνενώνοντας μόνο εκείνες τις συμβολοσειρές που υπάρχουν χρησιμοποιώντας το καθορισμένο διαχωριστικό.

Για γρήγορη ανασκόπηση των εντολών SQL και της χρήσης τους, μπορείτε να προσθέσετε σελιδοδείκτη σε αυτό το φύλλο εξαπάτησης SQL.