Esittely
Kun hallinnoit tietoja PostgreSQL:ssä, tulet huomaamaan, että NULL-arvot voivat olla hieman hankalia käsitellä. Esimerkiksi useimmat lausekkeet palauttavat arvon NULL, kun jokin lausekkeen elementti on NULL. Miten voimme välttää joitakin NULL-arvoihin liittyviä vaikeuksia? Tämän kaksiosaisen sarjan ensimmäisessä artikkelissa selitimme, miten PostgreSQL:n COALESCE-funktiota voidaan käyttää NULL-arvojen testaamiseen ja NULL-arvojen korvaamiseen toisella arvolla. Tässä artikkelissa jatketaan siitä, mihin jäimme, ja jatketaan keskustelua COALESCE-funktiosta ja sen sovelluksista PostgreSQL:ssä.
Edellytykset
Voit varmistaa, että PostgreSQL on jo asennettu koneellesi, ennen kuin yrität seurata tämän artikkelin esimerkkejä. Sinulla tulisi myös olla jonkin verran PostgreSQL:n perustietoja, jotta voit ymmärtää COALESCE-funktion esimerkkejä.
COALESCE psql-komentoriviliittymässä
Edellisessä artikkelissa selitimme, miten pääset käsiksi PostgreSQL:n komentoriviliittymään psql
. Meidän on jälleen kerran mentävä psql
-komentorivikonsoliin kokeillaksemme joitakin COALESCE-esimerkkejä.
Aloitetaan alla olevasta yksinkertaisesta esimerkistä:
1
|
SELECT COALESCE ( ’omena’ , ’päärynä’ , ’mansikka’);
|
Kyselyn tulosteeksi tulee:
1
2 3 |
COALESCE
———- apple |
Kuten huomaat, palautettu tuloste on ’omena’, koska se on argumenttilistan ensimmäinen ei-NULL-arvo.
Jos meillä on NULL-arvo listan ensimmäisenä elementtinä, COALESCE
funktio ohittaa sen ja etsii ensimmäisen arvon, joka ei ole NULL. Näemme, miten tämä toimii seuraavassa kyselyssä:
1
|
SELECT COALESCE ( NULL, ’omena’ , ’päärynä’ , ’mansikka’);
|
Tulostulos on:
1
2 3 4 |
COALESCE
———-. apple (1 ROW) |
Käytä PostgreSQL COALESCE aikaleima null
Jatkossa esimerkissämme, yritämme käyttää COALESCE
-funktiota timestamp-tietotyypin kanssa.
Aluksi meidän on luotava toinen taulukko PostgreSQL:ään:
1
2 3 4 5 6 7 |
CREATE TABLE books(
book_id INT PRIMARY KEY NOT NULL, book_name VARCHAR NOT NULL, quantity INT, price REAL, year_released TIMESTAMP ); |
Meidän on myös lisättävä tietueet books
-tauluun, jonka juuri loimme:
1
2 3 4 5 6 7 |
INSERT INTO kirjat(kirjan_nimi, määrä, hinta, julkaisuvuosi)
VALUES (’Kirja1’, 12, 60, ’2015-07-21 09:10:25+8’), (’Kirja2’, 5, 55, ’2018-02-12 15:40:15+8’), (’Book3’, 10, 90, ’2017-11-12 00:10:11+8’), (’Book4’, 26, 47, NULL), (’Book5’, 2, 83, ’2019-03-05 03:05:08+8’); |
Huomaa, että lisäsimme taulukkoon NULL-arvon sarakkeeseen year_released
, jonka tietotyyppi on timestamp
.
Ajatellaanpa, että haluaisimme saada kunkin kirjan kokonaishinnan. Saadaksemme tämän tiedon, kerromme kahden sarakkeen arvot: quantity
ja price
. Alla oleva kysely näyttää, miten tämä tehdään:
1
2 |
SELECT book_id, book_name, ( quantity * price ) AS total_price
FROM books; |
Kyselyn tuloste näyttää seuraavalta:
1
2 3 4 5 6 7 8 |
kirjan_id | kirjan_nimi | kirjan_nimi | hinnan_yhteenlaskettu
———+———–+————-. 1 | Kirja1 | 720 2 | Kirja2 | 275 3 | Kirja3 | 900 4 | Kirja4 | 1222 5 | Kirja5 | 166 (5 ROWS) |
Katsotaan books
-taulun sisältöä tällä kyselyllä:
1
|
SELECT * FROM books;
|
Tuloste näyttäisi tältä:
1
2 3 4 5 6 7 8 |
kirjan_id | kirjan_nimi | määrä | hinta | julkaisuvuosi
———+———–+———-+——-+——————— 1 | Kirja1 | 12 | 60 | 2015-07-21 09:10:25 2 | Kirja2 | 5 | 55 | 2018-02-12 15:40:15 3 | Kirja3 | 10 | 90 | 2017-11-12 00:10:11 4 | Kirja4 | 26 | 47 | 5 | Kirja5 | 2 | 83 | 2019-03-05 03:05:08 (5 riviä) |
- Huomaa, että neljännen rivin viimeisessä sarakkeessa on NULL-arvo. Voimme muuttaa tämän käyttämään sen sijaan muuta kuin NULL-arvoa käyttämällä
COALESCE
-funktiota:
1
2 |
SELECT book_id, book_name,
COALESCE(year_released, CURRENT_TIMESTAMP) FROM books; |
Tuloste näyttää seuraavalta:
1
2 3 4 5 6 7 8 |
book_id | book_name | COALESCE
———+———–+——————————- 1 | Book1 | 2015-07-21 09:10:25-04 2 | Kirja2 | 2018-02-12 15:40:15-05 3 | Kirja3 | 2017-11-12 00:10:11-05 4 | Kirja4 | 2020-02-13 06:20:41.239926-05 5 | Book5 | 2019-03-05 03:05:08-05 (5 ROWS) |
Conclusion
Tässä kaksiosaisessa artikkelisarjassa olemme tutustuneet perusteellisesti PostgreSQL:n COALESCE-funktioon. Olemme näyttäneet useita esimerkkejä siitä, miten tätä funktiota voidaan käyttää tietojen NULL-arvojen testaamiseen ja tarvittaessa korvaamiseen ei-NULL-arvolla. Käyttämällä näitä esimerkkejä oppaana olet valmis sisällyttämään COALESCE
-funktion omiin PostgreSQL-lauseisiisi.