Змінні SQL

 

СУБД MySQL надає можливість збереження результатів поточного запиту для використання в наступних запитах в змінних SQL. Оголошення змінних починається з символу @ за яким слідує ім'я змінної. Значення змінним присвоюються за допомогою оператора select з використанням оператора присвоювання ":=".

Приклад (Оголошення і використання змінних SQL)

SELECT @total := COUNT (*) FROM products;

@total := COUNT(*)

30

SELECT @total;

total

30

 

У прикладі оголошується змінна @ total, якій присвоюється число записів у таблиці products навчальної бази даних shop. Потім у рамках поточного сеансу у наступних запитах з'являється можливість використання даної змінної.

Зауваження:

  • Змінна діє тільки у рамках одного сеансу з'єднання з сервером MySQL і припиняє своє існування після розриву з'єднання.

У наступному прикладі з таблиці products витягується інформація про товарну позицію з найвищою ціною.

Приклад (Витяг товарної позиції з найвищою ціною)

 

SELECT @price MAX(price) FROM products;

 

@price­ MAX(price)

725.00

 

SELECT id_product, name, price, count

FROM products WHERE price = ©price;

 

Id_product name price count

7 Intel Pentium 4 3.2GHz 725.00 5

 

Якщо в якості значення змінної передається ім'я стовпця, то змінна отримає останнє значення (Наступний приклад).

 

Приклад

 

SELECT @id := id_catalog FROM catalogs;

 

@id := id_catalog

1

2

3

4

5

 

SELECT @id;

 

@id

5

 

SELECT * FROM catalogs WHERE id_catalog = @id;

 

Id_catalog name

5 Оперативна пам’ять

 

Як значення змінної необов'язково повинні виступати результати виконання функцій і значення стовпців таблиці, можна використовувати довільні числові і рядкові значення (приклад).

 

Приклад

 

SELECT @id := 3;

 

@id := 3

3

 

SELECT * FROM catalogs WHERE id_catalog = @id;

 

id _catalog name

3 Відеоадаптери

 

Слід пам'ятати, що імена змінних чутливі до регістру (Приклад).

 

Приклад (Імена змінних чутливі до регістру)

 

SELECT @id:=5, @ID:=3;

 

@id := 5 @ID := 3

 

SELECT @id, @ID;

 

@id @ID

5 3

 

Змінні також можуть оголошуватися за допомогою оператора set, як це продемонсторовано у прикладі.

 

Приклад

SET @last = CURDATE() - INTERVAL 7 DAY;

SELECT CURDATE(), @last;

 

CURDATE() @last

2005-06-18 2005-06-11

 

 

Зауваження

  • При використанні оператора set у якості оператора присвоєння може використовуватись як ":=", так і звичайний знак рівності "=".

 

Зручність використання оператора set полягає в тому, що він, на відміну від оператора select, не повертає результуючу таблицю.

При використанні змінних слід пам'ятати, що не рекомендується одночасно присвоювати і використовувати змінну в одному запиті, тому що це може призводити до помилок, які важко виявити.

 

Приклад (Некоректне використання змінних)

SET @a = ’test1’;

SELECT @a, (@a : = 20);

 

@a @a := 20

test 20

 

SET @a = 'test';

SELECT (@a : = 20), @a;

 

@a : = 20 @a

20 20

 

Як видно з прикладу, порядок проходження виразів за участю змінних має значення для результату, що повертається запитом.