Funkcje sterowania przepływem

Funkcje te znajdują swoje zastosowanie szczególnie w pojedynczych zapytaniach, gdzie nie możemy utworzyć procedur. Na tą grupę składają się cztery konstrukcje – IF(), IFNULL(), NULLIF() oraz CASE.

Konstrukcja IF przyjmuje trzy parametry wejściowe. Przykład jej wykorzystania to:

SELECT IF(id < 0, 0, id) AS id, name FROM tabela

Działanie tego zapytania przedstawia się następująco – jeśli id będzie ujemne zamiast niego zostanie zwrócone 0, natomiast jeśli id będzie większe lub równe 0 to zostanie zwrócone ono samo. I tak dla tabeli postaci:

id name
2 AAAAAAAA
-2 BBBBBBBB
-3 CCCCCCCC
4 DDDDDDDD
6 EEEEEEEE

Otrzymamy tabelę postaci:

id name
2 AAAAAAAA
0 BBBBBBBB
0 CCCCCCCC
4 DDDDDDDD
6 EEEEEEEE

Konstrukcja IFNULL() przyjmuje dwa argumenty wejściowe. Przykład wykorzystania:

SELECT IFNULL (id, 0) AS id FROM tabela

Zatem jeśli id będzie równe NULL zostanie zwrócone 0, a jeśli nie będzie równe NULL zostanie zwrócone id. Dla tabeli postaci:

id name
NULL AAAAAAAA
2 BBBBBBBB
-3 CCCCCCCC
NULL DDDDDDDD
6 EEEEEEEE

otrzymamy:

id name
0 AAAAAAAA
2 BBBBBBBB
-3 CCCCCCCC
0 DDDDDDDD
6 EEEEEEEE

Konstrukcja NULLIF przyjmuje dwa parametry wejściowe. Przykładowo:

SELECT id, nr, NULLIF(id, nr) AS wynik FROM tabela

Konstrukcja ta zwróci NULL jeśli id i number będą równe, natomiast jeśli nie będą równe zwróci id. Przykładowo dla tablicy:

id nr
2 3
2 5
-3 -3
2 4
6 6

Otrzymamy:

id nr wynik
2 3 2
2 5 2
-3 -3 NULL
2 4 2
6 6 NULL

=NULL i !=NULL nie działa!

Gdy chcemy sprawdzić czy wartość jakiejś kolumny w danym rekordzie jest nieokreślona musimy użyć określonej składni zapytania. Dla wartości nieokreślonej nie działa to tak jak w przypadku zwykłych zapytań:

SELECT id FROM tabela WHERE id=2;

I nie zadziała coś podobnego jak:

SELECT tresc FROM tabela WHERE tresc=NULL;

Bądź:

SELECT tresc FROM tabela WHERE tresc!=NULL;

Jeśli chcemy wybrać wiersze z tabeli w których pole tresc jest nieokreślone użyjemy składni:

SELECT tresc FROM tabela WHERE tresc IS NULL;

Podobnie jeśli chcemy wybrać wiersze z tabeli w których pole tresc nie jest nieokreślone użyjemy składni:

SELECT tresc FROM tabela WHERE tresc IS NOT NULL;

Wczytywanie skryptów MySQL z pliku

Dwa sposoby na realizowanie skryptów zapisanych w plikach tekstowych.
Z poziomu konsoli:

mysql nazwa_bazy_danych < nazwa_pliku_tekstowego

Z poziomu sesji MySQL:

SOURCE nazwa_pliku_tekstowego

Zmienne w MySQL

W skryptach bazodanowych możemy używać zmiennych do przechowywania danych, a następnie korzystać z nich w dalszej cześci skryptu.
Zmienną ustawia się następująco:

SET @zmienna=10;

Natomiast odwołujemy się do naszej zmiennej następująco:

SELECT @zmienna;

Rozróżniana jest wielkość liter więc @zmienna to nie to samo co @Zmienna.

Krótszy JOIN

Jeśli chcemy połączyć dwie tabele w zapytaniu wg jakiegoś pola, które nosi taką samą nazwę w obu tabelach dobrze jest zamiast ON użyć konstrukcji USING(nazwa_pol). Wówczas zamiast konstrukcji:

SELECT * FROM tabela1 t1 INNER JOIN tabela2 t2 ON t1.id=t2.id

Mamy:

SELECT * FROM tabela1 INNER JOIN tabela2 USING(id)

Już na tym krótkim przykładzie widać, że fragment z USING jest o wiele krótszy. Jeśli zapytanie byłoby bardziej rozbudowane i dotyczyłoby łączenia po paru innych polach tego typu skrót jest bardzo przydatny.