/*
1. Ποιες εξετάσεις (αναφορά κωδικού εξέτασης και περιγραφής εξέτασης) δεν χρειάστηκε
ποτέ μέχρι σήμερα να γίνουν στα Νοσοκομεία που καταγράφονται στη βάση δεδομένων;
Τα αποτελέσματα να εκτυπωθούν σε φθίνουσα διάταξη ως προς τον κωδικό εξέτασης.”
*/
SELECT "ΚΩΔΙΚΟΣ_ΕΞΕ", "ΠΕΡΙΓΡΑΦΗ_ΕΞΕ"
FROM "ΕΞΕΤΑΣΗ"
WHERE "ΚΩΔΙΚΟΣ_ΕΞΕ" NOT IN (
SELECT DISTINCT "ΚΩΔΙΚΟΣ_ΕΞΕ"
FROM "ΕΞΕΤΑΣΗ_ΑΣΘΕΝΗ")
ORDER BY "ΚΩΔΙΚΟΣ_ΕΞΕ" DESC;
-- Εναλλακτικά θα μπορούσαμε να εφαρμόσουμε αριστερή εξωτερική σύνδεση (LEFT OUTER JOIN)
-- μεταξύ των πινάκων ΕΞΕΤΑΣΗ και ΕΞΕΤΑΣΗ_ΑΣΘΕΝΗ, ως ακολούθως:
SELECT "Ε"."ΚΩΔΙΚΟΣ_ΕΞΕ", "ΠΕΡΙΓΡΑΦΗ_ΕΞΕ"
FROM "ΕΞΕΤΑΣΗ" "Ε" LEFT OUTER JOIN "ΕΞΕΤΑΣΗ_ΑΣΘΕΝΗ" "ΕΑ"
ON "Ε"."ΚΩΔΙΚΟΣ_ΕΞΕ" = "ΕΑ"."ΚΩΔΙΚΟΣ_ΕΞΕ"
WHERE "ΕΑ"."ΚΩΔΙΚΟΣ_ΕΞΕ" IS NULL
ORDER BY "Ε"."ΚΩΔΙΚΟΣ_ΕΞΕ" DESC;
/*
2. Ποιος/οι είναι ο γιατρός/οι που έχουν κάνει τουλάχιστον 1 διάγνωση σε κάθε Νοσοκομείο;
Στην απάντηση να εμφανίζεται το όνομα του νοσοκομείου, το επώνυμο, το όνομα και ο κωδικός του κάθε
γιατρού όπως και το πλήθος των διαγνώσεων που έχει κάνει.
*/
SELECT "ΟΝΟΜΑ_ΝΟΣ", "ΕΠΩΝΥΜΟ_ΙΑΤ", "ΟΝΟΜΑ_ΙΑΤ", "ΙΑΤΡΟΣ"."ΚΩΔΙΚΟΣ_ΙΑΤ", COUNT("ΚΩΔΙΚΟΣ_ΔΙΑ") as "ΠΛΗΘΟΣ"
FROM "ΔΙΑΓΝΩΣΗ_ΑΣΘΕΝΗ", "ΙΑΤΡΟΣ", "ΝΟΣΟΚΟΜΕΙΟ"
WHERE "ΙΑΤΡΟΣ"."ΚΩΔ_ΝΟΣ_ΕΡΓ"="ΝΟΣΟΚΟΜΕΙΟ"."ΚΩΔΙΚΟΣ_ΝΟΣ"
AND "ΙΑΤΡΟΣ"."ΚΩΔΙΚΟΣ_ΙΑΤ"="ΔΙΑΓΝΩΣΗ_ΑΣΘΕΝΗ"."ΚΩΔΙΚΟΣ_ΙΑΤ"
GROUP BY "ΝΟΣΟΚΟΜΕΙΟ"."ΟΝΟΜΑ_ΝΟΣ", "ΙΑΤΡΟΣ"."ΕΠΩΝΥΜΟ_ΙΑΤ", "ΙΑΤΡΟΣ"."ΟΝΟΜΑ_ΙΑΤ", "ΙΑΤΡΟΣ"."ΚΩΔΙΚΟΣ_ΙΑΤ"
HAVING COUNT("ΚΩΔΙΚΟΣ_ΔΙΑ") > 0 ;
/*
3. Για κάθε Νοσοκομείο να εκτυπωθεί το πλήθος των ιατρών που εργάζονται σε αυτό και το
πλήθος των πολιτών (δηλαδή το πλήθος των διαφορετικών κωδικών ασθενών) που έχουν επισκεφθεί
το Νοσοκομείο αυτό μέχρι σήμερα. Τα αποτελέσματα να εκτυπωθούν ταξινομημένα ως εξής: σε πρώτο
επίπεδο σε αύξουσα διάταξη ως προς το πλήθος των πολιτών που έχουν επισκεφθεί κάθε Νοσοκομείο,
σε δεύτερο επίπεδο σε φθίνουσα διάταξη ως προς το πλήθος των εργαζομένων ιατρών και
σε τρίτο επίπεδο σε φθίνουσα διάταξη ως προς τον κωδικό Νοσοκομείου.
*/
SELECT "Ν"."ΚΩΔΙΚΟΣ_ΝΟΣ", COUNT(DISTINCT "ΚΩΔΙΚΟΣ_ΙΑΤ"), COUNT(DISTINCT "ΚΩΔΙΚΟΣ_ΑΣΘ")
FROM ("ΝΟΣΟΚΟΜΕΙΟ" "Ν" LEFT OUTER JOIN "ΙΑΤΡΟΣ" ON "ΚΩΔΙΚΟΣ_ΝΟΣ" = "ΚΩΔ_ΝΟΣ_ΕΡΓ")
LEFT OUTER JOIN "ΕΠΙΣΚΕΨΗ_ΑΣΘΕΝΗ" "ΕΑ" ON "Ν"."ΚΩΔΙΚΟΣ_ΝΟΣ" = "ΕΑ"."ΚΩΔΙΚΟΣ_ΝΟΣ"
GROUP BY "Ν"."ΚΩΔΙΚΟΣ_ΝΟΣ"
ORDER BY COUNT(DISTINCT "ΚΩΔΙΚΟΣ_ΑΣΘ") ASC, COUNT(DISTINCT "ΚΩΔΙΚΟΣ_ΙΑΤ") DESC, "Ν"."ΚΩΔΙΚΟΣ_ΝΟΣ" DESC;
/*
4. Βρείτε τους κωδικούς των ασθενών στους οποίους έκανε διάγνωση ο Ιατρός ΠΑΠΑΛΟΥΚΟΠΟΥΛΟΣ ΙΩΑΝΝΗΣ.
Στο συλλογισμός σας να λάβετε υπόψη σας ότι ο γιατρός μπορεί να έχει κάνει περισσότερες από μια
διαγνώσεις σε έναν ασθενή.
*/
SELECT "ΑΣΘΕΝΗΣ"."ΚΩΔΙΚΟΣ_ΑΣΘ"
FROM "ΑΣΘΕΝΗΣ", "ΕΠΙΣΚΕΨΗ_ΑΣΘΕΝΗ", "ΔΙΑΓΝΩΣΗ_ΑΣΘΕΝΗ", "ΙΑΤΡΟΣ"
WHERE "ΑΣΘΕΝΗΣ"."ΚΩΔΙΚΟΣ_ΑΣΘ"="ΕΠΙΣΚΕΨΗ_ΑΣΘΕΝΗ"."ΚΩΔΙΚΟΣ_ΑΣΘ"
AND "ΕΠΙΣΚΕΨΗ_ΑΣΘΕΝΗ"."ΚΩΔΙΚΟΣ_ΕΠΙ"="ΔΙΑΓΝΩΣΗ_ΑΣΘΕΝΗ"."ΚΩΔΙΚΟΣ_ΕΠΙ"
AND "ΙΑΤΡΟΣ"."ΚΩΔΙΚΟΣ_ΙΑΤ"="ΔΙΑΓΝΩΣΗ_ΑΣΘΕΝΗ"."ΚΩΔΙΚΟΣ_ΙΑΤ"
AND "ΙΑΤΡΟΣ"."ΕΠΩΝΥΜΟ_ΙΑΤ"='ΠΑΠΑΛΟΥΚΟΠΟΥΛΟΣ' AND
"ΙΑΤΡΟΣ"."ΟΝΟΜΑ_ΙΑΤ"='ΙΩΑΝΝΗΣ';
/*
5. Για κάθε νοσοσκομείο υπολογίστε το πλήθος των ιατρών που εργάζονται.
*/
SELECT "ΚΩΔΙΚΟΣ_ΝΟΣ", "ΟΝΟΜΑ_ΝΟΣ", COUNT (ΚΩΔΙΚΟΣ_ΙΑΤ) as "ΠΛΗΘΟΣ ΙΑΤΡΩΝ"
FROM "ΙΑΤΡΟΣ", "ΝΟΣΟΚΟΜΕΙΟ"
WHERE "ΚΩΔΙΚΟΣ_ΝΟΣ"="ΙΑΤΡΟΣ"."ΚΩΔ_ΝΟΣ_ΕΡΓ"
GROUP BY ΝΟΣΟΚΟΜΕΙΟ.ΚΩΔΙΚΟΣ_ΝΟΣ, ΟΝΟΜΑ_ΝΟΣ;
/*
6. Για κάθε νοσοσκομείο υπολογίστε το πλήθος των επισκέψεων που έχουν δεχθεί.
*/
SELECT "ΝΟΣΟΚΟΜΕΙΟ"."ΚΩΔΙΚΟΣ_ΝΟΣ", "ΟΝΟΜΑ_ΝΟΣ", COUNT(ΚΩΔΙΚΟΣ_ΕΠΙ) AS "ΠΛΗΘΟΣ ΕΠΙΣΚΕΨΕΩΝ"
FROM "ΕΠΙΣΚΕΨΗ_ΑΣΘΕΝΗ", "ΝΟΣΟΚΟΜΕΙΟ"
WHERE "ΝΟΣΟΚΟΜΕΙΟ"."ΚΩΔΙΚΟΣ_ΝΟΣ"="ΕΠΙΣΚΕΨΗ_ΑΣΘΕΝΗ"."ΚΩΔΙΚΟΣ_ΝΟΣ"
GROUP BY ΝΟΣΟΚΟΜΕΙΟ.ΚΩΔΙΚΟΣ_ΝΟΣ, ΟΝΟΜΑ_ΝΟΣ;
------ ALGEBRA ---------
/*
7. Να βρεθούν οι ασθενείς που έχουν επισκεφθεί το Νοσοκομείο ΑΧΕΠΑ και το νοσοκομείο ΑΓΙΟΣ ΑΝΔΡΕΑΣ.
*/
SELECT "ΕΠΩΝΥΜΟ_ΑΣΘ", "ΟΝΟΜΑ_ΑΣΘ", "ΔΙΕΥΘΥΝΣΗ_ΑΣΘ", "ΤΗΛΕΦΩΝΟ_ΑΣΘ"
FROM "ΝΟΣΟΚΟΜΕΙΟ", "ΕΠΙΣΚΕΨΗ_ΑΣΘΕΝΗ", "ΑΣΘΕΝΗΣ"
WHERE "ΑΣΘΕΝΗΣ"."ΚΩΔΙΚΟΣ_ΑΣΘ"="ΕΠΙΣΚΕΨΗ_ΑΣΘΕΝΗ"."ΚΩΔΙΚΟΣ_ΑΣΘ"
AND "ΝΟΣΟΚΟΜΕΙΟ"."ΚΩΔΙΚΟΣ_ΝΟΣ"="ΕΠΙΣΚΕΨΗ_ΑΣΘΕΝΗ"."ΚΩΔΙΚΟΣ_ΝΟΣ"
AND "ΝΟΣΟΚΟΜΕΙΟ"."ΟΝΟΜΑ_ΝΟΣ" = 'ΑΧΕΠΑ'
INTERSECT
SELECT "ΕΠΩΝΥΜΟ_ΑΣΘ", "ΟΝΟΜΑ_ΑΣΘ", "ΔΙΕΥΘΥΝΣΗ_ΑΣΘ", "ΤΗΛΕΦΩΝΟ_ΑΣΘ"
FROM "ΝΟΣΟΚΟΜΕΙΟ", "ΕΠΙΣΚΕΨΗ_ΑΣΘΕΝΗ", "ΑΣΘΕΝΗΣ"
WHERE "ΑΣΘΕΝΗΣ"."ΚΩΔΙΚΟΣ_ΑΣΘ"="ΕΠΙΣΚΕΨΗ_ΑΣΘΕΝΗ"."ΚΩΔΙΚΟΣ_ΑΣΘ"
AND "ΝΟΣΟΚΟΜΕΙΟ"."ΚΩΔΙΚΟΣ_ΝΟΣ"="ΕΠΙΣΚΕΨΗ_ΑΣΘΕΝΗ"."ΚΩΔΙΚΟΣ_ΝΟΣ"
AND "ΝΟΣΟΚΟΜΕΙΟ"."ΟΝΟΜΑ_ΝΟΣ" = 'ΑΓΙΟΣ ΑΝΔΡΕΑΣ';
/*
8. Βρείτε τα νοσοκομεία που δεν έχουν δεχθεί καμία επίσκεψη.
*/
SELECT "ΝΟΣΟΚΟΜΕΙΟ"."ΚΩΔΙΚΟΣ_ΝΟΣ", "ΟΝΟΜΑ_ΝΟΣ"
FROM "ΝΟΣΟΚΟΜΕΙΟ"
EXCEPT
SELECT "ΝΟΣΟΚΟΜΕΙΟ"."ΚΩΔΙΚΟΣ_ΝΟΣ", "ΟΝΟΜΑ_ΝΟΣ"
FROM "ΕΠΙΣΚΕΨΗ_ΑΣΘΕΝΗ", "ΝΟΣΟΚΟΜΕΙΟ"
WHERE "ΝΟΣΟΚΟΜΕΙΟ"."ΚΩΔΙΚΟΣ_ΝΟΣ"="ΕΠΙΣΚΕΨΗ_ΑΣΘΕΝΗ"."ΚΩΔΙΚΟΣ_ΝΟΣ"
GROUP BY ΝΟΣΟΚΟΜΕΙΟ.ΚΩΔΙΚΟΣ_ΝΟΣ, ΟΝΟΜΑ_ΝΟΣ;
/*
9. Να δοθούν όλα τα στοιχεία των ασθενών που επισκέφθηκαν νοσοκομείο και δεν χρειάστηκε να υποβληθούν σε εξετάσεις.
*/
-- Αφαίρεση συνόλων με τον τελεστή EXCEPT (δηλαδή: "Α EXCEPT Β"), όπου Α θα είναι το σύνολο των
-- ασθενών (που επισκέφθηκαν Νοσοκομεία) και Β θα είναι το σύνολο των ασθενών που
-- πραγματοποίησαν τουλάχιστον μία εξέταση σε Νοσοκομεία
SELECT "Α".*
FROM "ΑΣΘΕΝΗΣ" "Α", "ΕΠΙΣΚΕΨΗ_ΑΣΘΕΝΗ" "ΕΑ"
WHERE "Α"."ΚΩΔΙΚΟΣ_ΑΣΘ" = "ΕΑ"."ΚΩΔΙΚΟΣ_ΑΣΘ"
EXCEPT
SELECT "Α".*
FROM "ΑΣΘΕΝΗΣ" "Α", "ΕΠΙΣΚΕΨΗ_ΑΣΘΕΝΗ" "ΕΑ", "ΕΞΕΤΑΣΗ_ΑΣΘΕΝΗ" "ΕΞΑ"
WHERE "Α"."ΚΩΔΙΚΟΣ_ΑΣΘ" = "ΕΑ"."ΚΩΔΙΚΟΣ_ΑΣΘ"
AND "ΕΑ"."ΚΩΔΙΚΟΣ_ΕΠΙ" = "ΕΞΑ"."ΚΩΔΙΚΟΣ_ΕΠΙ" ;
-- Εναλλακτικά θα μπορούσαμε να χρησιμοποιήσουμε τον τελεστή NOT IN
SELECT DISTINCT "Α".*
FROM "ΑΣΘΕΝΗΣ" "Α", "ΕΠΙΣΚΕΨΗ_ΑΣΘΕΝΗ" "ΕΑ"
WHERE "Α"."ΚΩΔΙΚΟΣ_ΑΣΘ" = "ΕΑ"."ΚΩΔΙΚΟΣ_ΑΣΘ" AND "Α"."ΚΩΔΙΚΟΣ_ΑΣΘ" NOT IN
(SELECT DISTINCT "ΚΩΔΙΚΟΣ_ΑΣΘ"
FROM "ΕΠΙΣΚΕΨΗ_ΑΣΘΕΝΗ" "ΕΑ", "ΕΞΕΤΑΣΗ_ΑΣΘΕΝΗ" "ΕΞΑ"
WHERE "ΕΑ"."ΚΩΔΙΚΟΣ_ΕΠΙ" = "ΕΞΑ"."ΚΩΔΙΚΟΣ_ΕΠΙ") ;
-- Εναλλακτικά θα μπορούσαμε να χρησιμοποιήσουμε τη δήλωση <> ALL, ως ακολούθως:
SELECT DISTINCT "Α".*
FROM "ΑΣΘΕΝΗΣ" "Α", "ΕΠΙΣΚΕΨΗ_ΑΣΘΕΝΗ" "ΕΑ"
WHERE "Α"."ΚΩΔΙΚΟΣ_ΑΣΘ" = "ΕΑ"."ΚΩΔΙΚΟΣ_ΑΣΘ" AND "Α"."ΚΩΔΙΚΟΣ_ΑΣΘ" <> ALL
(SELECT DISTINCT "ΚΩΔΙΚΟΣ_ΑΣΘ"
FROM "ΕΠΙΣΚΕΨΗ_ΑΣΘΕΝΗ" "ΕΑ", "ΕΞΕΤΑΣΗ_ΑΣΘΕΝΗ" "ΕΞΑ"
WHERE "ΕΑ"."ΚΩΔΙΚΟΣ_ΕΠΙ" = "ΕΞΑ"."ΚΩΔΙΚΟΣ_ΕΠΙ") ;
/*
10. Να βρεθούν οι ασθενείς που έχουν επισκεφτεί είτε το νοσοσκομείο ΑΓΙΟΣ ΑΝΔΡΕΑΣ είτε το
νοσοσκομείο 'ΑΓΛΑΪΑ ΚΥΡΙΑΚΟΥ'
*/
SELECT DISTINCT "ΕΠΩΝΥΜΟ_ΑΣΘ", "ΟΝΟΜΑ_ΑΣΘ", "ΔΙΕΥΘΥΝΣΗ_ΑΣΘ", "ΤΗΛΕΦΩΝΟ_ΑΣΘ", "ΕΠΙΣΚΕΨΗ_ΑΣΘΕΝΗ"."ΗΜΕΡΟΜΗΝΙΑ_ΕΠΙ"
FROM "ΝΟΣΟΚΟΜΕΙΟ", "ΕΠΙΣΚΕΨΗ_ΑΣΘΕΝΗ", "ΑΣΘΕΝΗΣ"
WHERE "ΑΣΘΕΝΗΣ"."ΚΩΔΙΚΟΣ_ΑΣΘ"="ΕΠΙΣΚΕΨΗ_ΑΣΘΕΝΗ"."ΚΩΔΙΚΟΣ_ΑΣΘ"
AND "ΝΟΣΟΚΟΜΕΙΟ"."ΚΩΔΙΚΟΣ_ΝΟΣ"="ΕΠΙΣΚΕΨΗ_ΑΣΘΕΝΗ"."ΚΩΔΙΚΟΣ_ΝΟΣ"
AND "ΝΟΣΟΚΟΜΕΙΟ"."ΟΝΟΜΑ_ΝΟΣ" = 'ΑΓΙΟΣ ΑΝΔΡΕΑΣ'
UNION
SELECT DISTINCT "ΕΠΩΝΥΜΟ_ΑΣΘ", "ΟΝΟΜΑ_ΑΣΘ", "ΔΙΕΥΘΥΝΣΗ_ΑΣΘ", "ΤΗΛΕΦΩΝΟ_ΑΣΘ", "ΕΠΙΣΚΕΨΗ_ΑΣΘΕΝΗ"."ΗΜΕΡΟΜΗΝΙΑ_ΕΠΙ"
FROM "ΝΟΣΟΚΟΜΕΙΟ", "ΕΠΙΣΚΕΨΗ_ΑΣΘΕΝΗ", "ΑΣΘΕΝΗΣ"
WHERE "ΑΣΘΕΝΗΣ"."ΚΩΔΙΚΟΣ_ΑΣΘ"="ΕΠΙΣΚΕΨΗ_ΑΣΘΕΝΗ"."ΚΩΔΙΚΟΣ_ΑΣΘ"
AND "ΝΟΣΟΚΟΜΕΙΟ"."ΚΩΔΙΚΟΣ_ΝΟΣ"="ΕΠΙΣΚΕΨΗ_ΑΣΘΕΝΗ"."ΚΩΔΙΚΟΣ_ΝΟΣ"
AND "ΝΟΣΟΚΟΜΕΙΟ"."ΟΝΟΜΑ_ΝΟΣ" = 'ΑΓΛΑΪΑ ΚΥΡΙΑΚΟΥ';
-- Ενναλακτικά με τη χρήση του OR
SELECT DISTINCT "ΕΠΩΝΥΜΟ_ΑΣΘ", "ΟΝΟΜΑ_ΑΣΘ", "ΔΙΕΥΘΥΝΣΗ_ΑΣΘ", "ΤΗΛΕΦΩΝΟ_ΑΣΘ", "ΕΠΙΣΚΕΨΗ_ΑΣΘΕΝΗ"."ΗΜΕΡΟΜΗΝΙΑ_ΕΠΙ"
FROM "ΕΠΙΣΚΕΨΗ_ΑΣΘΕΝΗ", "ΑΣΘΕΝΗΣ"
WHERE "ΑΣΘΕΝΗΣ"."ΚΩΔΙΚΟΣ_ΑΣΘ"="ΕΠΙΣΚΕΨΗ_ΑΣΘΕΝΗ"."ΚΩΔΙΚΟΣ_ΑΣΘ"
AND "ΕΠΙΣΚΕΨΗ_ΑΣΘΕΝΗ"."ΚΩΔΙΚΟΣ_ΝΟΣ" IN (SELECT "ΚΩΔΙΚΟΣ_ΝΟΣ"
FROM "ΝΟΣΟΚΟΜΕΙΟ"
WHERE "ΝΟΣΟΚΟΜΕΙΟ"."ΟΝΟΜΑ_ΝΟΣ" = 'ΑΓΙΟΣ ΑΝΔΡΕΑΣ' OR
"ΝΟΣΟΚΟΜΕΙΟ"."ΟΝΟΜΑ_ΝΟΣ" = 'ΑΓΛΑΪΑ ΚΥΡΙΑΚΟΥ');