Εισαγωγήστην SQL Εργαστήριο Βάσεων εδοµένων
Σχεσιακό Μοντέλο και εδοµένα Πινάκων
ηµιουργίαπινάκων Θα δηµιουργήσουµε µε SQL τους πίνακες του σχεσιακού µοντέλου CREATE TABLE Patient ( Ssn VARCHAR(11), LastName VARCHAR(30), FirstName VARCHAR(30), BirthDate DATE, CONSTRAINT PK_P PRIMARY KEY(Ssn)); CREATE TABLE ClinicalExam( CE_Id INT, CExamDescr VARCHAR(50), Cost CURRENCY, Particip SINGLE, CONSTRAINT PK_CE PRIMARY KEY(CE_Id)); CREATE TABLE CheckUp( CheckUpId INT, Ssn VARCHAR(11), CheckUpDate DATE, CONSTRAINT PK_CU PRIMARY KEY(CheckUpId)); CREATE TABLE CheckUpCE( CE_Id INT, CheckUpID INT, CONSTRAINT PK_CUCE PRIMARY KEY(CE_Id,CheckUpID));
ηµιουργίασυσχετίσεων Θα δηµιουργήσουµε µε SQL τις συσχετίσεις µεταξύ των πινάκων του σχεσιακού µοντέλου ALTER TABLE CheckUp ADD CONSTRAINT FK_PCU FOREIGN KEY(Ssn) REFERENCES Patient(Ssn); ALTER TABLE CheckUpCE ADD CONSTRAINT FK_CE FOREIGN KEY(CE_Id) REFERENCES ClinicalExam(CE_Id); ALTER TABLE CheckUpCE ADD CONSTRAINT FK_CU FOREIGN KEY(CheckUpId) REFERENCES CheckUp(CheckUpId);
Παράδειγµαερωτήµατοςεπιλογής Θα δηµιουργήσουµε ένα ερώτηµα επιλογής το οποίο θα εµφανίζει κατά αύξουσα σειρά ηµεροµηνίας γέννησης, όλα τα στοιχεία των ασθενών. SELECT * FROM Patient ORDER BY BirthDate; Ssn LastName FirstName BirthDate 99999999999 ΒΑΣΙΛΕΙΟΥ ΑΠΟΣΤΟΛΟΣ 5/11/1968 22222222222 ΘΕΟΧΑΡΗΣ ΒΑΣΙΛΕΙΟΣ 10/12/1968 11111111111 ΓΕΩΡΓΙΟΥ ΑΘΑΝΑΣΙΑ 3/5/1970 12345678900 ΓΕΩΡΓΙΟΥ ΔΗΜΗΤΡΗΣ 7/3/1977 ΠΑΠΑΔΟΠΟΥΛΟΣ ΙΩΑΝΝΗΣ 2/10/1978
Παράδειγµααπλήςσυνθήκης παραγόµενουαριθµητικούπεδίου Θέλουµε να δηµιουργήσουµε ένα ερώτηµα επιλογής το οποίο να εµφανίζει κατά φθίνουσα σειρά ηµεροµηνίας γέννησης, όλα τα στοιχεία για τους ασθενείς που γεννήθηκαν µετά το 1970. SELECT * FROM Patient WHERE YEAR(BirthDate) > 1970 ORDER BY BirthDate DESC; Ssn LastName FirstName BirthDate ΠΑΠΑΔΟΠΟΥΛΟΣ ΙΩΑΝΝΗΣ 2/10/1978 12345678900 ΓΕΩΡΓΙΟΥ ΔΗΜΗΤΡΗΣ 7/3/1977
Παράδειγµασύνθετηςσυνθήκηςσε πεδίατύπουκειµένου Θέλουµε να δηµιουργήσουµε ένα ερώτηµα επιλογής το οποίο να εµφανίζει τοαμκα,τοεπίθετοκαιτοόνοµατωνασθενώνπουείτετοαμκατους αρχίζειαπό 1 είτειτοόνοµάτους ΕΝαρχίζειαπόΑ(ελληνικό). SELECT Ssn, LastName,FirstName FROM Patient WHERE Ssn LIKE "1*" OR FirstName NOT LIKE "Α*"; Ssn 12345678900 11111111111 22222222222 LastName ΓΕΩΡΓΙΟΥ ΠΑΠΑΔΟΠΟΥΛΟΣ ΓΕΩΡΓΙΟΥ ΘΕΟΧΑΡΗΣ FirstName ΔΗΜΗΤΡΗΣ ΙΩΑΝΝΗΣ ΑΘΑΝΑΣΙΑ ΒΑΣΙΛΕΙΟΣ
Παράδειγµαερωτήµατοςεπιλογήςαπό δύοπίνακεςπουσυνδέονταιάµεσα Να εµφανισθούν το ΑΜΚΑ και το Ονοµ/νυµο και η ηµεροµηνία εξέτασης για τους ασθενείς που εξετάσθηκαν από τον Αύγουστο του 2011 και µετά. SELECT Patient.Ssn, LastName,FirstName, CheckUpDate FROM Patient, CheckUp WHERE Patient.Ssn=CheckUp.Ssn AND CheckUpDate > #7/31/2011#; Ssn LastName FirstName CheckUpDate ΠΑΠΑΔΟΠΟΥΛΟΣ ΙΩΑΝΝΗΣ 12/15/2011 ΠΑΠΑΔΟΠΟΥΛΟΣ ΙΩΑΝΝΗΣ 12/17/2011
Παράδειγµα ερωτήµατος επιλογής από δύο πίνακες που δε συνδέονται άµεσα Θα δηµιουργήσουµε ένα ερώτηµα το οποίο θα εµφανίζει δίπλα σε κάθε περιγραφή κλινικής εξέτασης τον ΑΜΚΑ του ασθενούς που έκανε αυτή την εξέταση. SELECT CExamDescr, Ssn FROM CheckUp, CheckUpCE, ClinicalExam WHERE CheckUp.CheckUpId=CheckUpCE.CheckUpID AND ClinicalExam.CE_ID = CheckUpCE.CE_ID; CExamDescr ΥΠΕΡΗΧΟΣ ΓΑΣΤΡΟΣΚΟΠΗΣΗ ΜΑΓΝΗΤΙΚΗ ΑΞΟΝΙΚΗ ΚΑΡΔΙΟΓΡΑΦΗΜΑ ΕΞΕΤΑΣΗ ΑΙΜΑΤΟΣ ΓΑΣΤΡΟΣΚΟΠΗΣΗ ΑΞΟΝΙΚΗ ΕΞΕΤΑΣΗ ΑΙΜΑΤΟΣ ΚΑΡΔΙΟΓΡΑΦΗΜΑ ΑΞΟΝΙΚΗ ΓΑΣΤΡΟΣΚΟΠΗΣΗ Ssn 99999999999 99999999999 22222222222 12345678900 12345678900 11111111111 11111111111 11111111111 11111111111
Παράδειγµα υπολογισµού µεγίστου/ελαχίστου/µέσης τιµής/αριθµού πλειάδων Θαδηµιουργήσουµεέναερώτηµαεπιλογήςτοοποίοθαυπολογίζειτοµέγιστο, ελάχιστο, µέσο κόστος των κλινικών εξετάσεων καθώς και τον αριθµό τους. SELECT MAX(Cost) as MegistoKostos, MIN(Cost) as ElaxistoKostos, AVG(Cost) as MesoKostos, count(*) AS Ari8E3et FROM ClinicalExam; MegistoKostos ElaxistoKostos MesoKostos Ari8E3et 450.00 15.00 106.88 8
Παράδειγµαυπολογισµούαθροίσµατος µεχρήσηδύοπινάκων Θα δηµιουργήσουµε ένα ερώτηµα επιλογής το οποίο θα υπολογίζει το συνολικό ποσό που εισέπραξε το διαγνωστικό κέντρο. SELECT SUM(Cost) as Sunolo FROM ClinicalExam, CheckUpCE WHERE ClinicalExam.CE_Id = CheckUpCE.CE_Id; Sunolo 1170.00
Παράδειγµαυπολογισµούαθροίσµατος µεχρήσητριώνπινάκων Θα δηµιουργήσουµε ένα ερώτηµα επιλογής το οποίο θα υπολογίζει το συνολικό ποσό που έλαβε το κέντρο για εξετάσεις που έγιναν µήνα Ιούλιο. SELECT SUM(Cost) AS Sunolo FROM CheckUp, ClinicalExam, CheckUpCE WHERE ClinicalExam.CE_Id = CheckUpCE.CE_Id AND CheckUp.CheckUpID = CheckUpCE.CheckUpID AND MONTH(CheckUpDate)=7; Sunolo 730.00
1οΠαράδειγµαυπολογισµού αθροίσµατοςγιακάθεοµάδαξεχωριστά Θα δηµιουργήσουµε ένα ερώτηµα επιλογής το οποίο θα υπολογίζει το συνολικό ποσό που έλαβε το κέντρο για κάθε checkup. SELECT CheckUpID, SUM(Cost) AS SunoloAnaCheckup FROM ClinicalExam, CheckUpCE WHERE ClinicalExam.CE_Id = CheckUpCE.CE_Id GROUP BY CheckUpID; CheckUpID 1 2 3 4 5 6 7 8 SunoloAnaCheckup 15.00 20.00 200.00 200.00 20.00 15.00 530.00 170.00
2οΠαράδειγµαυπολογισµού αθροίσµατοςγιακάθεοµάδαξεχωριστά Θα δηµιουργήσουµε ένα ερώτηµα επιλογής το οποίο θα υπολογίζει το συνολικό ποσό που έλαβε το κέντρο για κάθε κλινική εξέταση που έγινε. SELECT CExamDescr, SUM(Cost) as SunoloAnaKlE3etash FROM ClinicalExam, CheckUpCE WHERE ClinicalExam.CE_Id = CheckUpCE.CE_Id GROUP BY ClinicalExam.CE_Id, CExamDescr; CExamDescr ΚΑΡΔΙΟΓΡΑΦΗΜΑ ΕΞΕΤΑΣΗ ΑΙΜΑΤΟΣ ΓΑΣΤΡΟΣΚΟΠΗΣΗ ΜΑΓΝΗΤΙΚΗ ΑΞΟΝΙΚΗ ΥΠΕΡΗΧΟΣ SunoloAnaKlE3etash 30.00 40.00 240.00 450.00 360.00 50.00
3οΠαράδειγµαυπολογισµού αθροίσµατοςγιακάθεοµάδαξεχωριστά Θα δηµιουργηθεί ένα ερώτηµα το οποίο θα υπολογίζει το συνολικό ποσό που πλήρωσε ο κάθε ασθενής. SELECT Ssn, SUM(Cost*particip) AS PosoSummetoxhs FROM CheckUp, ClinicalExam, CheckUpCE WHERE ClinicalExam.CE_Id = CheckUpCE.CE_Id AND CheckUp.CheckUpID = CheckUpCE.CheckUpID GROUP BY Ssn Ssn 11111111111 12345678900 22222222222 99999999999 PosoSummetoxhs 52.0000018179417 67.5000026449561 60.0000023841858 1.50000002235174 338.999995589256
Παράδειγµαυπολογισµού αθροίσµατοςµεσυνθήκηγιατην οµάδα Θα δηµιουργηθεί ένα ερώτηµα το οποίο θα υπολογίζει το συνολικό ποσό που πλήρωσε ο κάθε ασθενής, εφόσον ο συνολικός αριθµός των εξετάσεων που έκανε είναι µεγαλύτερος από 2. SELECT Ssn, COUNT(*) AS Ari8E3et, SUM(Cost*particip) AS PosoSummetoxhs FROM CheckUp, ClinicalExam, CheckUpCE WHERE ClinicalExam.CE_Id = CheckUpCE.CE_Id AND CheckUp.CheckUpID = CheckUpCE.CheckUpID GROUP BY Ssn HAVING COUNT(*)>2; Ssn 11111111111 Ari8E3et 3 4 PosoSummetoxhs 52.0000018179417 67.5000026449561