CASE WHEN, IF, IFNULL, NULLIF – funkcje warunkowe mySQL – Kurs języka SQL

W poniższym kursie omówię zastosowanie instrukcji warunkowych (CASE WHEN, IF, IFNULL, NULLIF) używanych w języku mySQL wraz z przykładami.

W przykładach będziemy opierać się o następującą tabelę pracownik:

id_pracownika imie nazwisko godzin stawka stanowisko
234 Jan Nowak 164.0 12.36 pracownik socjalny
235 Adam Kowalski 210.0 15.00 pracownik produkcyjny
236 Piotr Testowy 112.0 25.00 pracownik produkcyjny
237 Maciej Problemowy 10.0 13.00 null

Poniżej kod do tej utworzenie oraz uzupełnienia:

CASE … WHEN … END – jeżeli jakiś warunek jest spełniony to wykonaj/wyświetl wartość 1 w przeciwnym wypadku wykonaj/wyświetl wartość 2

Konstrukcja funkcji CASE WHEN jest następująca:

CASE [pole] WHEN wartosc1 THEN wynik1 [WHEN [wartosc2] THEN wynik2 …] [ELSE wynikN] END

CASE WHEN [warunek] THEN wynik1 [WHEN [nastepny warunek] THEN wynki2 …] [ELSE wynikN] END

Różnica jest między nimi jest taka, że dla pierwszego warunku porównanie odbywa się na zasadzie “równa się”, czy następuje sprawdzenie czy podana wartość dokładnie równa się założonej.
W drugim warunku można sprawdzać czy podana wartość jest mniejsza, więszka, równa, różna od założonej.

W funkcji CASE sprawdzane warunki można ze sobą łączyć przy pomocy znaków (warunków logicznych) “||” (OR) oraz “&&” (AND).

|| lub OR, czyli do spełnienia całości warunku wystarczy, że jeden z warunków będzie spełniony
&& lub AND, czyli każdy z warunków podanych musi być spełniony

1. Wyświetl następujące informację o pracownikach: imię, nazwisko oraz czy ich wynagrodzenie (stawka) jest “NIZSZA”, “WYZSZA” czy “ROWNA” 15 (zł).

SELECT imie, nazwisko, stawka, CASE WHEN stawka15 THEN 'WYZSZA' WHEN stawka=15 THEN 'ROWNA' END as wynik FROM pracownik;

SELECT imie, nazwisko, stawka, CASE WHEN stawka15 THEN ‘WYZSZA’ ELSE ‘ROWNA’ END as wynik FROM pracownik;

2. Wyświetl następujące informację o pracownikach: nazwisko, długość nazwiska oraz informacje czy ich nazwisko jest DLUZSZE niż 5 znaków. Jeżeli nazwisko jest krótsze bądź równie 5 znaków nie wyświetlaj żadnej informacji.

SELECT nazwisko, LENGTH(nazwisko), CASE WHEN LENGTH(nazwisko)>5 THEN 'DLUZSZE' END as wynik FROM pracownik;

SELECT nazwisko, LENGTH(nazwisko), CASE WHEN LENGTH(nazwisko)>5 THEN ‘DLUZSZE’ ELSE ” END as wynik FROM pracownik;

3. Wyświetl informację: stawka oraz czy reszta ze stawki podzielonej przez “5” jest równa “0” – “ZERO” czy “ROZNA OD ZERA”

SELECT stawka, CASE WHEN stawka MOD 5 = 0 THEN 'ZERO' ELSE 'ROZNA OD ZERA' END as wynik FROM pracownik;

SELECT stawka, CASE stawka MOD 5 WHEN 0 THEN ‘ZERO’ ELSE ‘ROZNA OD ZERA’ END as wynik FROM pracownik;

4. Wyświetl informację czy pierwsza litera nazwiska to ‘N’ lub ‘K’ czy też “INNA”

SELECT nazwisko, CASE WHEN left(nazwisko,1) IN ('N','K') THEN 'N lub K' ELSE 'INNA' END FROM pracownik

SELECT nazwisko, CASE WHEN left(nazwisko,1) = ‘N’ OR LEFT(nazwisko,1)= ‘K’ THEN ‘N lub K’ ELSE ‘INNA’ END FROM pracownik

SELECT nazwisko, CASE WHEN LEFT(nazwisko,1) = ‘N’ || LEFT(nazwisko,1)= ‘K’ THEN ‘N lub K’ ELSE ‘INNA’ END FROM pracownik

IF – jest kolejną funkcją warunkową. Jej składnia jest następująca:

IF(warunek;gdy_spelniony;gdy_niespelniony)

W skrócie, jeżeli podany warunek zostanie spełniony wtedy wyświetl/wykonaj to co jest umieszczone w “gdy_spelniony” w przeciwnym przykadku wyświetl/wykonaj to co jest umieszczone w “gdy_niespelniony”.
Różnica pomiędzy funkcją CASE WHEN, a IF jest taka, że w przypadku pierwszej możemy stosować wiele warunków (WHEN [wartosc] THEN [wynik]),
zaś przypadku drugiej albo coś spełnia warunek albo nie (IF(warunek;true;false)).

W funkcji IF sprawdzane warunki można ze sobą łączyć przy pomocy znaków (warunków logicznych) “||” oraz “&&”.

|| – oznacza OR, czyli do spełnienia całości warunku wystarczy, że jeden z warunków będzie spełniony
&& – oznacza AND, czyli każdy z warunków podanych musi być spełniony

Przejdźmy do przykładów. Będziemy się w nich opierać o wspomnianą wcześniej tabelę pracownik.

1. Przy wykorzystaniu funkcji IF wyświetl informację: stawka oraz czy reszta ze stawki podzielonej przez “5” jest równa “0” – “ZERO” czy “ROZNA OD ZERA”

SELECT stawka, IF(stawka MOD 5 = 0,'ZERO','ROZNA OD ZERA') FROM pracownik;

2. Wyświetl następujące informację o pracownikach: nazwisko, długość nazwiska oraz informacje czy ich nazwisko jest DLUZSZE niż 5 znaków. Jeżeli nazwisko jest krótsze bądź równie 5 znaków nie wyświetlaj żadnej informacji.

SELECT nazwisko, LENGTH(nazwisko), IF(LENGTH(nazwisko)>5,'DLUZSZE','') FROM pracownik;

SELECT nazwisko, LENGTH(nazwisko), IF(LENGTH(nazwisko)>5,’DLUZSZE’,null) FROM pracownik;

3. Zakładając, że prawidłowa liczba godzin w miesiącu to 164 wyswietl informację który z pracowników (imie, nazwiko) “PRZEPRACOWAL”, a który “NIE PRZEPRACOWAL” tylu godzin.

SELECT imie, nazwisko, IF(godzin=164,'PRZEPRACOWAL','NIE PRZEPRACOWAL') FROM pracownik;

SELECT imie, nazwisko, IF(godzin!=164,’NIE PRZEPRACOWAL’,’PRZEPRACOWAL’) FROM pracownik;

SELECT imie, nazwisko, IF(godzin164,’NIE PRZEPRACOWAL’,’PRZEPRACOWAL’) FROM pracownik;

SELECT imie, nazwisko, IF(godzin164,’NIE PRZEPRACOWAL’,’PRZEPRACOWAL’) FROM pracownik;

4. Wyświetl informację czy dwie pierwsze litera nazwiska to ‘No’ czy też “INNE”

SELECT nazwisko, IF(LEFT(nazwisko,2) = 'No', 'NO', 'INNE') FROM pracownik;

SELECT nazwisko, IF(MID(nazwisko,1,2) = ‘No’, ‘NO’, ‘INNE’) FROM pracownik;

SELECT nazwisko, IF(SUBSTR(nazwisko,1,2)= ‘No’, ‘NO’, ‘INNE’) FROM pracownik;

SELECT nazwisko, IF(MID(nazwisko,1,1) = ‘N’ AND MID(nazwisko,2,1) = ‘o’, ‘NO’, ‘INNE’) FROM pracownik;

IFNULL – funkcja sprawdza czy dana wartość/kolumna przyjmuje wartość null. Jej składnia jest następująca:

IFNULL(kolumna,wynik)

Jeżeli kolumna przyjmuje wartość null wtedy zwracany jest “wynik” w przeciwnym przypadku wartosc z kolumny

Przykłady:

1. Wyświetl informacje imie, nazwisko pracownika oraz informacje o statnowisku (które z nich jest wartością null – gdzie BRAK informacji o statnowisku)

SELECT imie, nazwisko, IFNULL(stanowisko,'BRAK') FROM pracownik;

NULLIF – funkcja sprawdza czy dana podana wartość/kolumna przyjmuje określoną wartość. Jeżeli warunek jest spełniony funkcja zwraca null w przeciwnym przypadku.
Składnia funkcji NULL jest następująca:

NULLIF(kolumna,wartosc)

Przykład:

1. Wyświetl imie oraz wykorzystując funkcję NULLIF sprawdź czy imię z tabeli to “Jan”. Funkcja NULLIF zwróci dla rekordu gdzie imie=’Jan’ wartość null.

SELECT imie, nazwisko, NULLIF(imie,'Jan') FROM pracownik;