Βάσεις Δεδομένων — 2018 (Θέμα 3)¶
Η εκφώνηση (Θέμα 3 της εξέτασης του 2018) προέρχεται από φωτογραφία λυμένου θέματος.
Screenshot_2024-06-26-12-26-34-264_cn.wps.moffice_eng-edit.jpg¶
ΘΕΜΑ \(3^\circ\) [5 μον.] Έστω οι παρακάτω Πίνακες:
SERVICE | CODE | COST | | :--- | :--- | | C1 | 10 | | ... | ... |
CA, CP, CTH | NAME | AGE | ADDR | | :--- | :--- | :--- | | N1 | 22 | A1 | | ... | ... | ... |
SUBSCRIBE | CODE | NAME | SDATE | | :--- | :--- | :--- | | C1 | N1 | 1/1/04 | | ... | ... | ... |
- Ορίστε την SQL έκφραση για: α) «τα ονόματα των κοινών πελατών Αθήνας & Πάτρας που δεν μένουν στις περιοχές A1 ή A2 και έχουν ηλικία εκτός του διαστήματος 20 και 30» [0.5], β) «τους κωδικούς και το κόστος των υπηρεσιών στις οποίες έγιναν συνδρομητές πελάτες Θες/κης με ηλικία μεγαλύτερη των 50 μετά την 1/1/11» [0.5], γ) τον αριθμό των πελατών της Πάτρας ανά ηλικία και για τις ηλικίες από 20 έως και 25 [1 μον.], δ) την ελάχιστη και μέγιστη ηλικία των πελατών Αθήνας που είναι συνδρομητές στην υπηρεσία C1 [0.5], ε) την αύξηση κατά 5[δυσανάγνωστο]του κόστους των υπηρεσιών C1, C2 και C3 [0.5].
- Ορίστε την έκφραση σχεσιακής άλγεβρας για να βρείτε: α) «τους αποκλειστικούς πελάτες Αθήνας οι οποίοι είναι συνδρομητές σε υπηρεσίες με κόστος μικρότερο των 70€ μέσα στο 2017» [1], β) «τον μέσο όρο ηλικίας όλων των πελατών που μένουν στις περιοχές A1 ή A2» [0.5], γ) τα ζεύγη πελατών Αθήνας με ηλικία μεγαλύτερη των 25 και πελατών Πάτρας που έγιναν συνδρομητές στην υπηρεσία C1 μετά την 1/6/16» [0.5].
Σημείωση: η φωτογραφία περιέχει χειρόγραφες απαντήσεις φοιτητή.
Λύσεις (🟡 community)
Κατάσταση: 🟡 community Πηγή: φωτογραφία λύσεων από το Discord (φοιτητική λύση)
Προσοχή
Στο ερώτημα 1β η συνθήκη σύνδεσης γίνεται στη στήλη SUBSCRIBE.COST, ενώ ο πίνακας SUBSCRIBE της εκφώνησης έχει μόνο τα γνωρίσματα CODE, NAME, SDATE. Επιπλέον η λίστα επιλογής «SERVICE.CODE SERVICE.COST» δεν έχει κόμμα ανάμεσα στα γνωρίσματα. Στο ερώτημα 1γ η ρήτρα GROUP BY γράφεται πριν από το WHERE· στη SQL το WHERE πρέπει να προηγείται του GROUP BY, άρα η έκφραση δεν είναι έγκυρη όπως είναι γραμμένη. Η λύση της σχεσιακής άλγεβρας (ερώτημα 2 α–γ) δεν υπάρχει στη φωτογραφία· η λύση είναι ελλιπής για το δεύτερο ερώτημα.
Λύσεις — Βάσεις Δεδομένων — 2018 (Θέμα 3, SQL)¶
Φοιτητική λύση του Θέματος 3 (SQL, 2018). Η λύση δεν έχει ελεγχθεί από τον διδάσκοντα. Η ίδια λύση SQL υπάρχει και στο παλιό αρχείο previous_exams.md, χωρίς διαφορά, γι' αυτό δεν μεταφέρθηκε ξεχωριστά.
Screenshot_2024-06-26-12-26-34-264_cn.wps.moffice_eng-edit.jpg¶
\(3^\circ\) Είδος Ασκήσεων | SQL Εκφράσεις
Θέμα 3, 2018:
ΘΕΜΑ \(3^\circ\) [5 μον.] Έστω οι παρακάτω Πίνακες:
SERVICE | CODE | COST | | :--- | :--- | | C1 | 10 | | ... | ... |
CA, CP, CTH | NAME | AGE | ADDR | | :--- | :--- | :--- | | N1 | 22 | A1 | | ... | ... | ... |
SUBSCRIBE | CODE | NAME | SDATE | | :--- | :--- | :--- | | C1 | N1 | 1/1/04 | | ... | ... | ... |
- Ορίστε την SQL έκφραση για: α) «τα ονόματα των κοινών πελατών Αθήνας & Πάτρας που δεν μένουν στις περιοχές A1 ή A2 και έχουν ηλικία εκτός του διαστήματος 20 και 30» [0.5], β) «τους κωδικούς και το κόστος των υπηρεσιών στις οποίες έγιναν συνδρομητές πελάτες Θες/κης με ηλικία μεγαλύτερη των 50 μετά την 1/1/11» [0.5], γ) τον αριθμό των πελατών της Πάτρας ανά ηλικία και για τις ηλικίες από 20 έως και 25 [1 μον.], δ) την ελάχιστη και μέγιστη ηλικία των πελατών Αθήνας που είναι συνδρομητές στην υπηρεσία C1 [0.5], ε) την αύξηση κατά 5του κόστους των υπηρεσιών C1, C2 και C3 [0.5].
- Ορίστε την έκφραση σχεσιακής άλγεβρας για να βρείτε: α) «τους αποκλειστικούς πελάτες Αθήνας οι οποίοι είναι συνδρομητές σε υπηρεσίες με κόστος μικρότερο των 70€ μέσα στο 2017» [1], β) «τον μέσο όρο ηλικίας όλων των πελατών που μένουν στις περιοχές A1 ή A2» [0.5], γ) τα ζεύγη πελατών Αθήνας με ηλικία μεγαλύτερη των 25 και πελατών Πάτρας που έγιναν συνδρομητές στην υπηρεσία C1 μετά την 1/6/16» [0.5].
CA = Customer Athens , CP = Customer Patras, CTH = Customer Thessaloniki
a)
select subscribe.NAME from subscribe
inner join CA on subscribe.NAME = CA.NAME
inner join CP on subscribe.NAME = CP.NAME
where CA.ADDR <> "A1" and CA.ADDR <> "A2" and CA.AGE between 20 and 30;
b)
select SERVICE.CODE SERVICE.COST from SERVICE
inner join SUBSCRIBE on SUBSCRIBE.COST = SERVICE.COST
inner join CTH on SUBSCRIBE.NAME = CTH.NAME
where CTH.AGE > 50 and SUBSCRIBE.SDATE >= '2011-1-1';
c)
select count(CA.NAME) from CA group by CA.AGE
where CA.AGE between 20 and 25;
d)
select min(CA.AGE) as minimum_age, max(CA.AGE) as maximum_age from CA
inner join SUBSCRIBE on CA.NAME = SUBSCRIBE.NAME
inner join SERVICE on SUBSCRIBE.CODE = SERVICE.CODE
where SUBSCRIBE.CODE = 'C1';
e) ```sql update SERVICE set COST = COST + 5 where CODE = 'C1' or CODE = 'C2' or CODE = 'C3';