Лабораторна робота № 4
Тема. Структуровані запити і підзапити.
Завдання .Створити запити на об’єднання декількох таблиць. Використати самооб’єднання таблиці (таблицю об’єднують саму з собою). Не менше 10 запитів. Крім того створити підзапити з використанням not in, all, any, exists, not exists. Створити підзапити з використанням update, delete, insert.
1.Об’єднання таблиць
select robitnyk.kod_robitnyka,robitnyk.posada,zeh.nazva_zehu
from robitnyk,zeh
where robitnyk.zarplata>3000
and robitnyk.full_name=zeh.full_name
and zeh.kod_zehu>15;
select zeh.full_name,zeh.nazva_zehu,zamovlennya.kod_klienta
from zeh,zamovlennya
where zamovlennya.data_zamov lennya>‘2014-09-27 12:34:45’
and zeh.nazva_tovaru=zamovlennya.nazva_tovaru
and kilkist_robitnykiv>60 ;
select klient.full_name,klient.adressa,zamovlennya.data_zamovlennya
from klient,zamovlennya
where zamovlennya.nazva_tovaru like'%k%'
and zamovlennya.kod_klienta=klient.kod_klienta
and klient.telefon not like'%9%4%7%';
select zamovlennya.kod_klienta,zeh.kod_zehu,robitnyk.telefon
from zamovlennya,zeh,robitnyk
where robitnyk.stazh>2
and robitnyk.full_name=zeh.full_name
and zeh.nazva_tovaru=zamovlennya.nazva_tovaru
and zamovlennya.cina between 50000 and 95000
and zeh.kilkist_robitnykiv>50;
select klient.full_name,zamovlennya.data_vykonannya as data,zeh.nazva_zehu
from klient,zeh,zamovlennya
where zeh.full_name like '%v%' and zeh.nazva_tovaru=zamovlennya.nazva_tovaru and zamovlennya.kod_klienta=klient.kod_klienta
and zamovlennya.data_zamovlennya between '2015-01-15 13:00:00' and '2015-03-15 12:00:00'
and klient.Nayavnist_znyzhky=1;
select robitnyk.kod_robitnyka as robitnyk,zeh.nazva_zehu as zeh,klient.kod_klienta as klient,zamovlennya.data_zamovlennya as work_begin,zamovlennya.data_vykonannya as work_end from robitnyk,zeh,klient,zamovlennya
where robitnyk.adressa not like'a%'
and robitnyk.full_name=zeh.full_name and zeh.nazva_tovaru=zamovlennya.nazva_tovaru
and zamovlennya.kod_klienta=klient.kod_klienta
and zamovlennya.cina>90000 and zeh.kilkist_robitnykiv>25 ;
2.Самооб’єднання таблиць
select a.kod_robitnyka,a.full_name,a.telefon
from robitnyk a,robitnyk b
where a.stazh=b.stazh
and a.posada!=b.posada
order by a.full_name;
select a.kod_robitnyka as kod,a.full_name as name,a.kilkist_robitnykiv
from zeh a,zeh b
where a.nazva_tovaru!=b.nazva_tovaru
and a.nazva_zehu=b.nazva_zehu
and a.kod_robitnyka=b.kod_robitnyka;
select distinct a.kod_klienta as klient,a.nazva_tovaru as tovar,a.cina
from zamovlennya a,zamovlennya b
where a.cina=b.cina
and a.data_zamovlennya between ’ 2014-05-14 17:30:00‘ and '2015-01-23 12:45:00' ;
select a.kod_klienta as klient,a.full_name as name
from klient a,klient b
where a.kod_klienta=b.kod_klienta
and a.nayavnist_znyzhky!=true;
Підзапити
Not IN
select posada,zarplata,stazh from robitnyk where posada like '%a%'
and zarplata not in
(select zarplata from robitnyk where zarplata>3000 )
and stazh not in
(select stazh from robitnyk where stazh<4);
All
Cинтаксис: операнд операція_порівняння ALL {підзапит)
Слово ALL, яке має слідувати за операцією порівняння, означає "повернути TRUE, якщо порівняння дає TRUE для всіх рядків, що повертаються підзапитом"
select full_name as name,nazva_tovaru as tovar from zeh where kod_zehu*10<all
(select kod_klienta from zamovlennya) order by full_name;
Any
Синтаксис:
операнд операція_порівняння ANY {підзапит)
Ключове слово ANY, яке має слідувати за операцією порівняння, означає "повернути TRUE, якщо порівняння дає TRUE для будь-якого з рядків, які повертає підзапит”
select kod_robitnyka,adressa from robitnyk where zarplata*100<any
(select cina from zamovlennya );
Exists
Якщо підзапит взагалі повертає якісь значення, то EXISTS підзапит повертає TRUE, a NOT EXISTS підзапит – FALSE.
select full_name,nayavnist_znyzhky from klient where full_name not like 'b%'
and exists (select kod_klienta from zamovlennya where zamovlennya.kod_klienta=klient.kod_klienta );
Not Exists
select full_name as name,nazva_zehu as zeh from zeh where kilkist_robitnykiv <50
and not exists (select nazva_tovaru from zamovlennya where zamovlennya.nazva_tovaru=zeh.nazva_tovaru ) ;
Delete
delete from zamovlennya where kod_klienta<any
(select kod_klienta from klient) ;
Update
update zeh set kilkist_robitnykiv=kilkist_robitnykiv-10 where nazva_tovaru like'%a%' and kod_zehu*10<all
(select kod_klienta from zamovlennya);
