Θέματα 3ης Εξέτασης με select

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 44

Θέματα στη Βάση Recipe

ΣΧΕΣΙΑΚΟ ΜΟΝΤΕΛΟ ΒΑΣΗΣ RECIPE

1
1η Εξέταση στη Βάση Recipe (2η Ομάδα-25/11/2015)

Απάντηση
1)select prize from award where aw_year like ‘2010’ and recipe_username like ‘antonia123’;

2) select title, reg_date_time from recipe where portions>4 and kcal>200 order by title;
 Αν ζητούσε ταξινόμηση σε φθίνουσα σειρά θα γράφαμε select title, reg_date_time from recipe where portions>4 and kcal>200
order by title desc;
 Αν ζητούσε μερίδες από 4 μέχρι 10 θα γράφαμε select title, reg_date_time from recipe where portions between 4 and 10 and
kcal>=200 order by title desc;

3) select surname, name, avg(grade) as mesos_oros from user inner join rating on username=user_username group by username
order by mesos_oros limit 0,1;

 Αν ζητούσε το πλήθος βαθμολογιών κάθε χρήστη θα γράφαμε: select surname, name, count(grade) as plithos from user inner
join rating on username=user_username group by username order by plithos;
 Αν ζητούσε το άθροισμα βαθμολογιών κάθε χρήστη θα γράφαμε: select surname, name, sum(grade) as synolo from user inner
join rating on username=user_username group by username order by synolo;

4) select recipe.title, user.name, user.surname from user inner join editor on user.username=editor.username inner join recipe on
editor.username=recipe.username order by kcal limit 0,4;

5) select user.name, user.surname from user inner join editor on user.username=editor.username inner join recipe on editor.user -
name=recipe.username group by editor.username having count(AA)>2;

Αν ζητούσε το ονοματεπώνυμο των συντακτών που έχουν συντάξει από 2 μέχρι 4 συνταγές θα γράφαμε

 select user.name, user.surname from user inner join editor on user.username=editor.username inner join recipe on editor -
.username=recipe.username group by editor.username having count(AA)>=2 and count(AA)<=4

ή εναλλακτικά

 select user.name, user.surname from user inner join editor on user.username=editor.username inner join recipe on editor -
.username=recipe.username group by editor.username having count(AA) between 2 and 4

2
2η Εξέταση στη Βάση Recipe (4η Ομάδα-25/11/2015)

Απάντηση
1) select title, kcal, portions from recipe where prescription like '%nero%' and description like '%pio%';
 Αν ζητούσε είτε να περιέχεται η λέξη pio είτε στα βήματα η λέξη nero θα γράφαμε: select title, kcal, portions from recipe where
prescription like '%nero%' or description like '%pio%';

2) select * from recipe inner join rating on AA=recipe_AA where grade>5 and reg_time>'2011-7-31';

 Αν ζητούσε εντός του Ιουλίου 2011 θα γράφαμε: select * from recipe inner join rating on AA=recipe_AA where grade>5 and
reg_time between '2011-7-1' and '2011-7-31'

3) select distinct a.title from category as a inner join category as b on a.fid=b.id where a.title like '%kouzina%';

 Αν ζητούσε το όνομα και της κάθε κατηγορίας και της γονικής της θα γράφαμε: select distinct a.title, b.title from category as a
inner join category as b on b.id=a.fid where b.title like '%kouzina%';

4) select distinct title from recipe inner join contains on recipe.AA=contains.recipe_AA inner join ingredient on
contains.ingr_id=ingredient.id;

Εναλλακτικά select μπορούμε να γράψουμε την εντολή ως: distinct title from recipe, contains, ingredient where recipe.AA=contain-
s.recipe_AA and contains.ingr_id=ingredient.id;

 Αν ζητούσε το όνομα των συνταγών ανεξάρτητα από το αν έχουν αντιστοιχηθεί σε αυτές συστατικά, τότε θα γράφαμε:

select distinct title from recipe left join contains on AA=recipe_AA left join ingredient on contains.ingr_id=ingredient.id;

5) select name, surname, recipe.title, category.title from user, editor, recipe, contains, ingredient, category where
user.username=editor.username and editor.username=recipe.username and recipe.cat_id=category.id and recipe.AA=contains.re-
cipe_AA and contains.ingr_id=ingredient.id and ingredient.description like '%rigani%';

3
3η Εξέταση στη Βάση Recipe (1η Ομάδα-28/11/2016)

Απάντηση
1. select title,cook_time from recipe where kcal<250;

2. select AA from recipe inner join rating on AA=recipe_AA order by grade desc limit 0,5;

3. select title from recipe group byusername order by reg_date_time;

4. select recipe.title, count(user_username) from recipe inner join rating on recipe_AA=AA group by recipe.AA;

 select recipe.title, count(user_username) from recipe left join rating on recipe_AA=AA group by AA;  έτσι εμφανίζονται όλες

οι συνταγές είτε έχουν βαθμολογηθεί είτε όχι

5. select count(award.recipe_AA) from award inner join recipe on award.recipe_AA=recipe.AA inner join contains on

recipe.AA=contains.recipe_AA inner join ingredient on contains.ingr_id=ingredient.id where description like '%nero%';

Ενναλακτικά

 select count(award.recipe_AA) from award, recipe, contains, ingredient where recipe_AA=recipe.AA and recipe.AA=contain -

s.recipe_AA and contains.ingr_id=ingredient.id and description like '%nero%';

4
Θέματα στη Βάση Trip
1η Εξέταση στη Βάση Trip (2η Ομάδα 2/11/2015)

Απαντήσεις
1) select * from worker where wrk_AT like 'AB%' and wrk_salary>1000;

2) select * from event where ev_tr_id=3 and ev_start='2018-4-20' order by ev_start;


Ενναλακτικά η ίδια εντολή μπορεί να γραφεί ως εξής: select * from event inner join trip on ev_tr_id=tr_id where tr_id=3 and
ev_start='2016-4-20' order by ev_start;

3) select br_code, br_street, br_num, br_city, count(work_AT) from branch inner join worker on br_code=wrk_br_code group by
br_code;

4) select wrk_name, wrk_lname, gui_cv, lng_language from worker inner join guide on wrk_AT=gui_AT inner join languages on
gui_AT=lng_gui_AT;

5
Παράδειγμα με group by στο 3)
br_code wrk_AT br_code wrk_AT
1 5 5
1 10 10
1
1 20 Μετά το group by br_code θα έχουμε:
20

2 30 30
2
3 40 60
4 50 40
3
2 60 80
3 80 4 50

6
2η Εξέταση στη Βάση Trip (1η Ομάδα 2/11/2015)

Απαντήσεις
1) select * from driver where drv_license like 'C' and drv_experience>5;

2)select * from trip where tr_departure between '2011-2-1' and '2011-2-28' order by tr_departure;

Εναλλακτικά η εντολή αυτή γράφεται ως εξής:


select * from trip where tr_departure >= '2011-2-1' and tr_departure<='2011-2-28' order by tr_departure;

3) select distinct a.dst_name, a.dst_location, b.dst_name from destination as a left join destination as b on a.dst_location=b.dst_id
where b.dst_language like 'Greek';

7
4) select tr_id, tr_cost, dst_name from trip inner join travel_to on tr_id=to_tr_id inner join destination on to_dst_id=dst_id;
3η Εξέταση στη Βάση Trip (2η Ομάδα 27/11/2017)

Απάντηση
1. select adm_AT from admin where adm_diploma like ‘economics’;

2. select drv_AT from driver where drv_route like ‘ABROAD’ order by drv_experience desc;

3. select res_name, res_lname, tr_departure, tr_cost from trip inner join reservation on tr_id=res_tr_id order by tr_cost asc,
res_lname asc;

4. select wrk_AT, wrk_name, wrk_lname, count(tr_id) from worker inner join driver on wrk_AT=drv_AT inner join trip on
drv_AT=tr_drv_AT group by drv_AT order by wrk_lname;

8
5. select wrk_name, wrk_lname, br_code, br_city, adm_type from branch inner join worker on br_code=wrk_br_code inner join ad-
min on wrk_AT=adm_AT inner join manages on mng_adm_AT=adm_AT where adm_type like ‘ADMINISTRATIVE’ or adm_type
like ‘ACCOUNTING’;

4η Εξέταση στη Βάση Trip (2η Ομάδα 7/2/2018)

Απαντήσεις
1) SELECT TR_ID,TR_DEPARTURE,TR_RETURN,TR_COST FROM TRIP WHERE TR_COST BETWEEN 300 AND 1500
ORDER BY TR_COST;//δεν βάζουμε τρόπο ταξινόμησης γιατί εξορισμού ισχύει η αύξουσα σειρά
9
Εναλλακτικά το ερώτημα μπορεί να γραφεί ως εξής:
SELECT TR_ID,TR_DEPARTURE,TR_RETURN,TR_COST FROM TRIP WHERE TR_COST>= 300 AND TR_COST<= 1500
ORDER BY TR_COST

2) SELECT WRK_NAME,WRK_LNAME,WRK_SALARY FROM WORKER WHERE WRK_SALARY>1000 AND


WRK_LNAME LIKE 'X%' OR WRK_LNAME LIKE 'G%' ORDER BY WRK_SALARY DESC;

3) SELECT A.DST_NAME, A.DST_LOCATION, B.DST_NAME FROM DESTINATION AS A LEFT JOIN DESTINATION AS


B ON A.DST_LOCATION=B.DST_ID WHERE A.DST_LANGUAGE LIKE 'GERMAN' AND A.DST_RTYPE LIKE 'ABROAD';

Εναλλακτικά θα γράφαμε INNER JOIN αντί για LEFT JOIN αν δεν έλεγε να εμφανίζεται null στην τρίτη στήλη και η εντολή θα
γραφόταν ως εξής:
SELECT A.DST_NAME, A.DST_LOCATION, B.DST_NAME FROM DESTINATION AS A INNER JOIN DESTINATION AS
B ON A.DST_LOCATION=B.DST_ID WHERE A.DST_LANGUAGE LIKE 'GERMAN' AND A.DST_RTYPE LIKE 'ABROAD';

4) SELECT BR_CODE, BR_STREET, BR_NUM, BR_CITY, COUNT(WRK_AT) FROM BRANCH INNER JOIN WORKER ON
BR_CODE=WRK_BR_CODE GROUP BY BR_CODE;

Ενναλακτικός τρόπος γραφής: SELECT BR_CODE, BR_STREET, BR_NUM, BR_CITY, COUNT(WRK_AT) AS PLITHOS_ER-
GAZOMENWN FROM BRANCH, WORKER WHERE BR_CODE=WRK_BR_CODE GROUP BY BR_CODE.

5) SELECT TR_ID, TR_DEPARTURE, TR_RETURN, WRK_NAME, WRK_LNAME, GUI_CV FROM TRIP INNER JOIN
GUIDE ON TR_GUI_AT=GUI_AT INNER JOIN WORKER ON WRK_AT=GUI_AT;

Ενναλακτικός τρόπος γραφής: SELECT TR_ID, TR_DEPARTURE, TR_RETURN, WRK_NAME, WRK_LNAME, GUI_CV
FROM TRIP, GUIDE, WORKER WHERE TR_GUI_AT=GUI_AT AND WRK_AT=GUI_AT;

10
1η Εξέταση στη βάση Trip (2η Ομάδα-21/11/2019)

Απάντηση
1. select adm_AT from admin where adm_diploma like ‘economics’;

2. select drv_AT from driver where drv_route like ‘ABROAD’ order by drv_experience desc;

3. select res_name, res_lname, tr_departure, tr_cost from trip inner join reservation on tr_id=res_tr_id order by tr_cost asc,
res_lname asc;

11
4. select wrk_AT, wrk_name, wrk_lname, count(tr_id) from worker inner join driver on wrk_AT=drv_AT inner join trip on
drv_AT=tr_drv_AT group by drv_AT order by wrk_lname;

5. select wrk_name, wrk_lname, br_code, br_city, adm_type from branch inner join worker on br_code=wrk_br_code inner join
admin on wrk_AT=adm_AT inner join manages on mng_adm_AT=adm_AT where adm_type like ‘ADMINISTRATIVE’ or
adm_type like ‘ACCOUNTING’;

12
2η Εξέταση στη βάση Trip (2η Ομάδα-21/11/2019)

Απάντηση
1) select dst_name from destination where dst_type like ‘L%L’

2) select wrk_name, wrk_lname, wrk_salary from worker where wrk_salary<1000 order by wrk_lname, wrk_name desc

3)select * from reservation inner join trip on tr_id=res_tr_id where tr_departure<’2018-4-1’ and res_isadult like ’Adult’;

13
4) select wrk_name, wrk_lname, gui_cv, count(lng_language) from worker inner join guide on wrk_AT=gui_AT inner join languages
on gui_AT=lng_gui_AT group by gui_AT;

5) select tr_departure, tr_return, wrk_name, count(ev_tr_id) from event inner join trip on tr_id=ev_tr_id inner join guide on
tr_gui_AT=gui_AT inner join worker on gui_AT=wrk_AT having count(ev_tr_id)>2;

14
Πιθανές Ερωτήσεις στη βάση Trip
 onoma epwnumo tou ka8e odhgou pou exei adeia gia lewforeio kathws kai to biografiko tou
 select wrk_name,wrk_lname,gui_cv from driver inner join worker on drv_AT=wrk_AT inner join guide on wrk_AT=gui_AT
where drv_license like 'lewforeio';

 na emfanizetai to onoma tou proorismou kai to plithos ekdromwn se auton ton proorismo
 select dst_name,count(to_tr_id) from destination inner join travel_to on dst_id=to_dst_id group by dst_name;

 na emfanizetai o mesos mis8os gia tous odhgous pou exoun sumplhrwsei toulaxiston 5 xronia
 select avg(wrk_salary) from driver inner join worker on drv_AT=wrk_AT group by drv_experience where drv_experience>=5;

 na emfanizetai to onomatepwnumo ka8e ergazomeou pou dieu8unei katasthma kai to plh8os twn katasthmatwn autwn. An
dieu8unei perissotera katasthmata to onoma tou na emfanizetai mia fora
 select distinct wrk_name,wrk_lname,count(br_code) from worker inner join admin on wrk_AT=adm_AT inner join manages
on adm_AT=mng_adm_AT inner join branch on mng_br_code=br_code group by wrk_AT;

 na emfanizetai ta stoixeia twn ekdromwn pou diorganwnontai apo upokatasthmata ths athinas kai exoun proorismous pou h omi-
loumenh glwssa einai english
 select * from trip,branch,travel_to,destination where br_code=tr_br_code and tr_id=to_tr_id and to_dst_id=dst_id and br_city
like 'Athina' and dst_language like 'English';

 na emfanizetai h hmeromhnia anaxwrhshs kai epistrofhs gia ola ta taxidia me toulaxiston 20 krathseis
 select tr_departure,tr_return from trip inner join reservation on tr_id=res_tr_id having count(res_seatnum)>=20;

 na emfanizetai o proorismos twn 3 ekdromwn me tis perissoteres krathseis


 select dst_name from destination inner join travel_to on dst_id=to_dst_id inner join trip on to_tr_id=tr_id inner join
tr_id=res_tr_id order by count(res_seatnum) desc limit 0,3;

 να εμφανίζεται το πλήθος των δραστηριοτήτων ανά εκδρομή και ο κωδικός εκδρομής για όσες εκδρομές αναχωρούν τον Ιούλιο
του 2016 και επιστρέφουν τον Αϋγουστο του 2016
 select tr_id,count(ev_tr_id) as plithos from trip inner join event on tr_id=ev_tr_id group by tr_id where tr_departure between
'2016-7-1' and '2016-7-31' and tr_return between '2016-8-1' and '2016-8-31'

 Να εμφανίζεται το ονοματεπώνυμο κάθε ξεναγού και το πλήθος γλωσσών που μιλα για όσους ξεναγούς μιλούν τουλάχιστον 2
ξένες γλώσσες
 select distinct name,lname,count(lng_language) as plithos from worker inner join guide on wrk_AT=gui_AT inner join lan-
guages on gui_AT=lng_gui_AT group by gui_AT having count(lng_language)>=2;

15
Θέματα στη Βάση Erecruit
1η Εξέταση στη βάση ERecruit (2η Ομάδα-5/11/2018)

Απάντηση

1. select url,username from candidate inner join project on username=candid where descr not like %App%;

2. select surname as 'epitheto', name as 'onoma', email from user where reg_date <'2017-6-1' order by reg_date desc;

3. select username, id, position from recruiter inner join job on username=recruter where exp_years>4 order by exp_years desc;

16
4. select username, surname, name, email, count(job_id) from candidate inner join applies on username=cand_username where user-
name not like %li% having count(job_id)>2;

5. select name, position, title from etaireia, recruiter, job, requires, antikeim where etaireia.AFM=recruiter firm and recruiter user-
name=job.recruiter and job.id=requires.job_id and requires.antikeim_title=antikeim.title and edra like %Patra% and antikeim.descr
like %Program%;

17
2η Εξέταση στη βάση ERecruit (2η Ομάδα-5/11/2018)

Απάντηση

1. select name, surname, reg_date, titlos, etos from candidate, has_degree,degree where username=cand_usrname and deg_title=titlos
and titlos like ‘master’ or titlos like ‘phd’;

2. select username from recruiter where exp_years>4 and exp_years<8;

3. select surname as epitheto,name as onoma,reg_date from user where email not like ‘%.gr’ order by reg_date desc;

4. select id, salary, edra, title from job inner join requires on id=job_id inner join antikeim on antikeim_title=title where
announce_date>’2018-11-1’;

5. select username, ceriticates, count(deg_title), avg(grade) from candidate inner join has_degree on username=cand_usrname hav-
ing count(deg_title)>1;
18
19
3η Εξέταση στη βάση ERecruit (1η Ομάδα-18/11/2020)

20
Συντάξτε κατάλληλα SQL ερωτήματα που να εμφανίζουν:
1. Τα username και το βιογραφικό των υποψηφίων για εκείνους τους υποψήφιους που στο βιογραφικό τους περιέχεται το string freelancer
2. Τους τίτλους και το id εκείνων των θέσεων εργασίας(job) με μισθό μεγαλύτερο των 1500 και έδρα την Πάτρα ταξινομημένα με φθίνουσα σειρά μισθού
3. Τους κωδικούς, την περιγραφή (position), την έδρα εργασίας την ημερομηνία ανάρτησης της θέσης και την ημερομηνία υποβολής αιτήσεων για όλες τις θέσεις εργασίας (job) που έχουν μισθό
μεγαλύτερο από 1000 ευρώ και ημερομηνία υποβολής αιτήσεων πριν την 1/2/2019. Τα αποτελέσματα να ταξινομηθούν με βάση την ημερομηνία ανακοίνωσης της θέσης με την παλαιότερη
τελευταία.
4. Το επώνυμο και όνομα εκείνων των υποψηφίων που ξέρουν Γαλλικά ταξινομημένα με το επώνυμό τους.
5. To username, το όνομα του αρχείου με τις συστατικές επιστολές (sistatikes), το πλήθος των πτυχίων που έχει κάθε υποψήφιος και το μέσο όρο της βαθμολογίας του από αυτά, για τους
υποψήφιους που έχουν περισσότερα από 1 πτυχία.
Απαντήσεις
1. select username, bio from candidate where bio like '%freelancer%';
Αποτελέσματα Εκτέλεσης
username | bio
| lionarF | Freddy is an experienced web programmer but has also worked on moble apps development the last 5 years. He is a freelancer and can work from a dis
tance. He can also manage 2d graphics and has long experience with DB scripting (My SQL, MariaDB, MS SQL Server and Oracle. |
1 row in set (0.00 sec)

2. select id from job where salary >1500 and edra like 'Patra' order by salary desc;
Αποτελέσματα Εκτέλεσης
| id |
+----+
| 3|
| 1|
+----+

3.select id, position, edra, announce_date, submission_date from job where salary>1000 and submission_date<'2019-2-1' order by announce_date desc;
Αποτελέσματα Εκτέλεσης
| id | position | edra | announce_date | submission_date |
| 11 | Algorithmic efficiency expert | Sofia, Bulgaria | 2018-11-01 00:00:00 | 2019-01-16 |
| 12 | web and media programmer | Oxford, London | 2018-11-01 00:00:00 | 2019-01-03 |
21
| 3 | mobile app developer | Patra, Greece | 2018-10-24 00:00:00 | 2018-01-12 |
| 6 | Visualization expert | Peiraias, Greece | 2018-10-20 00:00:00 | 2019-01-10 |
| 4 | NLP expert | Peiraias, Greece | 2018-10-10 00:00:00 | 2018-11-10 |
| 1 | data analyst | Patra, Greece | 2018-07-13 00:00:00 | 2018-12-20 |
| 2 | web programmer | Patra, Greece | 2018-07-13 00:00:00 | 2019-01-10 |
+----+-------------------------------+------------------+---------------------+-----------------+

4. select name, surname from user inner join candidate on user.username=candidate.username inner join languages on candidate.username=languages.candid where lang like '%FR%' order by
surname;
Αποτελέσματα Εκτέλεσης
+---------+--------------+
| name | surname |
+---------+--------------+
| Freddy | Lionar |
| Andrew | McBrown |
| Manolis | Nikopoloulos |
+---------+--------------+

5. select candidate.username, sistatikes, count(degr_title), avg(grade) from candidate inner join has_degree on candidate.username=has_degree.cand_usrname group by candidate.username hav-
ing count(degr_title)>1;
Αποτελέσματα Εκτέλεσης
+-----------+------------------------+-------------------+------------+
| username | sistatikes | count(degr_title) | avg(grade) |
+-----------+------------------------+-------------------+------------+
| abrown | lettersscannedMcBr.pdf | 3| 8.46667 |
| liagourma | lettersLiagk.pdf | 3| 8.53333 |
| lionarF | LionFr_letters.pdf | 2| 8.05000 |
| mnikol | referralLetNikol.pdf | 2| 7.90000 |
| zazahir23 | Mobasher_rec.pdf | 2| 8.60000 |
+-----------+------------------------+-------------------+------------+
22
4η Εξέταση στη βάση ERecruit (2η Ομάδα-18/11/2020)

Απάντηση
1.
select username from candidate where bio like '%programmer%' or bio like '%programming%';
Αποτελέσματα Εκτέλεσης
+-----------+
| username |
+-----------+
| cleogeo |
| lionarF |
| zazahir23 |
23
+-----------+

2.
select * from job where edra like '%Patra%' and announce_date < '2018-10-1' order by salary desc;
Αποτελέσματα Εκτέλεσης
+----+------------+--------+----------------+---------------+-----------+---------------------+-----------------+
| id | start_date | salary | position | edra | recruiter | announce_date | submission_date |
+----+------------+--------+----------------+---------------+-----------+---------------------+-----------------+
| 1 | 2019-01-01 | 1800.0 | data analyst | Patra, Greece | n_tri | 2018-07-13 00:00:00 | 2018-12-20 |
| 2 | 2019-02-01 | 1450.0 | web programmer | Patra, Greece | n_tri | 2018-07-13 00:00:00 | 2019-01-10 |
+----+------------+--------+----------------+---------------+-----------+---------------------+-----------------+

3.
select id, position, edra, announce_date from job where salary>1400 and submission_date>'2019-2-1' order by announce_date desc;
Αποτελέσματα Εκτέλεσης
+----+-------------------------------+-----------------+---------------------+
| id | position | edra | announce_date |
+----+-------------------------------+-----------------+---------------------+
| 10 | AI expert | Sofia, Bulgaria | 2018-11-21 00:00:00 |
| 7 | web and mobile app programmer | Athina, Greece | 2018-11-20 00:00:00 |
| 8 | graphics expert | Athina, Greece | 2018-11-20 00:00:00 |
| 9 | DB expert | Athina, Greece | 2018-11-20 00:00:00 |
+----+-------------------------------+-----------------+---------------------+

4.
select user.username, user.name, user.surname, user.reg_date, user.email from user inner join recruiter on user.username=recruiter-
.username where exp_years>=5 order by exp_years desc;
Αποτελέσματα Εκτέλεσης
+----------+---------+-----------+---------------------+----------------------+
| username | name | surname | reg_date | email |
+----------+---------+-----------+---------------------+----------------------+
| pavkie | Pavel | Skiev | 2017-03-25 11:23:45 | pskiev@social-sc.bg |
| Giankost | Giannis | Kostoglou | 2018-02-23 11:08:15 | kostog@typology.gr |
| n_tri | Nikol | Triantou | 2018-03-08 20:10:20 | triantou@typology.gr |
| bettyg | Betty | Georgiou | 2017-04-12 12:23:10 | georb@softsol.gr |
| papad | Kostas | Papadatos | 2018-11-17 23:10:08 | georb@softsol.gr |
+----------+---------+-----------+---------------------+----------------------+

5. select username, certificates, count(degr_title) as 'Plithos Ptyxion', avg(grade) as 'MO Bathmologias' from candidate inner join
has_degree on username=cand_usrname group by username having count(degr_title)>2;
Αποτελέσματα Εκτέλεσης
+-----------+-------------------+-----------------+-----------------+
| username | certificates | Plithos Ptyxion | MO Bathmologias |
+-----------+-------------------+-----------------+-----------------+

24
| abrown | degrees-cert.pdf | 3| 8.46667 |
| liagourma | trainingLiagk.pdf | 3| 8.53333 |
+-----------+-------------------+-----------------+-----------------+

25
5η Εξέταση στη βάση ERecruit (3η Ομάδα-19/11/2020)

Συντάξτε κατάλληλα SQL ερωτήματα που να εμφανίζουν:


1. Τα username, τα url και τις περιγραφές των Projects των υποψηφίων με περιγραφή που περιέχει το αλφαριθμητικό ‘exampl’.
2. Το όνομα, το ΑΦΜ, το τηλέφωνο, την πόλη των εταιρειών που βρίσκονται στην Ελλάδα, κατά αντίστροφη αλφαβητική σειρά με
βάση το όνομα .
3. Το όνομα, το επίθετο, το όνομα του αρχείο με τις συστατικές (η στήλη να εμφανίζεται ως ‘Recommendations filename’) και το
email των υποψήφιων που εγγράφηκαν στο σύστημα μετά την 1/1/2018 και το email τους λήγει σε .com
4. To όνομα, το επώνυμο και τον βαθμό πτυχίου των ατόμων με MASTER με αλφαβητική σειρά.
5. Τα ονόματα των εταιρειών με έδρα την Πάτρα που έχουν ανακοινώσει θέσεις εργασίας την περιγραφή των θέσεων αυτών
(position), καθώς και τον τίτλο των αντικειμένων που σχετίζονται με τις θέσεις, για τις οποίες το αντικείμενο περιλαμβάνει στον
τίτλο του το string ‘Program’.
Απαντήσεις
1) select candidate.username, project.url, project.descr from candidate inner join project on candidate.username=project.candid
where project.descr like exampl;

2) select etaireia.name, etaireia.AFM, etaireia.tel, etaireia.city from etaireia where etaireia.country like 'Greece' order by etaireia.-
name desc;

3)select user.name, user.surname, candidate.sistatikes as Recommendations filename, user.email from user inner join candidate on
user.username=candidate.username where user.email like '%.com%' and reg_date>'2018-1-1';

4) select user.name, user.surname, has_degree.grade from user inner join candidate on user.username=candidate.username inner join
has_degree on candidate.username=has_degree.cand_usrname where degr_title like '%MASTER%' order by user.surname, user.-
name;

5) select etaireia.name, job.position, antikeim.title from etaireia inner join recruiter on etaireia.AFM=recruiter.firm inner join job on
recruiter.username=job.recruiter inner join requires onjob.id=requires.job_id inner join antikeim on requires.antikeim_title=anti-
keim.title where antikeim.title like '%Program%’ and job.edra like 'Patra';

26
6η Εξέταση στη βάση ERecruit (4η Ομάδα-19/11/2020)

Απάντηση
1.
select * from recruiter where exp_years>5;
Εμφάνιση Αποτελεσμάτων
+----------+-----------+-----------+
| username | exp_years | firm |
+----------+-----------+-----------+
| bettyg | 6 | 123432211 |
| Giankost | 8 | 023451232 |
| n_tri | 8 | 023451232 |
| pavkie | 10 | 23122345 |
+----------+-----------+-----------+
Παρατήρηση
Το * στο select υπονοεί α) όλες τις εγγραφές που ικανοποιούν τα κριτήρια και β) όλα τα πεδία κάθε εγγραφής

2.
27
select * from job where edra like '%Patra%' and submission_date>'2019-1-1' or edra like '%Athina%') and submission_date>'2019-1-1';

Εναλλακτικά και αυτό είναι σωστό:


select * from job where (edra like '%Patra%' or edra like '%Athina%') and submission_date>'2019-1-1';
Εμφάνιση Αποτελεσμάτων
+----+------------+--------+-------------------------------+----------------+-----------+---------------------+-----------------+
| id | start_date | salary | position | edra | recruiter | announce_date | submission_date |
+----+------------+--------+-------------------------------+----------------+-----------+---------------------+-----------------+
| 2 | 2019-02-01 | 1450.0 | web programmer | Patra, Greece | n_tri | 2018-07-13 00:00:00 | 2019-01-10 |
| 7 | 2019-05-01 | 1850.0 | web and mobile app programmer | Athina, Greece | papad | 2018-11-20 00:00:00 | 2019-04-12 |
| 8 | 2019-05-01 | 1600.0 | graphics expert | Athina, Greece | bettyg | 2018-11-20 00:00:00 | 2019-04-12 |
| 9 | 2019-05-01 | 1850.0 | DB expert | Athina, Greece | papad | 2018-11-20 00:00:00 | 2019-04-12 |
+----+------------+--------+-------------------------------+----------------+-----------+---------------------+-----------------+

Παρατηρήσεις
 Ο τελεστής or έχει μικρότερη προτεραιότητα από τον τελεστή and γιαυτό απαιτούνται παρενθέσεις στην edra

 Ο τελεστής like θέτει πάντα αλφαριθμητικά κριτήρια και επειδή στο πεδίο edra οι τιμές των εγγραφών είναι Patra, Greece είτε

Athina, Greece πρέπει να μπει και το σύμβολο % που συμβολίζει πολλούς και οποιουσδήποτε χαρακτήρες

 Οι ημερομηνίες μπαίνουν πάντα σε  και γράφονται αυστηρά με τη μορφή έτος-μήνας-ημέρα

 ΠΡΟΣΟΧΗ: Η ΕΠΟΜΕΝΗ ΕΝΤΟΛΗ ΕΙΝΑΙ ΛΑΘΟΣ ΔΙΟΤΙ ΛΕΙΠΟΟΥΝ ΟΙ ΠΑΡΕΝΘΕΣΕΙΣ:

select * from job where edra like '%Patra%' or edra like '%Athina%' and submission_date>'2019-1-1';

3.
select a.title, b.title from antikeim as a inner join antikeim as b on a.title=b.belongs_to where b.descr like '%level two%databases%'
or b.descr like '%level two%Programming%' order by a.title desc;
Αποτελέσματα Εκτέλεσης
+-------------+---------------------+
| title | title |
+-------------+---------------------+
| Programming | Mobile Apps |
| Programming | Web Programming |
| Databases | NoSQL DBs |
| Databases | Object-Oriented DBs |
| Databases | Relational DBs |

4.
select recruiter.username, user.name, exp_years from etaireia inner join recruiter on etaireia.afm =recruiter.firm inner join user on
recruiter.username=user.username where afm like '%34%' and exp_years>6 order by exp_years desc limit 0, 3;
Εμφάνιση Αποτελεσμάτων
+----------+---------+-----------+
| username | name | exp_years |
+----------+---------+-----------+

28
| pavkie | Pavel | 10 |
| Giankost | Giannis | 8|
| n_tri | Nikol | 8|
+----------+---------+-----------+

Παρατήρηση
Το προηγούμενο ερώτημα χωρίς inner join είναι
select recruiter.username, user.name, exp_years from etaireia, recruiter, user where etaireia.AFM=recruiter.firm and recruiter.user -
name=user.username and afm like '%34%' and exp_years>6 order by exp_years desc limit 0,3;
+----------+---------+-----------+
| username | name | exp_years |
+----------+---------+-----------+
| pavkie | Pavel | 10 |
| Giankost | Giannis | 8|
| n_tri | Nikol | 8|
+----------+---------+-----------+

5.
select username, count(id) as 'Plithos Theseon', avg(salary) as 'Mesos Oros Misthon' from recruiter inner join job on username=re-
cruiter where exp_years<10 group by username having count(id)>2 order by avg(salary) desc;
Εμφάνιση Αποτελεσμάτων
+----------+-----------------+--------------------+
| username | Plithos Theseon | Mesos Oros Misthon |
+----------+-----------------+--------------------+
| n_tri | 3| 1783.33333 |
+----------+-----------------+--------------------+
Παρατηρήσεις
 Με το count(id) όπου id το κλειδί του πίνακα job υπολογίζουμε το πλήθος θέσεων
 Με το avg(salary) υπολογίζουμε το μέσο όρο μισθών
 Με το group by(username) ομαδοποιούμε τις εγγραφές ανά username δηλ. ανά υπεύθυνο
 Με το having count(id)>2 θέτουμε κριτήριο σε αριθμητικό τύπο
 Με το order by avg(salary) κάνουμε ταξινόμηση εγγραφών

29
7η Εξέταση στη βάση ERecruit (5η Ομάδα-19/11/2020)

Συντάξτε κατάλληλα SQL ερωτήματα που να εμφανίζουν:

1. Τα username και τα έτη εμπειρίας των υπεύθυνων προσλήψεων (recruiter) που έχουν εμπειρία περισσότερη από 4 χρόνια και
λιγότερη από 8 (ονομάστε κατάλληλα τις στήλες των αποτελεσμάτων).

Απάντηση
select username as 'Username Ecruiter', exp_years as 'Eti Proyphresias' from recruiter where exp_years>4 and exp_years<8;
Εμφάνιση Αποτελεσμάτων
| Username Ecruiter | Eti Proyphresias |
+-------------------+------------------+
| bettyg | 6|
| papad | 5|
+-------------------+------------------+
Παρατήρηση
Θα μπορούσαμε αν χρησιμοποιήσουμε τον τελεστή between..and μόνο αν ζητούσε εμπειρία περισσότερη ή ίση από 4 χρόνια και
μικρότερη ή ίση από 8 χρόνια διότι το between..and πιάνει και τις ισότητες

2. Εμφανίστε τον τίτλο σπουδών, το ίδρυμα, το έτος λήψης τίτλου σπουδών και το username των ατόμων που πήραν πτυχίο μετά το
2007, κατά πανεπιστήμιο και αύξουσα σειρά βαθμού (ονομάστε κατάλληλα τις στήλες των αποτελεσμάτων).

Απάντηση

select username, degr_title as 'Titlos Spoudon', degr_idryma as 'Idryma', etos as 'Etos Lipsis' from candidate inner join has_degree
on username=cand_usrname where etos>2007 group by has_degree.degr_idryma order by grade;
Εμφάνιση Αποτελεσμάτων
+-----------+----------------------------------------+---------------------------------+-------------+
| username | Titlos SPoudon | Idryma | Etos Lipsis |
+-----------+----------------------------------------+---------------------------------+-------------+
| liagourma | Artificial Intelligence | Cambrigde University | 2008 |
| abrown | Big Data Structures and Algorithms | Technical University of Denmark | 2008 |
| liagourma | NLP related high efficiency algorithms | Patras University | 2013 |
+-----------+----------------------------------------+---------------------------------+-------------+
30
Εναλλακτικoί Τρόποι Γραφής
1. select username, degr_title as 'Titlos Spoudon', degr_idryma as 'Idryma', etos as 'Etos Lipsis' from candidate inner join has_degree
on username=cand_usrname where etos>2007 order by grade asc; εμφανίζουμε και τον τρόπο ταξινόμησης

2. select username, degr_title as 'Titlos Spoudon', degr_idryma as 'Idryma', etos as 'Etos Lipsis' from candidate, has_degree where
username=cand_usrname and etos>2007 order by grade asc; συσχέτιση πινάκων χωρίς το inner join

3. Το επίθετο, το όνομα και την ημερομηνία εγγραφής των 5 τελευταίων (πιο πρόσφατων) χρηστών που εγγράφηκαν και που το email
τους ΔΕΝ καταλήγει σε ‘.gr’ (και ονομάστε τις στήλες των αποτελεσμάτων με περιγραφικά ονόματα κατά την κρίση σας).

Απάντηση

select surname as 'Epitheto', name as 'Onoma', reg_date as 'Hmerominia Eggrafis' from user where email not like '%.gr' order by
reg_date desc limit 0, 5;

Εμφάνιση Αποτελεσμάτων
+------------+-----------+---------------------+

| Epitheto | Onoma | Hmerominia Eggrafis |

+------------+-----------+---------------------+

| Varcon | Nick | 2018-12-03 18:12:39 |

| Lionar | Freddy | 2018-10-07 20:09:10 |

| Liagkoumi | Maria | 2018-05-22 17:03:01 |

| Georgiadis | Cleomenis | 2018-02-13 12:23:34 |

| McBrown | Andrew | 2018-01-27 16:02:56 |

+------------+-----------+---------------------+

4. To username, το όνομα του αρχείου με τα certificates, το πλήθος των πτυχίων που έχει κάθε υποψήφιος και το μέσο όρο της
βαθμολογίας του από αυτά, για τους υποψήφιους που έχουν περισσότερα από 1 πτυχία (ονομάστε κατάλληλα τις στήλες των
αποτελεσμάτων).

Απάντηση

select username as 'CANDIDATE USERNAME', certificates as 'PISTOPOIHSEIS', count(degr_title) as 'Plithos Ptyxion', avg(grade)
as 'MO BATHMOLOGIAS' from candidate inner join has_degree on username=cand_usrname group by username having
count(degr_title)>1; --Με τον τελεστή Having θέτουμε κριτήριο ή κριτήρια αποκλειστικά και μονο στις αριθμητικές συναρτήσεις
count, sum, avg, max, min και πουθενά αλλού

Εμφάνιση Αποτελεσμάτων
| CANDIDATE USERNAME | PISTOPOIHSEIS | Plithos Ptyxion | MO BATHMOLOGIAS |

+--------------------+-------------------------+-----------------+-----------------+

| abrown | degrees-cert.pdf | 3| 8.46667 |

| liagourma | trainingLiagk.pdf | 3| 8.53333 |

| lionarF | LionFR_cert.pdf | 2| 8.05000 |

| mnikol | degreesAndCertNikol.pdf | 2| 7.90000 |

31
| zazahir23 | Mobasher-certif.pdf | 2| 8.60000 |

5. Το όνομα και το επίθετο και την ημερομηνία εγγραφής για κάθε υποψήφιο, καθώς και τον τίτλο του πτυχίου και το έτος
αποφοίτησης για όλους τους υποψηφίους που κατέχουν master ή phd (ονομάστε κατάλληλα τις στήλες των αποτελεσμάτων).

Απάντηση

select name as 'Onoma', surname as 'Epitheto', reg_date as 'Hmeromminia Eggrafis', degr_title as 'Titlos Ptyxiou', etos as 'Etos Apo-
foitisis' from user inner join candidate on user.username=candidate.username inner join has_degree on candidate.username=has_de-
gree.cand_usrname inner join degree on degr_title=titlos and degr_idryma=idryma where bathmida like 'master' or bathmida like
'phd';

| Onoma | Epitheto | Hmeromminia Eggrafis | Titlos Ptyxiou | Etos Apofoitisis |

+---------+---------------+----------------------+----------------------------------------+------------------+

| Maria | Liagkoumi | 2018-05-22 17:03:01 | Artificial Intelligence | 2008 |

| Andrew | McBrown | 2018-01-27 16:02:56 | Big Data and Analytics | 2006 |

| Andrew | McBrown | 2018-01-27 16:02:56 | Big Data Structures and Algorithms | 2008 |

| Freddy | Lionar | 2018-10-07 20:09:10 | Computer Vision and Modelling | 2001 |

| Manolis | Nikopoloulos | 2017-11-08 21:07:12 | Computer Vision and Modelling | 2006 |

| Maria | Liagkoumi | 2018-05-22 17:03:01 | NLP related high efficiency algorithms | 2013 |

| Ahmet | Mobasher-Hirs | 2017-05-11 14:08:23 | PDEng Data Science | 2006 |

Εναλλακτικά

select name as 'Onoma', surname as 'Epitheto',reg_date as 'Hmeromminia Eggrafis', degr_title as 'Titlos Ptyxiou',etos as 'Etos Apo-
foitisis' from user,candidate,has_degree,degree where user.username=candidate.username and
candidate.username=has_degree.cand_usrname and degr_title=titlos and degr_idryma=idryma and bathmida like '%PHD%' or bath-
mida like '%Master%';

+---------+---------------+----------------------+----------------------------------------+------------------+

| Onoma | Epitheto | Hmeromminia Eggrafis | Titlos Ptyxiou | Etos Apofoitisis |

+---------+---------------+----------------------+----------------------------------------+------------------+

| Maria | Liagkoumi | 2018-05-22 17:03:01 | Artificial Intelligence | 2008 |

| Andrew | McBrown | 2018-01-27 16:02:56 | Big Data and Analytics | 2006 |

| Andrew | McBrown | 2018-01-27 16:02:56 | Big Data Structures and Algorithms | 2008 |

| Freddy | Lionar | 2018-10-07 20:09:10 | Computer Vision and Modelling | 2001 |

| Manolis | Nikopoloulos | 2017-11-08 21:07:12 | Computer Vision and Modelling | 2006 |

| Maria | Liagkoumi | 2018-05-22 17:03:01 | NLP related high efficiency algorithms | 2013 |

| Ahmet | Mobasher-Hirs | 2017-05-11 14:08:23 | PDEng Data Science | 2006 |

32
Πιθανές SOS Ερωτήσεις στη Βάση erecruit
1) Να εμφανίζονται οι έδρες των θέσεων εργασίας κατά μοναδικό τρόπο δηλ. μόνο μια φορά
Απάντηση
select distinct edra from job; -- Το distinct κάνει απαλοιφή όλων των διπλότυπων εγγραφών και αν υπάρχουν πολλά jobs στην ίδια
edra, τότε η edra εμφανίζεται ακριβώς 1 φορά
Αποτελέσματα Εκτέλεσης
+------------------+
| edra |
+------------------+
| Patra, Greece |
| Peiraias, Greece |
| Athina, Greece |
| Sofia, Bulgaria |
| Oxford, London |
+------------------+

Παρατήρηση
Αν η εντολή με το distinct περιλαμβάνει περισσότερα γνωρίσματα τότε ο τελεστής distinct εμφανίζεται σε όλα αυτά τα γνωρίσματα

select distinct edra, position from job; -- Η εντολή αυτή εμφανίζει τα μοναδικά ζεύγη edra, position
+------------------+-------------------------------+
| edra | position |
+------------------+-------------------------------+
| Patra, Greece | data analyst |
| Patra, Greece | web programmer |
| Patra, Greece | mobile app developer |
| Peiraias, Greece | NLP expert |
| Peiraias, Greece | Graphics designer |
| Peiraias, Greece | Visualization expert |
| Athina, Greece | web and mobile app programmer |
| Athina, Greece | graphics expert |
| Athina, Greece | DB expert |
| Sofia, Bulgaria | AI expert |
| Sofia, Bulgaria | Algorithmic efficiency expert |
| Oxford, London | web and media programmer |
+------------------+-------------------------------+

2) Να εμφανίζεται το username όλων των user είτε είναι υποψήφιοι είτε όχι
Απάντηση
select user.username, candidate.username from user left join candidate on user.username=candidate.username;
+-----------+-----------+
| username | username |
+-----------+-----------+
| abrown | abrown |

33
| bettyg | NULL |
| cleogeo | cleogeo |
| Giankost | NULL |
| liagourma | liagourma |
| lionarF | lionarF |
| mnikol | mnikol |
| msmith | NULL |
| n_tri | NULL |
| papad | NULL |
| pavkie | NULL |
| varcon82 | NULL |
| zazahir23 | zazahir23 |
+-----------+-----------+

3) Πόσοι user είναι υποψήφιοι


Απάντηση
select count(user.username) as 'PLITHOS YPOPSIFION' from user inner join candidate on user.username=candidate.username;
+--------------------+
| PLITHOS YPOPSIFION |
+--------------------+
| 6|
+--------------------+

Εναλλακτικά
select count(user.username) as PLITHOS_YPOPSIFION from user inner join candidate on user.username=candidate.username;
+--------------------+
| PLITHOS_YPOPSIFION |
+--------------------+
| 6|
+--------------------+
1 row in set (0.00 sec)

34
4) Για κάθε αντικείμενο να φαίνεται ο τίτλος του όπως και ο τίτλος και η περιγραφή της κατηγορίας στην οποία ανήκει
Απάντηση
select a.title, a.descr, b.title, b.descr from antikeim as a left join antikeim as b on a.belongs_to=b.title
Αποτελέσματα Εκτέλεσης
+--------------------------------+----------------------------------------------+------------------+----------------------------------------------+
| title | descr | title | descr |
+--------------------------------+----------------------------------------------+------------------+----------------------------------------------+
| 2D | Level two element, child of Graphics | Graphics | Level one element, child of Computer Science |
| 3D | Level two element, child of Graphics | Graphics | Level one element, child of Computer Science |
| AI | Level one element, child of Computer Science | Computer Science | Root element, no more general antikeim
|
| Algorithms | Level one element, child of Computer Science | Computer Science | Root element, no more general an -
tikeim |
| Animation | Level two element, child of Graphics | Graphics | Level one element, child of Computer Science |
| Complexity and Efficiency | Level two element, child of Algorithms | Algorithms | Level one element, child of Computer
Science |
| Computer Science | Root element, no more general antikeim | NULL | NULL |
| Data structures | Level two element, child of Algorithms | Algorithms | Level one element, child of Computer Sci -
ence |
| Databases | Level one element, child of Computer Science | Computer Science | Root element, no more general an -
tikeim |
| Device connectivity | Level two element, child of Networking | Networking | Level one element, child of Computer
Science |
| Graphics | Level one element, child of Computer Science | Computer Science | Root element, no more general antikeim
|
| Information Retieval | Level three element, child of NLP | NLP | Level two element, child of AI |
| Language analysis | Level three element, child of NLP | NLP | Level two element, child of AI |
| Mobile Apps | Level two element, child of Programming | Programming | Level one element, child of Computer
Science |
| Network setup and maintainance | Level two element, child of Networking | Networking | Level one element, child of Com -
puter Science |
| Networking | Level one element, child of Computer Science | Computer Science | Root element, no more general an -
tikeim |
| NLP | Level two element, child of AI | AI | Level one element, child of Computer Science |
| NoSQL DBs | Level two element, child of Databases | Databases | Level one element, child of Computer Sci -
ence |
| Object-Oriented DBs | Level two element, child of Databases | Databases | Level one element, child of Computer Sci -
ence |
| Programming | Level one element, child of Computer Science | Computer Science | Root element, no more general an -
tikeim |
| Relational DBs | Level two element, child of Databases | Databases | Level one element, child of Computer Sci -
ence |
| Robotics | Level two element, child of AI | AI | Level one element, child of Computer Science |

35
| Web Programming | Level two element, child of Programming | Programming | Level one element, child of Com -
puter Science |
+--------------------------------+----------------------------------------------+------------------+----------------------------------------------+

5) Για κάθε αντικείμενο να φαίνεται ο τίτλος του όπως και ο τίτλος και η περιγραφή της κατηγορίας στην οποία ανήκει. Αν δεν
ανήκει σε καμία κατηγορία να εμφανίζεται null
Απάντηση
select a.title, a.descr, b.title, b.descr from antikeim as a left join antikeim as b on a.title=b.belongs_to;
Αποτελέσματα Εκτέλεσης
--+
| title | descr | title | descr |
| 2D | Level two element, child of Graphics | NULL | NULL |
| 3D | Level two element, child of Graphics | NULL | NULL |
| AI | Level one element, child of Computer Science | NLP | Level two element, child of AI
|
| AI | Level one element, child of Computer Science | Robotics | Level two element, child of AI
|
| Algorithms | Level one element, child of Computer Science | Complexity and Efficiency | Level two element, child of
Algorithms |
| Algorithms | Level one element, child of Computer Science | Data structures | Level two element, child of Al -
gorithms |
| Animation | Level two element, child of Graphics | NULL | NULL |
| Complexity and Efficiency | Level two element, child of Algorithms | NULL | NULL
|
| Computer Science | Root element, no more general antikeim | AI | Level one element, child of Com -
puter Science |
| Computer Science | Root element, no more general antikeim | Algorithms | Level one element, child of
Computer Science |
| Computer Science | Root element, no more general antikeim | Databases | Level one element, child of Com-
puter Science |
| Computer Science | Root element, no more general antikeim | Graphics | Level one element, child of Com -
puter Science |
| Computer Science | Root element, no more general antikeim | Networking | Level one element, child of
Computer Science |
| Computer Science | Root element, no more general antikeim | Programming | Level one element, child of
Computer Science |
| Data structures | Level two element, child of Algorithms | NULL | NULL |
| Databases | Level one element, child of Computer Science | NoSQL DBs | Level two element, child of
Databases |
| Databases | Level one element, child of Computer Science | Object-Oriented DBs | Level two element, child of
Databases |
| Databases | Level one element, child of Computer Science | Relational DBs | Level two element, child of
Databases |
| Device connectivity | Level two element, child of Networking | NULL | NULL |

36
| Graphics | Level one element, child of Computer Science | 2D | Level two element, child of Graphics
| Graphics | Level one element, child of Computer Science | 3D | Level two element, child of Graphics
| Graphics | Level one element, child of Computer Science | Animation | Level two element, child of
Graphics
| Information Retieval | Level three element, child of NLP | NULL | NULL |
| Language analysis | Level three element, child of NLP | NULL | NULL |
| Mobile Apps | Level two element, child of Programming | NULL | NULL |
| Network setup and maintainance | Level two element, child of Networking | NULL | NULL
|
| Networking | Level one element, child of Computer Science | Device connectivity | Level two element, child of
Networking |
| Networking | Level one element, child of Computer Science | Network setup and maintainance | Level two element,
child of Networking |
| NLP | Level two element, child of AI | Information Retieval | Level three element, child of NLP
|
| NLP | Level two element, child of AI | Language analysis | Level three element, child of NLP
|
| NoSQL DBs | Level two element, child of Databases | NULL | NULL |
| Object-Oriented DBs | Level two element, child of Databases | NULL | NULL |
| Programming | Level one element, child of Computer Science | Mobile Apps | Level two element, child of
Programming |
| Programming | Level one element, child of Computer Science | Web Programming | Level two element, child of
Programming |
| Relational DBs | Level two element, child of Databases | NULL | NULL |
| Robotics | Level two element, child of AI | NULL | NULL |
| Web Programming | Level two element, child of Programming | NULL | NULL
|

Να εμφανίζεται το πλήθος jobs ανά αντικείμενο.


Απάντηση
select requires.antikeim_title, count(job.id) as 'PLITHOS JOBS' from job inner join requires on job.id=requires.job_id group by re-
quires.job_id;
+----------------+--------------+
| antikeim_title | PLITHOS JOBS |
+----------------+--------------+
| Algorithms | 2|
| Programming | 2|
| Animation | 2|
| AI | 2|
| Graphics | 1|
| Algorithms | 3|
| Mobile Apps | 2|
| 2D | 2|

37
| Databases | 2|
| AI | 1|
| Algorithms | 2|
| Animation | 3|
+----------------+--------------+
12 rows in set (0.00 sec)

Να εμφανίζεται το πλήθος jobs ανά αντικείμενο είτε υπάρχουν job γιαυτό είτε όχι
Απάντηση
select requires.antikeim_title, count(job.id) as 'PLITHOS JOBS' from job left join requires on job.id=requires.job_id group by re-
quires.job_id;
+----------------+--------------+
| antikeim_title | PLITHOS JOBS |
+----------------+--------------+
| 2D | 2|
| Algorithms | 3|
| AI | 2|
| Graphics | 1|
| Algorithms | 2|
| Programming | 2|
| Animation | 2|
| Mobile Apps | 2|
| Databases | 2|
| AI | 1|
| Algorithms | 2|
| Animation | 3|
+----------------+--------------+
12 rows in set (0.00 sec)

Να εμφανίζεται το πλήθος jobs ανά αντικείμενο μόνο για τα αντικείμενα για τα οποία έχουν προκηρυχθεί πάνω 2 θέσεις
Απάντηση
select requires.antikeim_title, count(job.id) as 'PLITHOS JOBS' from job inner join requires on job.id=requires.job_id group by re-
quires.job_id having count(job.id)>2;
+----------------+--------------+
| antikeim_title | PLITHOS JOBS |
+----------------+--------------+
| Algorithms | 3|
| Animation | 3|
+----------------+--------------+
2 rows in set (0.00 sec)

Να εμφανίζεται τα 3 αντικείμενα με τα περισσότερα jobs

38
Απάντηση
select requires.antikeim_title, count(job.id) as 'PLITHOS JOBS' from job inner join requires on job.id=requires.job_id group by re -
quires.job_id order by count(job.id) desc limit 0,3;
+----------------+--------------+
| antikeim_title | PLITHOS JOBS |
+----------------+--------------+
| Algorithms | 3|
| Animation | 3|
| 2D | 2|
+----------------+--------------+
3 rows in set (0.00 sec)

6) Να εμφανίζεται το username κάθε υποψήφιου και το πλήθος των project που έχει δημιουργήσει αλλά μόνο γιαυτούς που έχουν
δημιουργήσει 2 με 3 project
Απάντηση
select username, count(candid) as 'Plithos Project' from candidate inner join project on username=candid group by username having
count(candid)=2 or count(candid)= 3; // Το num αριθμεί οι ΑΑ των project για κάθε υποψήφιου.

Αποτελέσματα Εκτέλεσης
| username | Plithos Project |
+-----------+-----------------+
| abrown | 3|
| lionarF | 3|
| mnikol | 2|
| zazahir23 | 3|

Εναλλακτικά:
select username, count(candid) as 'Plithos Project' from candidate inner join project on username=candid group by username having
count(candid) between 2 and 3;

7) Να εμφανίζεται το username κάθε υποψήφιου και το πλήθος των project που έχει δημιουργήσει. Αν ο υποψήφιος δεν έχει
δημιουργήσει κανένα project τότε να εμφανίζεται η τιμή 0 στο πλήθος των project του
Απάντηση
select username, count(num) as 'Plithos Project' from candidate left join project on username=candid group by username;
Αποτελέσματα Εκτέλεσης
+-----------+-----------------+
| username | Plithos Project |
+-----------+-----------------+
| abrown | 3|
| cleogeo | 0|
| liagourma | 4|
| lionarF | 3|
| mnikol | 2|

39
| zazahir23 | 3|

40
Θέματα στη Βάση Film
1η Εξέταση στη βάση Film (2η Ομάδα-25/11/2021)
1. Όλα τα στοιχεία του πίνακα costumer Που το first_name αρχίζει με 'Α' και το last_name τελειώνει σε 'ELL'

Απάντηση
1.SELECT * FROM CUSTOMER WHERE FIRST_NAME LIKE 'A%' AND LAST_NAME LIKE '%ELL';

2. SELECT FIRST_NAME,LAST_NAME,EMAIL FROM CUSTOMER WHERE CREATE_DATE BETWEEN '2006-1-1' AND


'2006-12-31' AND ACTIVE=0 ORDER BY CUSTOMER_ID ASC;

3.SELECT COUNT(FILM.FILM_ID) AS 'PLHTHOS TAINION' FROM FILM INNER JOIN FILM_CATEGORY ON FILM.-
FILM_ID= FILM_CATEGORY.FILM_ID INNER JOIN CATEGORY ON FILM_CATEGORY.CATEGORY_ID=CATEGORY.-
CATEGORY_ID WHERE CATEGORY.NAME LIKE 'MUSIC' GROUP BY FILM.FILM_ID;

4.SELECT FIRST_NAME,LAST_NAME,EMAIL FROM CUSTOMER INNER JOIN RENTAL ON


CUSTOMER.CUSTOMER_ID= RENTAL.CUSTOMER_ID GROUP BY CUSTOMER.CUSTOMER_ID HAVING
COUNT(RENTAL.RENTAL_ID)>4;

41
2η Εξέταση στη βάση Film (2η Ομάδα-25/11/2021)

Απάντηση
1. select * from actor where last_name like 'G%" or last_name like '%son";

2. select title, description from film where release_year>2005 and rating like 'R' and original_language is not null order by length
desc;

3. select count(customer.customer_id) as 'Synolo Pelaton' from customer inner join address on


customer.address_id=address.address_id inner join city on address.city_id=city.city_id inner join country on city.country_id=coun-
try.country_id where country.country like 'Greece' group by country.country;

4. select title, description from film inner join inventory on film.film_id=inventory.film_id inner join rental on
inventory.inventory_id=rental.inventory_id group by film.film_id having count(rental_id)>1;

42
Θέματα στη Βάση Businessregistry
1. Το url και το όνομα των Δ.Ο.Υ που έχουν ιδρυθεί μετά το 1985.
Απάντηση
select url,name from doy where establish_year>1985;

2. Το όνομα και το ΑΦΜ των φυσικών προσώπων οι οποίοι διατηρούν λογαριασμό στο Hotmail και είναι αρσενικού φύλου.
Απάντηση
select name,afm from person where email LIKE '%hotmail%' AND genre='MALE';

3. Το όνομα και ο τίτλος των τριών πρώτων επιχειρήσεων των οποίων το υποκατάστημα έχει κωδικό μεγαλύτερο από 20000
ταξινομημένα με βάση το όνομα της επιχείρησης και τον κωδικό της ΔΟΥ στην οποία υπάγεται.
Απάντηση
select businessname,title from business where branch>20000 order by businessname ASC, doy_id ASC LIMIT 0,3;

4. Τον τίτλο καθώς και την ημερομηνία καταχώρισης του καταστατικού της
επιχείρησης με όνομα ‘Papadopoulos’ .
select businessname,statutefile.registerdate from
statutefile INNER JOIN business ON bus_id=id
where businessname LIKE 'Papadopoulos%';
5. Το όνομα και τον τηλεφωνικό αριθμό των φυσικών προσώπων που είναι γυναίκες
και ο τηλεφωνικός αριθμός τους ξεκινάει από ‘210’.
select name,telephone_number
from telephones INNER JOIN person ON telephones.person_afm=person.afm where
telephone_number LIKE '210%' AND genre='FEMALE';
6. Το ΑΦΜ του ελεγκτή και το πλήθος των ελέγχων ανά ελεγκτή, για τους ελεγκτές
που έχουν ελέγξει πάνω από 1 επιχειρήσεις.
SELECT afm_auditor, count(*)
FROM auditor_check GROUP BY afm_auditor HAVING count( * ) >1;
7. Το πλήθος των επιμελητηρίων ανά έδρα, ταξινομημένα με βάση το πλήθος σε
φθίνουσα σειρά.
SELECT count(*) , edra
FROM chamber GROUP BY edra
ORDER BY count(*) DESC;
8. Το όνομα, το ΑΦΜ και τον ΣΟΕΛ των φυσικών προσώπων τα οποία έχουν κάνει
έλεγχο για τις επιχειρήσεις οι οποίες έχουν καταχωρηθεί μετά το 1995
ταξινομημένα με βάση το όνομα.
select name,person_afm,soel
from auditor INNER JOIN auditor_check ON person_afm=afm_auditor
INNER JOIN business on id=bus_id INNER
JOIN person ON person_afm=afm where
business.registerdate>1995
ORDER BY name ASC;
9. Το όνομα κάθε επιχείρησης και της γονικής της επιχείρησης. Αν δεν έχει γονική να
εμφανίζεται NULL.
SELECT a.businessname AS child, b.businessname AS parent
FROM business AS a
LEFT JOIN business AS b ON a.branch = b.id;
10. Το όνομα των επιμελητηρίων που στα οποία ανήκουν περισσότερες από 1
επιχειρήσεις.
SELECT ch_name,count(*)
FROM belongs
GROUP BY ch_name
HAVING count(*)>1 ;
11. Το id και το όνομα κάθε επιχείρησης, καθώς και ο αριθμός των υποκαταστημάτων
της. Αν δεν έχει υποκαταστήματα να εμφανίζεται 0.
SELECT parent.id, parent.businessname, count(child.branch)
FROM business as parent
LEFT JOIN business as child ON parent.id=child.branch GROUP
BY parent.id;
12. Ο κωδικός, το όνομα και ο αριθμός των επιχειρήσεων που υπάγονται σε αυτή για
τις 3 ΔΟΥ με το μικρότερο αριθμό επιχειρήσεων. Να συμπεριλάβετε και τις ΔΟΥ με 0
επιχειρήσεις.
43
SELECT doy.id_kataxorisis, doy.name, count(business.doy_id)
FROM doy
LEFT JOIN business ON business.doy_id=doy.id_kataxorisis
GROUP by doy.id_kataxorisis
ORDER BY count(business.doy_id) ASC LIMIT
0,3;
13. Ο κωδικός και η επωνυμία των επιχειρήσεων που έχουν γυναίκες στο ΔΣ.
select distinct businessname, id
FROM business
LEFT JOIN share ON share.bus_id=business.id
LEFT JOIN shareholder ON share.afm_shareholder=shareholder.person_afm
LEFT JOIN person ON shareholder.person_afm=person.afm
WHERE genre='FEMALE' AND ds_member=1;
14. Ο κωδικός, η επωνυμία και ο αριθμός των μετόχων όλων των επιχειρήσεων. Αν δεν
έχει μετόχους να εμφανίζεται 0.
select businessname, id, COUNT(person.afm)
FROM business
LEFT JOIN share ON share.bus_id=business.id
LEFT JOIN shareholder ON share.afm_shareholder=shareholder.person_afm
LEFT JOIN person ON shareholder.person_afm=person.afm GROUP
BY id;
15. Ο κωδικός, η επωνυμία και ο αριθμός των γυναικών στο ΔΣ για όλες τις
επιχειρήσεις. Αν δεν έχει γυναίκες στο ΔΣ να εμφανίζεται 0.
select businessname, id, COUNT(person.afm)
FROM business
LEFT JOIN share ON share.bus_id=business.id
LEFT JOIN shareholder ON share.afm_shareholder=shareholder.person_afm AND
share.ds_member=1
LEFT JOIN person ON shareholder.person_afm=person.afm AND
person.genre='FEMALE'
GROUP BY id;

44

You might also like