En grundlæggende vejledning for begyndere

Vil du sammenkæde to eller flere strengkolonner i SQL? Lær, hvordan du bruger SQL CONCAT-funktionen til at sammenkæde strenge.

Når du forespørger i en databasetabel, kan det nogle gange være nødvendigt at sammenkæde flere tekst-/strengkolonner i stedet for at hente data fra en enkelt kolonne. Dette er nyttigt, når du har brug for et lettere at fortolke og læsbart output.

For eksempel kan du vælge et fuldt_navn-felt ved at sammenkæde felterne fornavn og efternavn. På samme måde kan du få den fulde_adresse ved at sammenkæde gade, by, stat og andre nødvendige felter.

I SQL kan du bruge CONCAT-funktionen til at sammenkæde strenge. I denne guide vil vi gennemgå:

  • Syntaksen for SQL CONCAT-funktionen
  • Eksempler på brug
  • Håndtering af NULL-værdier i en eller flere kolonner under sammenkædning

Lad os komme igang!

Syntaks for SQL CONCAT-funktionen

Syntaksen for at bruge SQL CONCAT-funktionen er som følger:

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

Her betegner streng_1, streng_2, …, streng n de strenge, der skal sammenkædes. Disse kan være strenge bogstaver eller kolonner eller en kombination af begge.

Sammenkædning af strenge bogstaver med CONCAT

Fordi CONCAT-funktionen også kan bruges til at sammenkæde strengliteraler, lad os prøve at kode et simpelt eksempel.

Her sammenkæder vi strengene ‘Hello,’ og ‘world!’ som hilsen:

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

Hvis du kører ovenstående forespørgsel, får du følgende output:

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

I praksis vil du dog måske sammenkæde de påkrævede kolonner i en databasetabel og ikke strenge bogstaver. Så lad os kode nogle eksempler ved hjælp af CONCAT-funktionen i SQL.

Sådan sammenkædes kolonner i SQL

Lad os derefter gå til at forespørge en databasetabel.

  Sådan bruges VLC til at gennemgå sikkerhedskameraoptagelser

📑 Alle prøveforespørgslerne i dette selvstudie blev kørt på en MySQL database tabel. Men du kan også følge med i et andet RDBMS efter eget valg.

Oprettelse af en databasetabel med poster

Lad os lave en database, som vi kan bruge:

CREATE DATABASE db1;
use db1;

Lad os oprette en medarbejdertabel i databasen db1. For at gøre det skal du køre CREATE TABLE-sætningen med følgende kolonner og tilsvarende datatyper:

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

Lad os derefter indsætte et par poster i medarbejdertabellen:

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

Eksempel 1: Vis fulde navne

Som et første eksempel, lad os sammenkæde kolonnerne fornavn og efternavn for at få det fulde_navn. For at gøre det kan vi bruge SQL CONCAT-funktionen i SELECT-forespørgslen som vist:

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

Du bør få følgende output:

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

Ud over fornavnet og efternavnet skal du bemærke, at vi også har brugt mellemrum som separator – specificeret af den bogstavelige streng ‘ ‘.

Eksempel 2: Konstruer adresser

Lad os nu tage et andet eksempel.

Vi har kolonnerne gade, by og stat i medarbejdertabellen. Så vi kan vælge den fulde_adresse ved at sammenkæde disse tre felter med et komma som separator:

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

Her er outputtet:

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

Eksempel 3: Opret profilwebadresser

Husk, at vi har et brugernavnfelt i medarbejdertabellen.

  Start apps og foretag opkald fra iPhone Notification Center

Lad os sige, at du har et roddomæne https://www.example.com/ og brugerprofiler er på https://www.example.com/user. Du kan generere profile_url ved hjælp af CONCAT-funktionen som sådan:

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

Som det ses, får vi profil-URL’erne for alle medarbejdere:

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

Håndtering af NULL-værdier

I medarbejdertabellen har alle posterne alle felterne. Men hvad hvis du har et eller flere felter med NULL-værdier?

Lad os tage et eksempel for denne sag. Her opdaterer vi posten svarende til ID = 2 for at sætte gadekolonnen til 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

Nu bruger vi CONCAT til at vælge den fulde_adresse:

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

Her er outputtet:

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

Bemærk, at det andet element i resultatsættet er NULL.

  Sådan redigeres indlæg i WeChat

Men vi ville gerne have, at outputtet var sammenkædningen af ​​byen og statens kolonner for at få en nogenlunde idé om adressen. Når du har sådanne NULL-værdier, kan du bruge CONCAT_WS som et alternativ til CONCAT-funktionen. Lad os se, hvordan det virker.

Brug af CONCAT_WS til at håndtere NULL-værdier under sammenkædning

CONCAT_WS er ​​et alternativ til CONCAT, der kan bruges, hvis du har mistanke om, at et eller flere felter indeholder NULL-værdier.

Du kan bruge CONCAT_WS-funktionen sådan:

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

Kør nu følgende SELECT-forespørgsel:

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

Du får følgende output:

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

Som det ses, for det andet punkt i resultatsættet, får vi ‘Boston MA’, da gadefeltet er NULL.

⚠ Når du bruger CONCAT_WS, er det nødvendigt at angive separatoren. Hvis du ikke angiver separatoren, er resultatet NULL, hvis en eller flere kolonner er NULL (svarende til CONCAT).

Afslutter

Lad os gennemgå, hvad vi har lært:

  • Når du forespørger i en databasetabel for at hente data, vil du måske sammenkæde flere strengkolonner for at få mere nyttige og nemme at fortolke forespørgselsresultater. For at gøre det kan du bruge CONCAT-funktionen i SQL med syntaksen CONCAT(streng_1, streng_2, …, streng_n).
  • Du kan sammenkæde strengliteraler, kolonner eller en kombination af begge. Men hvis der er en eller flere NULL-værdier, er resultatet for den pågældende post NULL. For at håndtere dette kan du bruge CONCAT_WS med syntaksen CONCAT_WS(separator, streng_1, streng_2, …, streng_n).
  • CONCAT_WS håndterer NULL-værdier mere elegant ved kun at sammenkæde de strenge, der er til stede ved hjælp af den angivne separator.

For hurtig gennemgang af SQL-kommandoer og deres brug kan du bogmærke dette SQL-snydeark.