Un ghid de bază pentru începători

Doriți să concatenați două sau mai multe coloane de șir în SQL? Aflați cum să utilizați funcția SQL CONCAT pentru a concatena șiruri.

Când interogați un tabel de bază de date, uneori poate fi necesar să concatenați mai multe coloane de text/șir în loc de a prelua date dintr-o singură coloană. Acest lucru este util atunci când aveți nevoie de o ieșire mai ușor de interpretat și ușor de citit.

De exemplu, puteți selecta un câmp full_name prin concatenarea câmpurilor first_name și last_name. În mod similar, puteți obține full_address concatenând strada, orașul, statul și alte câmpuri necesare.

În SQL, puteți utiliza funcția CONCAT pentru a concatena șiruri. În acest ghid, vom trece peste:

  • Sintaxa funcției SQL CONCAT
  • Exemple de utilizare
  • Gestionarea valorilor NULL într-una sau mai multe coloane în timpul concatenării

Să începem!

Sintaxa funcției SQL CONCAT

Sintaxa de utilizare a funcției SQL CONCAT este următoarea:

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

Aici, șir_1, șir_2, …, șir n denotă șirurile care trebuie concatenate. Acestea pot fi literale de șir sau coloane sau o combinație a ambelor.

Concatenarea literalelor șir cu CONCAT

Deoarece funcția CONCAT poate fi folosită și pentru a concatena literale de șir, să încercăm să codificăm un exemplu simplu.

Aici concatenăm șirurile „Bună,” și „lume!” ca șir de salut:

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

Rularea interogării de mai sus vă va oferi următorul rezultat:

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

În practică, totuși, este posibil să doriți să concatenați coloanele necesare într-un tabel de bază de date și nu literale de șir. Deci, să codificăm câteva exemple folosind funcția CONCAT în SQL.

Cum să concatenați coloanele în SQL

În continuare, să trecem la interogarea unui tabel al bazei de date.

  26 Cele mai bune software de modelare 3D

📑 Toate exemplele de interogări din acest tutorial au fost executate pe a MySQL tabelul bazei de date. Dar puteți urmări și în alt RDBMS la alegere.

Crearea unui tabel de bază de date cu înregistrări

Să creăm o bază de date pe care să o putem folosi:

CREATE DATABASE db1;
use db1;

Să creăm un tabel de angajați în baza de date db1. Pentru a face acest lucru, rulați instrucțiunea CREATE TABLE cu următoarele coloane și tipuri de date corespunzătoare:

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)
);

În continuare, să inserăm câteva înregistrări în tabelul angajaților:

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');

Exemplul 1: Afișați numele complete

Ca prim exemplu, să concatenăm coloanele first_name și last_name pentru a obține numele complet. Pentru a face acest lucru, putem folosi funcția SQL CONCAT în interogarea SELECT, așa cum se arată:

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

Ar trebui să obțineți următorul rezultat:

+----------------+
| 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)

Pe lângă prenume și nume de familie, observați că am folosit și spațiul ca separator, specificat de șirul literal ‘ ‘.

Exemplul 2: Construiți adrese

Acum să luăm un alt exemplu.

  Cum să utilizați React Intl pentru a vă internaționaliza aplicațiile React

Avem coloanele strada, oraș și stat în tabelul angajaților. Deci, putem selecta full_address prin concatenarea acestor trei câmpuri cu o virgulă ca separator:

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

Iată rezultatul:

+---------------------------+
| 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)

Exemplul 3: creați adrese URL de profil

Amintiți-vă că avem un câmp de nume de utilizator în tabelul angajaților.

Să presupunem că aveți un domeniu rădăcină https://www.example.com/ și profilurile de utilizator sunt la https://www.example.com/user. Puteți genera profile_url folosind funcția CONCAT astfel:

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

După cum s-a văzut, obținem adresele URL de profil pentru toți angajații:

+-----------------------------------------+
| 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)

Gestionarea valorilor NULL

În tabelul de angajați, toate înregistrările au toate câmpurile. Dar ce se întâmplă dacă aveți unul sau mai multe câmpuri cu valori NULL?

Să luăm un exemplu pentru acest caz. Aici actualizăm înregistrarea corespunzătoare ID = 2 pentru a seta coloana de stradă la 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

Acum folosim CONCAT pentru a selecta adresa completă:

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

Iată rezultatul:

+---------------------------+
| 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)

Observați că al doilea element din setul de rezultate este NULL.

  13 Cel mai bun software de management al donatorilor pentru strângeri de fonduri

Dar ne-ar fi plăcut ca rezultatul să fie concatenarea orașului și coloanele de stat pentru a ne face o idee aproximativă despre adresa. Când aveți astfel de valori NULL, puteți utiliza CONCAT_WS ca alternativă la funcția CONCAT. Să vedem cum funcționează.

Utilizarea CONCAT_WS pentru a gestiona valorile NULL în timpul concatenării

CONCAT_WS este o alternativă la CONCAT care poate fi utilizată dacă bănuiți că unul sau mai multe câmpuri conțin valori NULL.

Puteți utiliza funcția CONCAT_WS astfel:

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

Acum rulați următoarea interogare SELECT:

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

Veți obține următorul rezultat:

+---------------------------+
| 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)

După cum s-a văzut, pentru al doilea element din setul de rezultate, obținem „Boston MA”, deoarece câmpul de stradă este NULL.

⚠ Când utilizați CONCAT_WS, este necesar să specificați separatorul. Dacă nu specificați separatorul, atunci rezultatul este NULL dacă una sau mai multe coloane este NULL (similar cu CONCAT).

Încheierea

Să revizuim ceea ce am învățat:

  • Când interogați un tabel de bază de date pentru a prelua date, este posibil să doriți să concatenați mai multe coloane de șir pentru a obține rezultate de interogare mai utile și mai ușor de interpretat. Pentru a face acest lucru, puteți utiliza funcția CONCAT în SQL cu sintaxa CONCAT(șir_1, șir_2, …, șir_n).
  • Puteți concatena literale șiruri, coloane sau o combinație a ambelor. Cu toate acestea, dacă există una sau mai multe valori NULL, rezultatul pentru acea înregistrare particulară este NULL. Pentru a gestiona acest lucru, puteți utiliza CONCAT_WS cu sintaxa CONCAT_WS(separator, șir_1, șir_2, …, șir_n).
  • CONCAT_WS gestionează valorile NULL mai grațios prin concatenarea numai a acelor șiruri care sunt prezente folosind separatorul specificat.

Pentru o revizuire rapidă a comenzilor SQL și a utilizării lor, puteți marca această fișă de cheat SQL.