CONCAT#
%LOAD ../data/employees.db
Stel dat je het employee_id
, de volledige naam en het e-mail
adres wil laten zien van de personeelsleden.
SELECT employee_id, first_name, last_name, email
FROM employees;
employee_id | first_name | last_name | |
---|---|---|---|
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) | |
---|---|---|
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 | |
---|---|---|
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.