Język SQL: Zmienne

article-thumbnail

Choć na pierwszy rzut oka SQL niewiele ma wspólnego z typowymi językami programowania, znajdziemy w nim elementy z nich zaczerpnięte. Jednym z nich jest mechanizm zmiennych. Jest to „szufladka” w pamięci, w której możemy przechowywać pewne dane. Daje nam to możliwość przechowywania wyników określonych kwerend, by następnie odwołać się do nich w kolejnych zapytaniach.

Deklaracja, zapis i odczyt ze zmiennej

Do deklaracji zmiennej użyjemy słowa DECLARE. Podamy po nim nazwę zmiennej oraz jej typ danych.

DECLARE @nazwa_zmiennej typ_danych;

Jak z pewnością zauważyłeś, musimy podać typ danych przy deklaracji. Warto więc wymienić kilka najważniejszych z nich:

  • INTEGER lub INT: Reprezentuje liczby całkowite.
  • VARCHAR: Przechowuje łańcuchy znaków o zmiennym rozmiarze.
  • CHAR: Przechowuje łańcuchy znaków o stałym rozmiarze. Należy określić dokładną długość,
  • TEXT: Przechowuje dłuższe łańcuchy znaków o zmiennej długości.
  • DATE: Reprezentuje datę w formacie 'YYYY-MM-DD’.
  • TIME: Reprezentuje czas w formacie 'HH:MM:SS’.
  • DATETIME: Reprezentuje datę i czas w formacie 'YYYY-MM-DD HH:MM:SS’.
  • DECIMAL: Przechowuje liczby dziesiętne z dokładnością do ustalonej liczby miejsc po przecinku.
  • FLOAT lub DOUBLE: Przechowuje liczby zmiennoprzecinkowe. FLOAT ma mniejszą precyzję niż DOUBLE.
  • BOOLEAN: Reprezentuje wartości logiczne TRUE lub FALSE.

Aby zapisać dane do zmiennej używamy słowa kluczowego SET.

SET @nazwa_zmiennej = nowa_wartość;

Zmiennej oczywiście możemy użyć w kwerendzie np. w taki sposób

DECLARE @imie VARCHAR(32) = 'John';
SELECT * FROM tabela WHERE imie = @imie;

DECLARE powoduje błąd Syntaxu

Niekiedy nie trzeba, a wręcz nie można deklarować zmiennej używając słowa DECLARE, wówczas używamy po prostu słowa SET, która naraz zadeklaruje i przypisze wartość zmiennej! Zależy to od wariantu języka SQL. Chociażby w używanej przeze mnie wariacji MySQL słowo to nie jest uznawane przez interpreter za polecenie. W takiej sytuacji zostaje zwrócony błąd syntaxu

Użycie zmiennej w kwerendzie

Zmienne pozwalają nam przechowywać wartości do późniejszego wykorzystania. Możemy podać je podczas wykonywania kwerendy. Najczęściej umieścimy je albo po klauzurze WHERE albo bezpośrednio po SELECT. Co więcej możemy do nich zapisać wynik kwerendy.

DECLARE @data INT;
SET @data = (SELECT COUNT(*) FROM `oceny` WHERE `id_gry` = 1);
SELECT @data as "Wynik";

W tym przykładzie użyłem zmiennej @data po SELECT, aby wypisać jej wartość.

DECLARE @data INT;
SET @data = (SELECT COUNT(*) FROM `oceny` WHERE `id_gry` = 1);
SELECT `id_gry` FROM `oceny` GROUP BY `id_gry` HAVING COUNT(`ocena`)> @data;

A w tym przypadku wykorzystałem zmienną w warunku klauzuli HAVING.

Gdzie Stosować zmienne

Naturalnym miejscem, gdzie chcemy stosować zmienne są oczywiście operacje powtarzalne np. procedury składowane czy wyzwalacze. Można ich użyć chociażby do przekazywania danych z jednej kwerendy do drugiej. Możemy dzięki nim ograniczyć ilość mało czytelnych zagnieżdżeń.