CONCAT#

%LOAD ../data/employees.db

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_id first_name last_name email
100 Steven King SKING
101 Neena Kochhar NKOCHHAR
102 Lex De Haan LDEHAAN
103 Alexander Hunold AHUNOLD
104 Bruce Ernst BERNST
107 Diana Lorentz DLORENTZ
124 Kevin Mourgos KMOURGOS
141 Trenna Rajs TRAJS
142 Curtis Davies CDAVIES
143 Randall Matos RMATOS
144 Peter Vargas PVARGAS
149 Eleni Zlotkey EZLOTKEY
174 Ellen Abel EABEL
176 Jonathon Taylor JTAYLOR
178 Kimberely Grant KGRANT
200 Jennifer Whalen JWHALEN
201 Michael Hartstein MHARTSTE
202 Pat Fay PFAY
205 Shelley Higgins SHIGGINS
206 William Gietz WGIETZ

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;

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, (first_name || ' ' || last_name), email
FROM employees;
employee_id (first_name || ' ' || last_name) email
100 Steven King SKING
101 Neena Kochhar NKOCHHAR
102 Lex De Haan LDEHAAN
103 Alexander Hunold AHUNOLD
104 Bruce Ernst BERNST
107 Diana Lorentz DLORENTZ
124 Kevin Mourgos KMOURGOS
141 Trenna Rajs TRAJS
142 Curtis Davies CDAVIES
143 Randall Matos RMATOS
144 Peter Vargas PVARGAS
149 Eleni Zlotkey EZLOTKEY
174 Ellen Abel EABEL
176 Jonathon Taylor JTAYLOR
178 Kimberely Grant KGRANT
200 Jennifer Whalen JWHALEN
201 Michael Hartstein MHARTSTE
202 Pat Fay PFAY
205 Shelley Higgins SHIGGINS
206 William Gietz WGIETZ

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, (first_name || ' ' || last_name) AS naam, email
FROM employees;
nummer naam email
100 Steven King SKING
101 Neena Kochhar NKOCHHAR
102 Lex De Haan LDEHAAN
103 Alexander Hunold AHUNOLD
104 Bruce Ernst BERNST
107 Diana Lorentz DLORENTZ
124 Kevin Mourgos KMOURGOS
141 Trenna Rajs TRAJS
142 Curtis Davies CDAVIES
143 Randall Matos RMATOS
144 Peter Vargas PVARGAS
149 Eleni Zlotkey EZLOTKEY
174 Ellen Abel EABEL
176 Jonathon Taylor JTAYLOR
178 Kimberely Grant KGRANT
200 Jennifer Whalen JWHALEN
201 Michael Hartstein MHARTSTE
202 Pat Fay PFAY
205 Shelley Higgins SHIGGINS
206 William Gietz WGIETZ

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

SELECT (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.