1. MySQL-i stringide ühendamise ülevaade
MySQL-is tähendab stringide ühendamine mitme tekstijupi kokkuliitmist üheks väärtuseks. Näiteks kui soovite andmebaasist kasutaja täisnime kuvada, saab ees- ja perekonnanime liita üheks väljundiks. MySQL-is kasutatakse selleks peamiselt funktsiooni CONCAT
ja torumärgi (pipe) operaatorit (||
). Selles artiklis selgitame neid meetodeid ja toome praktilisi näiteid.
1.1 Miks on stringide ühendamine oluline
Andmebaasi töötluses on stringide ühendamine sageli vajalik. Näiteks info kombineerimisel kasutajaliideses või logiandmete salvestamisel ühe kirjena. Efektiivse stringiühenduse valdamine parandab andmebaasi päringute jõudlust ja muudab koodi loetavamaks.
2. CONCAT funktsiooni kasutamine
MySQL-i CONCAT
funktsioon on kõige põhilisem viis mitme stringi ühendamiseks üheks väärtuseks. Selles osas vaatame detailsemalt, kuidas CONCAT
töötab ja millised on selle omadused.
2.1 CONCAT funktsiooni põhikasutus
CONCAT
liidab argumendiks antud stringid järjestikku kokku. Kasutusviis on väga lihtne, näiteks:
SELECT CONCAT('Hello', ' ', 'World');
See päring tagastab tulemuseks stringi „Hello World“. CONCAT
vajab vähemalt kahte argumenti, kuid neid võib vajadusel lisada piiramatus koguses.
2.2 Numbrite ja NULL väärtuste käsitlemine
Kui CONCAT
-ile antakse numbriline väärtus, teisendatakse see automaatselt stringiks. Näiteks:
SELECT CONCAT('The number is ', 123);
See päring töötab probleemideta. Kuid kui mõni argumentidest on NULL
, muutub kogu tulemus NULL
-iks.
SELECT CONCAT('Hello', NULL, 'World');
See päring tagastab NULL
. Seetõttu tuleb tegelikus andmetöötluses sellele tähelepanu pöörata.
2.3 Praktilised kasutusnäited
CONCAT
sobib täisnime genereerimiseks, aadressi vormindamiseks või sõnumite koostamiseks. Näiteks kasutaja täisnime ühendamine:
SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM users;
See päring liidab ees- ja perekonnanime ning kuvab tulemuse täisnime kujul.
3. Stringide ühendamine toruoperaatoriga (||)
MySQL-is saab stringe ühendada ka toruoperaatori (||
) abil. Vaikimisi tõlgendatakse seda aga loogilise OR-na, seega on vaja täiendavat seadistust.
3.1 Toruoperaatori vaikimisi käitumine
Tavaliselt töötab ||
loogilise OR operaatorina. Kuid MySQL-i sessioonirežiimi muutes saab seda kasutada stringide ühendamiseks.
3.2 PIPES_AS_CONCAT
režiimi lubamine
Et kasutada ||
stringide ühendamiseks, tuleb sessioonirežiim muuta järgmise käsuga:
SET @@session.sql_mode = 'PIPES_AS_CONCAT';
Pärast seadistuse lubamist saab kasutada järgmisi päringuid:
SELECT 'Hello' || ' ' || 'World';
See päring tagastab „Hello World“.
3.3 Seadistuse püsivaks muutmine
Kui ei soovi iga sessiooni jaoks eraldi seadet teha, võib lisada järgmise rea MySQL-i konfiguratsioonifaili (my.cnf
või my.ini
):
[mysqld]
sql_mode = 'PIPES_AS_CONCAT'
4. CONCAT ja toruoperaatori (||) võrdlus
Tihti tekib küsimus, kumb meetod valida. Vaatame nende eeliseid ja puudusi.
4.1 Loetavus ja koodi selgus
CONCAT
kasutamine on selge, kuna tegemist on funktsiooniga. Toruoperaator on lühem ja loetavam, kuid vajab eelnevat seadistust ning võib muude andmebaaside puhul mitte toimida.
4.2 Jõudluse erinevused
Enamasti on jõudluse vahe minimaalne. Suurte andmemahtude või väga sagedaste ühenduste korral tasub aga testida, kumb meetod töötab efektiivsemalt.
4.3 Õige valiku tegemine
Valik sõltub projekti nõuetest ja meeskonna stiilist. Kui tähtsustad lihtsust ja ühilduvust, kasuta CONCAT
-i. Kui soovid lühemat süntaksit, võib kasutada toruoperaatorit.
5. Levinumad vead ja parimad praktikad
Stringide ühendamisel MySQL-is esineb mõningaid tüüpvigu. Siin on soovitused nende vältimiseks.
5.1 NULL väärtuste käsitlemine
Nagu mainitud, muudab NULL
kogu CONCAT
tulemuse NULL
-iks. Selle vältimiseks saab kasutada funktsiooni IFNULL
:
SELECT CONCAT(IFNULL(first_name, ''), ' ', IFNULL(last_name, '')) AS full_name FROM users;
5.2 Ühilduvuse tagamine
PIPES_AS_CONCAT
on MySQL-i spetsiifiline funktsioon ja ei pruugi töötada muude andmebaasidega. Kui koodi tuleb migreerida, on turvalisem kasutada CONCAT
-i.
5.3 CONCAT_WS kasutamine eraldajaga ühendamisel
Kui vaja liita mitu stringi eraldajaga, on mugav kasutada funktsiooni CONCAT_WS
(With Separator).
SELECT CONCAT_WS(',', 'apple', 'banana', 'cherry');
See päring tagastab „apple,banana,cherry“.
6. Kokkuvõte
Selles artiklis vaatasime, kuidas MySQL-is stringe ühendada funktsiooni CONCAT
ja toruoperaatori abil. Mõlemal meetodil on oma plussid ja miinused. Vali sobiv lähtuvalt projekti nõuetest.
Neid teadmisi kasutades saad luua efektiivsemaid ja loetavamaid SQL-päringuid ning parandada andmebaasi jõudlust.