UNION

Оператор UNION може бути використаний, якщо потрібно так би мовити "склеїти" декілька таблиць в ондну. Коли це може бути корисним? Розглянемо такий приклад: у нас є магазин який складається з декількох відділів, а саме: відділ спиртних напоїв, м’ясний відділ та кондитерський відділ. Якщо ж, ми бажаємо "заманити" нових покупців, або "здихатися" від продуктів у яких через місяць вийде термін придатності. Для таких цілей зазвичай організовують якції "червона ціна", а саме нам потрібно встановити знижки в деякому розмірі на певні групи товарів. А так як відділів у нас три, тому і таблиць з цінами теж три припустимо що вони мають такий вигляд:

  1. spirt_product.id = int,

spirt_product.name = VarChar,

spirt_product.price = float,

spirt_product.outdate = date;

 

  1. meat_product.id = int,

meat_product.name = VarChar,

meat_product.price = float,

meat_product.outdate = date;

 

  1. sveets_product.id = int,

sweets_product.name = VarChar,

sweets_product.price = float,

sweets_product.outdate = date;

 

Тобто, якщо нам потрібно зв’язати три таблиці в одну так щоб туди попали всі значення де до настання outdate (дати коли термін споживання закінчиться) два місяці.

Запит матиме вигляд:

 

SELECT spirt_product.name, spirt_product.price*0,8

FROM spirt_product

WHERE (TO_DAYS(spirt_product.outdate) - TO_DAYS(NOW)) < 60

UNION

SELECT meat_product.name, meat_product.price*0,8

FROM meat_product

WHERE (TO_DAYS(meat_product.outdate) - TO_DAYS(NOW)) < 60

UNION

SELECT sweets_product.name, sweets_product.price*0,8

FROM sweets_product

WHERE (TO_DAYS(sweets_product.outdate - TO_DAYS(NOW)) < 60;

 

 

Як результат ми отримаємо таблицю із двох стовпців імені продукту та його ціни із врахуванням знижки 20%.

Примітка:

Оператор UNION може об’єднувати таблиці тільки тоді коли типи данних які виводяться у стовпцях співпадають у всіх таблицях, я ще потрібно звернути увагу, що крапка з комою ставиться в самому кінці запросу.

 

Якщо ж наприклад магазину потрібно швидко "назбирати" коштів, тоді доцільніше робити "знижки" на дорогі товари, а саме фільтр потрібно застосувати по ціні. Наприклад у нас товар потрапить до "святкового кталогу" якщо його ціна перевищує деякий умовний бар’єр.

Тоді запит матиме вигляд:

 

SELECT spirt_product.name, spirt_product.price*0,8

FROM spirt_product

WHERE spirt_product.price > 150

UNION

SELECT meat_product.name, meat_product.price*0,8

FROM meat_product

WHERE meat_product.price > 80

UNION

SELECT sweets_product.name, sweets_product.price*0,8

FROM sweets_product

WHERE sweets_product.price > 50;

 

Отриманий запит поверне дві колонки ім’я продукту та його ціну зі знижкою 20%, якщо ціна за пляшку спиртного більша 150 грн., ціна за кілограм м’ясного виробу більша за 80 грн./кг., та солодощів ціна яких більша за 50 грн./кг. Данний метод знижок ще має один позитивний момент: якщо пляшка спиртного коштує 151 грн., то з урахуванням знижок буде 120,8 грн., тому клієнти які хотіли купити пляшку за 110 грн., будуть брати вакційний товар.

Примітка оператор UNION може використовуватися і для добавлення рядка в результат запиту, наприклад, якщо ми забажаємовивести додати рядок "|Всього |xxx|" до виводу запиту товарів із таблиці sweets_, де ххх – загальна кількість гривень які отримаються пістя продажу усього товару, то запит матиме вигляд:

 

SELECT * FROM sweets_product

UNION

SELECT 'Всього:', SUM(sweets_product.price);