Змінні 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
Як видно з прикладу, порядок проходження виразів за участю змінних має значення для результату, що повертається запитом.