Summary Files Commits Branches @commit @diff @stats
path: root / Year 3 / Databases / Practice06.sql
diff options
context:
space:
mode:
Commit0ba0b3564b23176696f40a3bf31967560803276b (patch)
Author
 Syndamia <kamen@syndamia.com>
2024-04-16 08:38:40 +0300
Committer
 Syndamia <kamen@syndamia.com>
2024-04-16 08:38:40 +0300
Files18ce0c0bf1d203fa46a2f5a2dcc5658ef59ed7f2 /Year 3/Databases/Practice06.sql
uni-projects-0ba0b3564b23176696f40a3bf31967560803276b.tar
uni-projects-0ba0b3564b23176696f40a3bf31967560803276b.tar.gz
uni-projects-0ba0b3564b23176696f40a3bf31967560803276b.zip
Parent5a5975b377236b4a443dbd2bad3545204d678acb (diff)
[DB/P6] Solved some of the exercises
1 files changed, 103 insertions, 0 deletions
-rw-r--r--Year 3/Databases/Practice06.sql103
diff --git a/Year 3/Databases/Practice06.sql b/Year 3/Databases/Practice06.sql
new file mode 100644
index 0000000..8747a63
--- /dev/null
+++ b/Year 3/Databases/Practice06.sql
@@ -0,0 +1,103 @@
+-- 1. За всяка филмова звезда да се изведе името, рождената дата и с кое
+-- студио е записвала най-много филми. (Ако има две студиа с еднакъв
+-- брой филми, да се изведе кое да е от тях)
+use movies;
+
+
+-- 2. Да се изведат всички производители, за които средната цена на
+-- произведените компютри е по-ниска от средната цена на техните лаптопи.
+select p.maker, AVG(pc.price) from product p join pc on pc.model = p.model group by p.maker having AVG(pc.price) < (select AVG(l.price) from laptop l join product pr on pr.model = l.model where pr.maker = p.maker);
+-- 3. Един модел компютри може да се предлага в няколко конфигурации
+-- с евентуално различна цена. Да се изведат тези модели компютри,
+-- чиято средна цена (на различните му конфигурации) е по-ниска
+-- от най-евтиния лаптоп, произвеждан от същия производител.
+select p.model from product p join pc on pc.model = p.model group by p.model, p.maker having AVG(pc.price) < (select MIN(l.price) from laptop l join product pr on pr.model = l.model where pr.maker = p.maker);
+-- 4. Битките, в които са участвали поне 3 кораба на една и съща страна.
+select o.BATTLE from OUTCOMES o join SHIPS s on s.NAME = o.SHIP join CLASSES c on c.CLASS = s.CLASS group by c.COUNTRY having COUNT(s.NAME) >= 3;
+-- 5. За всеки кораб да се изведе броят на битките, в които е бил увреден.
+-- Ако корабът не е участвал в битки или пък никога не е бил
+-- увреждан, в резултата да се вписва 0.
+select s.NAME, COUNT(o.BATTLE) from SHIPS s left outer join OUTCOMES o on o.SHIP = s.NAME and o.RESULT = "damaged" group by s.NAME;
+-- 6. За всеки клас да се изведе името, държавата и първата година, в която
+-- е пуснат кораб от този клас
+select c.CLASS, c.COUNTRY, (select s.LAUNCHED from SHIPS s where s.CLASS = c.CLASS order by s.LAUNCHED asc LIMIT 1) from CLASSES c;
+-- 7. За всяка държава да се изведе броят на корабите и броят на потъналите
+-- кораби. Всяка от бройките може да бъде и нула.
+
+-- 8. Намерете за всеки клас с поне 3 кораба броя на корабите от
+-- този клас, които са с резултат ok.
+
+-- 9. За всяка битка да се изведе името на битката, годината на
+-- битката и броят на потъналите кораби, броят на повредените
+-- кораби и броят на корабите без промяна.
+
+-- 10. Да се изведат имената на корабите, които са участвали в битки в
+-- продължение поне на две години.
+
+-- 11. За всеки потънал кораб колко години са минали от пускането му на вода
+-- до потъването.
+
+-- 12. Имената на класовете, за които няма кораб, пуснат на вода след 1921 г.,
+-- но имат пуснат поне един кораб.
+
+
+-- 1. Всички филми, чието заглавие съдържа едновременно думите 'Star' и 'Trek'
+-- (не непременно в този ред). Резултатите да се подредят по година (първо
+-- най-новите филми), а филмите от една и съща година - по азбучен ред.
+select * from MOVIE m where m.TITLE like "%Star%Trek%" or m.TITLE like "%Trek%Star%" order by m.YEAR, m.TITLE;
+-- 2. Заглавията и годините на филмите, в които са играли звезди, родени между
+-- 1.1.1970 и 1.7.1980
+select distinct m.TITLE, m.YEAR from MOVIE m join STARSIN si on si.MOVIETITLE = m.TITLE join MOVIESTAR ms on ms.NAME = si.STARNAME where ms.BIRTHDATE > "19700101" and ms.BIRTHDATE < "19800701";
+-- 3. За всеки актьор/актриса изведете броя на различните студиа, с които са
+-- записвали филми, като не се интересуваме от тези, за които не е ясно
+-- в кои филми са се снимали.
+select si.STARNAME, COUNT(DISTINCT m.STUDIONAME) from STARSIN si join MOVIE m on m.TITLE = si.MOVIETITLE group by si.STARNAME;
+-- 4. За всеки актьор/актриса изведете броя на различните студиа, с които са
+-- записвали филми, като се интересуваме и от тези, за които не е ясно
+-- в кои филми са се снимали (0 студиа).
+select ms.NAME, COUNT(DISTINCT m.STUDIONAME) from MOVIESTAR ms left outer join STARSIN si on si.STARNAME = ms.NAME left outer join MOVIE m on m.TITLE = si.MOVIETITLE group by ms.NAME;
+-- 5. Изведете имената на актьорите, участвали в поне 2 филма след 1978 г.
+select si.STARNAME from STARSIN si join MOVIE m on m.TITLE = si.MOVIETITLE where si.MOVIEYEAR > 1978 group by si.STARNAME having COUNT(si.MOVIETITLE) >= 2;
+-- 6. Изведете най-дългия филм (ако са няколко с еднаква максималната дължина -
+-- да се изведат всичките.
+select * from MOVIE where LENGTH = (select MAX(LENGTH) from MOVIE);
+-- 7. Заглавията и годините на всички филми (без повторения), заснети преди 1982,
+-- в които е играл поне един актьор/актриса, чието име не съдържа нито буквата
+-- 'k', нито 'b'. Първо да се изведат най-старите филми.
+select distinct m.TITLE, m.YEAR from MOVIE m join STARSIN si on si.MOVIETITLE = m.TITLE where YEAR < 1982 and si.STARNAME not like "%K%" and si.STARNAME not like "%B" group by m.TITLE order by m.YEAR asc;
+-- 8. Заглавието, годината и дължината на всички филми, които са от същото студио,
+-- от което е и филма Terms of Endearment от 1983г., но дължината им е по-малка
+-- от неговата или неизвестна.
+select m.TITLE, m.YEAR, m.LENGTH from MOVIE m join (select * from MOVIE where TITLE = "Terms of Endearment" and YEAR = 1983) mm on m.LENGTH < mm.LENGTH or m.LENGTH is NULL;
+-- 9. Имената на всички продуценти, които са и филмови звезди и са играли в поне
+-- един филм преди 1980г. и поне един след 1985г.
+select me.NAME from MOVIEEXEC me join STARSIN si1 on si1.STARNAME = me.NAME and si1.MOVIEYEAR < 1980 join STARSIN si2 on si2.STARNAME = me.NAME and si2.MOVIEYEAR > 1985;
+-- 10. Всички черно-бели филми, записани преди най-стария цветен филм
+-- (InColor='y'/'n') на същото студио.
+
+-- 11. Имената и адресите на студиата, които са работили с по-малко от 4 различни
+-- филмови звезди. Студиа, за които няма посочени филми или има, но не се знае
+-- кои актьори са играли в тях, също да бъдат изведени.
+-- Първо да се изведат студиата, работили с най-много звезди. Например, ако
+-- студиото има два филма, като в първия са играли A, B и C, а във втория -
+-- C, D и Е, то студиото е работило с 5 звезди общо.
+
+-- 12. Компютрите, които са по-евтини от всеки лаптоп на същия производител.
+
+-- 13. Компютрите, които са по-евтини от всеки лаптоп и принтер на същия производител.
+
+-- 14. Да се изведат различните модели компютри, подредени по цена на най-скъпия
+-- конкретен компютър от даден модел.
+
+-- 15. Всички модели компютри, за които разликата в размера на най-големия и
+-- най-малкия харддиск е поне 20 GB.
+
+-- 16. За производителите на поне 2 лазерни принтера - броя на произвежданите PC-та
+
+-- 17. Да се изведат всички производители, за които средната цена на
+-- произведените компютри е по-ниска от средната цена на техните лаптопи
+
+-- 18. Един модел компютри може да се предлага в няколко конфигурации
+-- с евентуално различна цена. Да се изведат тези модели компютри,
+-- чиято средна цена (на различните му конфигурации) е по-ниска
+-- от най-евтиния лаптоп, произвеждан от същия производител.