En grunnleggende veiledning for nybegynnere

Vil du sette sammen to eller flere strengkolonner i SQL? Lær hvordan du bruker SQL CONCAT-funksjonen til å sette sammen strenger.

Når du spør etter en databasetabell, kan det hende du må sette sammen flere tekst-/strengkolonner i stedet for å hente data fra en enkelt kolonne. Dette er nyttig når du trenger en lettere å tolke og lesbar utgang.

Du kan for eksempel velge et fullt_navn-felt ved å sette sammen feltene fornavn og etternavn. På samme måte kan du få full_address ved å sette sammen gate, by, stat og andre nødvendige felt.

I SQL kan du bruke CONCAT-funksjonen til å sette sammen strenger. I denne veiledningen går vi over:

  • Syntaksen til SQL CONCAT-funksjonen
  • Eksempler på bruk
  • Håndtering av NULL-verdier i én eller flere kolonner under sammenkobling

La oss komme i gang!

Syntaks for SQL CONCAT-funksjonen

Syntaksen for å bruke SQL CONCAT-funksjonen er som følger:

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

Her, string_1, string_2, …, string n angir strengene som skal settes sammen. Disse kan være strenge bokstaver eller kolonner eller en kombinasjon av begge.

Sammenknytting av strengbokstaver med CONCAT

Fordi CONCAT-funksjonen også kan brukes til å sette sammen strengliteraler, la oss prøve å kode et enkelt eksempel.

Her setter vi sammen strengene «Hello,» og «world!» som hilsen:

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

Å kjøre spørringen ovenfor vil gi deg følgende utdata:

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

I praksis kan det imidlertid være lurt å sette sammen de nødvendige kolonnene i en databasetabell og ikke strenge bokstaver. Så la oss kode noen eksempler ved å bruke CONCAT-funksjonen i SQL.

Slik kobler du sammen kolonner i SQL

Deretter går vi til å spørre etter en databasetabell.

  Hvordan slå på tofaktorautentisering i Slack

📑 Alle eksempelspørringene i denne opplæringen ble kjørt på en MySQL databasetabell. Men du kan også følge med i en annen RDBMS etter eget valg.

Opprette en databasetabell med poster

La oss lage en database som vi kan bruke:

CREATE DATABASE db1;
use db1;

La oss lage en medarbeidertabell i databasen db1. For å gjøre det, kjør CREATE TABLE-setningen 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)
);

La oss deretter sette inn noen få poster i medarbeidertabellen:

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 fullstendige navn

Som et første eksempel, la oss sette sammen kolonnene fornavn og etternavn for å få fullt_navn. For å gjøre det kan vi bruke SQL CONCAT-funksjonen i SELECT-spørringen som vist:

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

Du bør få følgende utgang:

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

I tillegg til fornavn og etternavn, legg merke til at vi også har brukt mellomrom som skilletegn – spesifisert av den bokstavelige strengen « «.

Eksempel 2: Konstruer adresser

La oss nå ta et annet eksempel.

Vi har kolonnene gate, by og stat i tabellen for ansatte. Så vi kan velge full_adressen ved å sette sammen disse tre feltene med et komma som skilletegn:

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

Her er utgangen:

+---------------------------+
| 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: Opprett profilnettadresser

Husk at vi har et brukernavnfelt i ansattetabellen.

  Slik bruker du Snap-kamera på zoom

La oss si at du har et rotdomene https://www.example.com/ og brukerprofiler er på https://www.example.com/user. Du kan generere profile_url ved å bruke CONCAT-funksjonen slik:

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

Som sett får vi profil-URLene for alle ansatte:

+-----------------------------------------+
| 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 av NULL-verdier

I ansattetabellen har alle postene alle feltene. Men hva om du har ett eller flere felt med NULL-verdier?

La oss ta et eksempel for denne saken. Her oppdaterer vi posten som tilsvarer ID = 2 for å sette gatekolonnen 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

Nå bruker vi CONCAT for å velge full_adressen:

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

Her er utgangen:

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

Legg merke til at det andre elementet i resultatsettet er NULL.

  Hvordan sjekke hva som er min ip-adresse på nettet?

Men vi skulle gjerne ønsket at utgangen var sammenkoblingen av byen og statens kolonner for å få en grov ide om adressen. Når du har slike NULL-verdier, kan du bruke CONCAT_WS som et alternativ til CONCAT-funksjonen. La oss se hvordan det fungerer.

Bruk av CONCAT_WS til å håndtere NULL-verdier under sammenkobling

CONCAT_WS er ​​et alternativ til CONCAT som kan brukes hvis du mistenker at ett eller flere felt inneholder NULL-verdier.

Du kan bruke CONCAT_WS-funksjonen slik:

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

Kjør nå følgende SELECT-spørring:

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

Du får følgende utgang:

+---------------------------+
| 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 sett, for det andre elementet i resultatsettet, får vi «Boston MA» ettersom gatefeltet er NULL.

⚠ Når du bruker CONCAT_WS, er det nødvendig å spesifisere skillet. Hvis du ikke spesifiserer skilletegn, blir resultatet NULL hvis en eller flere kolonner er NULL (lik CONCAT).

Innpakning

La oss gå gjennom det vi har lært:

  • Når du spør etter en databasetabell for å hente data, kan det være lurt å sette sammen flere strengkolonner for å få mer nyttige og enkle å tolke spørringsresultater. For å gjøre det kan du bruke CONCAT-funksjonen i SQL med syntaksen CONCAT(streng_1, streng_2, …, streng_n).
  • Du kan sette sammen strengliteraler, kolonner eller en kombinasjon av begge. Men hvis det er én eller flere NULL-verdier, er resultatet for den aktuelle posten NULL. For å håndtere dette kan du bruke CONCAT_WS med syntaksen CONCAT_WS(separator, string_1, string_2, …, string_n).
  • CONCAT_WS håndterer NULL-verdier mer elegant ved å koble sammen bare de strengene som er tilstede ved å bruke den spesifiserte separatoren.

For en rask gjennomgang av SQL-kommandoer og deres bruk, kan du bokmerke dette SQL-juksearket.