Ga naar hoofdinhoud

CONCAT

Stel dat je het employee_id, de volledige naam en het e-mailadres wil laten zien van de personeelsleden.

SELECT employee_id, first_name, last_name, email
FROM employees;
employee_idfirst_namelast_nameemail
100StevenKingSKING
101NeenaKochharNKOCHHAR
102LexDe HaanLDEHAAN
103AlexanderHunoldAHUNOLD
104BruceErnstBERNST
107DianaLorentzDLORENTZ
124KevinMourgosKMOURGOS
141TrennaRajsTRAJS
142CurtisDaviesCDAVIES
143RandallMatosRMATOS
144PeterVargasPVARGAS
149EleniZlotkeyEZLOTKEY
174EllenAbelEABEL
176JonathonTaylorJTAYLOR
178KimberelyGrantKGRANT
200JenniferWhalenJWHALEN
201MichaelHartsteinMHARTSTE
202PatFayPFAY
205ShelleyHigginsSHIGGINS
206WilliamGietzWGIETZ

In dit geval krijg je twee aparte kolommen bij de naam. Eentje voor de voornaam en eentje voor de achternaam. Je kunt die twee kolommen tonen in één kolom met de CONCAT opdracht. Je plakt als het ware de voornaam vast aan de achternaam.

SELECT employee_id, CONCAT(first_name, last_name), email
FROM employees;
employee_idCONCAT(first_name, last_name)email
100Steven KingSKING
101Neena KochharNKOCHHAR
102Lex De HaanLDEHAAN
103Alexander HunoldAHUNOLD
104Bruce ErnstBERNST
107Diana LorentzDLORENTZ
124Kevin MourgosKMOURGOS
141Trenna RajsTRAJS
142Curtis DaviesCDAVIES
143Randall MatosRMATOS
144Peter VargasPVARGAS
149Eleni ZlotkeyEZLOTKEY
174Ellen AbelEABEL
176Jonathon TaylorJTAYLOR
178Kimberely GrantKGRANT
200Jennifer WhalenJWHALEN
201Michael HartsteinMHARTSTE
202Pat FayPFAY
205Shelley HigginsSHIGGINS
206William GietzWGIETZ

Nu wil je uiteraard nog een spatie hebben tussen de voornaam en de achternaam. Dat doe je door een spatie te plaatsen tussen enkele aanhalingstekens tussen first_name en last_name.

SELECT employee_id, CONCAT(first_name, ' ', last_name), email
FROM employees;
employee_idCONCAT(first_name, ' ', last_name)email
100Steven KingSKING
101Neena KochharNKOCHHAR
102Lex De HaanLDEHAAN
103Alexander HunoldAHUNOLD
104Bruce ErnstBERNST
107Diana LorentzDLORENTZ
124Kevin MourgosKMOURGOS
141Trenna RajsTRAJS
142Curtis DaviesCDAVIES
143Randall MatosRMATOS
144Peter VargasPVARGAS
149Eleni ZlotkeyEZLOTKEY
174Ellen AbelEABEL
176Jonathon TaylorJTAYLOR
178Kimberely GrantKGRANT
200Jennifer WhalenJWHALEN
201Michael HartsteinMHARTSTE
202Pat FayPFAY
205Shelley HigginsSHIGGINS
206William GietzWGIETZ

Je ziet dat de tweede kolom de naam krijgt van de concatenatie. Het is daarom wel zo netjes de kolomnaam aan te passen.

SELECT employee_id nummer, CONCAT(first_name, ' ', last_name) AS naam, email
FROM employees;
nummernaamemail
100Steven KingSKING
101Neena KochharNKOCHHAR
102Lex De HaanLDEHAAN
103Alexander HunoldAHUNOLD
104Bruce ErnstBERNST
107Diana LorentzDLORENTZ
124Kevin MourgosKMOURGOS
141Trenna RajsTRAJS
142Curtis DaviesCDAVIES
143Randall MatosRMATOS
144Peter VargasPVARGAS
149Eleni ZlotkeyEZLOTKEY
174Ellen AbelEABEL
176Jonathon TaylorJTAYLOR
178Kimberely GrantKGRANT
200Jennifer WhalenJWHALEN
201Michael HartsteinMHARTSTE
202Pat FayPFAY
205Shelley HigginsSHIGGINS
206William GietzWGIETZ

Het is mogelijk zinnen te genereren met concatenatie en het gebruik van aanhalingstekens.

SELECT CONCAT(last_name, ' verdient ', salary, ' dollar per maand.') AS 'maandsalaris_per_werknemer'
FROM employees;
maandsalaris_per_werknemer
King verdient 24000 dollar per maand.
Kochhar verdient 17000 dollar per maand.
De Haan verdient 17000 dollar per maand.
Hunold verdient 9000 dollar per maand.
Ernst verdient 6000 dollar per maand.
Lorentz verdient 4200 dollar per maand.
Mourgos verdient 5800 dollar per maand.
Rajs verdient 3500 dollar per maand.
Davies verdient 3100 dollar per maand.
Matos verdient 2600 dollar per maand.
Vargas verdient 2500 dollar per maand.
Zlotkey verdient 10500 dollar per maand.
Abel verdient 11000 dollar per maand.
Taylor verdient 8600 dollar per maand.
Grant verdient 7000 dollar per maand.
Whalen verdient 4400 dollar per maand.
Hartstein verdient 13000 dollar per maand.
Fay verdient 6000 dollar per maand.
Higgins verdient 12000 dollar per maand.
Gietz verdient 8300 dollar per maand.

Het is ook mogelijk de concatenatie functie te gebruiken met behulp van pipelines, ook wel verticale streepjes staafjes of sluistekens genoemd. De pipeline zit op je toetsenbord boven de backslash. Je kunt het teken dus maken door Shift ingedrukt te houden en dan op \ te drukken. Om te concateneren gebruik je een dubbele pipeline.

SELECT first_name||' '||last_name AS naam
FROM employees;
naam
Steven King
Neena Kochhar
Lex De Haan
Alexander Hunold
Bruce Ernst
Diana Lorentz
Kevin Mourgos
Trenna Rajs
Curtis Davies
Randall Matos
Peter Vargas
Eleni Zlotkey
Ellen Abel
Jonathon Taylor
Kimberely Grant
Jennifer Whalen
Michael Hartstein
Pat Fay
Shelley Higgins
William Gietz

Als je niet de namen krijgt maar een kolom met allemaal nullen, dan staat PIPES_AS_CONCAT niet aan in de sql_mode. Je kunt het dan voor een sessie aanzetten met een SET SESSION zoals in onderstaand voorbeeld.

SET SESSION sql_mode = 'PIPES_AS_CONCAT';

SELECT first_name||' '||last_name AS naam
FROM employees;

Let op!

Er staat een punt-komma na het SET SESSION commando op het eind van de eerste regel! Dat statement wordt eerst uitgevoerd en daarna volgt het volgende statement. Je moet ze scheiden met een punt-komma.

In het vervolg van de cursus zullen we niet meer werken met het pipeline teken maar enkel met het CONCAT commando.