Βάσεις Δεδομένων Ι 8η διάλεξη
1 SQL
student(id, name, surname, age) department(id, name, perioxi) Παραδείγματα student(id, name, surname, age) department(id, name, perioxi) student2department(studentid, departmentid, since)
SELECT name FROM student SELECT student.name FROM student Επιλογή SELECT * FROM student SELECT name FROM student SELECT student.name FROM student SELECT s.name FROM student s SELECT s.name FROM student AS s
SELECT s.name, s.surname FROM student AS s Επιλογή SELECT s.name, s.surname FROM student AS s
SELECT DISTINCT s.name FROM student AS s Επιλογή SELECT DISTINCT s.name FROM student AS s
JOIN student2department AS sd ON s.id=sd.studentid Επιλογή SELECT s.name, s.surname FROM student AS s JOIN student2department AS sd ON s.id=sd.studentid
SELECT DISTINCT s.id, s.name, s.surname FROM student AS s Επιλογή SELECT DISTINCT s.id, s.name, s.surname FROM student AS s JOIN student2department AS sd ON s.id=sd.studentid
JOIN student2department AS sd ON s.id=sd.studentid Επιλογή SELECT s.name, s.surname FROM student AS s JOIN student2department AS sd ON s.id=sd.studentid JOIN department AS d ON d.id=sd.departmentid WHERE d.name = “Mixanikwn Ypologistwn”;
SELECT s.name, s.surname, s.age, s1.name, s1.surname, s1.age Πράξεις SELECT s.name, s.surname, s.age, s1.name, s1.surname, s1.age FROM student AS s, student AS s1 WHERE s.age = s1.age+2;
Επιλογή Εμφάνισε τους φοιτητές που έχουν γραφτεί σε διαφορετικό τμήμα την ίδια χρονιά SELECT DISTINCT s.id, s.name, s.surname FROM student AS s JOIN student2department AS sd ON s.id=sd.studentid JOIN student2department AS sd1 ON s.id=sd1.studentid WHERE sd.since=sd1.since AND sd.departmentid<>sd1.departmentid
Επιλογή Εμφάνισε το όνομα και το επώνυμο των φοιτητών που φοιτούν σε τμήμα με ονομασία που ξεκινάει τη φράση “Trof” SELECT s.name, s.surname FROM student AS s JOIN student2department AS sd ON s.id=sd.studentid JOIN department AS d ON d.id=sd.departmentid WHERE d.name LIKE “Trof%”;
JOIN student2department AS sd ON s.id=sd.studentid Επιλογή SELECT s.name, s.surname FROM student AS s JOIN student2department AS sd ON s.id=sd.studentid JOIN department AS d ON d.id=sd.departmentid WHERE d.perioxi = “Kalamata” OR d.perioxi = “Sparti”;
JOIN student2department AS sd ON s.id=sd.studentid Επιλογή SELECT s.name, s.surname FROM student AS s JOIN student2department AS sd ON s.id=sd.studentid JOIN department AS d ON d.id=sd.departmentid JOIN department AS d1 ON d1.id=sd.departmentid WHERE d.perioxi = “Kalamata” AND d1.perioxi = “Sparti”;
2 Πράξεις συνόλων
Ένωση δύο διαφορετικών πινάκων αποτελεσμάτων Επιλογή Ένωση δύο διαφορετικών πινάκων αποτελεσμάτων SELECT name, surname FROM student WHERE age = 20 UNION WHERE age = 21
3 Εμφώλευση
Επιλογή των φοιτητών που έχουν φοιτήσει στο τμήμα με κωδικό 1 SELECT * FROM student WHERE id IN (SELECT studentid FROM student2department WHERE departmentid = 1);
Επιλογή Επιλογή των φοιτητών που έχουν φοιτήσει στο τμήμα με ονομασία Mixanikwn Ypologistwn SELECT * FROM student WHERE id IN (SELECT studentid FROM student2department WHERE departmentid IN (SELECT id FROM department WHERE name=“Mixanikwn Ypologistwn” ));
Παντού μπορεί να ισχύει ο αρνητικός παράγοντας NOT Επιλογή Παντού μπορεί να ισχύει ο αρνητικός παράγοντας NOT SELECT * FROM student WHERE id NOT IN (SELECT studentid FROM student2department WHERE departmentid = 1);
4 Τελεστές συνάθροισης Και οργάνωσης…
GROUP BY (δημιουργεί ομάδες) ORDER BY (τοποθέτηση σε σειρά) Πράξεις COUNT: πλήθος SUM: άθροισμα AVG: μέσος όρος MAX: μέγιστη τιμή ΜΙΝ: ελάχιστη τιμή GROUP BY (δημιουργεί ομάδες) ORDER BY (τοποθέτηση σε σειρά)
Να βρεθεί η μέση ηλικία των φοιτητών Επιλογή Να βρεθεί η μέση ηλικία των φοιτητών SELECT AVG(age) FROM student
Επιλογή Να βρεθεί η μέση ηλικία των φοιτητών που φοιτούν σε τουλάχιστον ένα τμήμα SELECT AVG(s.age) FROM student AS s JOIN student2department as sd ON s.id=sd.studentid
Να βρεθεί η μέση ηλικία των φοιτητών που φοιτούν στο τμήμα 1 Επιλογή Να βρεθεί η μέση ηλικία των φοιτητών που φοιτούν στο τμήμα 1 SELECT AVG(s.age) FROM student AS s JOIN student2department as sd ON s.id=sd.studentid WHERE sd.departmentid=1
Να βρεθεί η μέγιστη ηλικία Επιλογή Να βρεθεί η μέγιστη ηλικία SELECT MAX(s.age) FROM student AS s
Να βρεθεί η μέγιστη ηλικία του φοιτητή που φοιτά στο τμήμα 1 Επιλογή Να βρεθεί η μέγιστη ηλικία του φοιτητή που φοιτά στο τμήμα 1 SELECT MAX(s.age) FROM student AS s JOIN student2department as sd ON s.id=sd.studentid WHERE sd.departmentid=1
Να βρεθεί η μέγιστη ηλικία του φοιτητή που φοιτά στο τμήμα 1 Επιλογή Να βρεθεί η μέγιστη ηλικία του φοιτητή που φοιτά στο τμήμα 1 SELECT MAX(s.age) AS maxage FROM student AS s JOIN student2department as sd ON s.id=sd.studentid WHERE sd.departmentid=1
Να βρεθούν οι μέγιστες ηλικίες ανά τμήμα Επιλογή Να βρεθούν οι μέγιστες ηλικίες ανά τμήμα SELECT MAX(s.age) AS maxage FROM student AS s JOIN student2department as sd ON s.id=sd.studentid GROUP BY sd.departmentid
Επιλογή Να βρεθούν οι μέγιστες ηλικίες ανά τμήμα που έχει περισσότερους από 5 μαθητές SELECT MAX(s.age) AS maxage FROM student AS s JOIN student2department as sd ON s.id=sd.studentid GROUP BY sd.departmentid HAVING COUNT(*) > 5
Μέτρησε πόσοι μαθητές υπάρχουν στο τμήμα 1 Επιλογή Μέτρησε πόσοι μαθητές υπάρχουν στο τμήμα 1 SELECT COUNT(*) AS totalStudent FROM student AS s JOIN student2department as sd ON s.id=sd.studentid WHERE sd.departmentid=1
Μέτρησε πόσοι μαθητές υπάρχουν ανά τμήμα Επιλογή Μέτρησε πόσοι μαθητές υπάρχουν ανά τμήμα SELECT COUNT(*) AS totalStudent FROM student AS s JOIN student2department as sd ON s.id=sd.studentid GROUP BY sd.departmentid
Εμφάνισε όλους τους φοιτητές με αλφαβητική σειρά ονόματος Επιλογή Εμφάνισε όλους τους φοιτητές με αλφαβητική σειρά ονόματος SELECT s.name, s.surname FROM student AS s ORDER BY s.name ASC
Εμφάνισε όλους τους φοιτητές με αντίστροφη αλφαβητική σειρά ονόματος Επιλογή Εμφάνισε όλους τους φοιτητές με αντίστροφη αλφαβητική σειρά ονόματος SELECT s.name, s.surname FROM student AS s ORDER BY s.name DESC
Εμφάνισε όλους τους φοιτητές με αλφαβητική σειρά επιθέτου Επιλογή Εμφάνισε όλους τους φοιτητές με αλφαβητική σειρά επιθέτου SELECT s.name, s.surname FROM student AS s ORDER BY s.surname ASC
5 JOIN
Επιλογή Id Name Surname age 1 V P 35 2 N S 37 Studentid Departmentid since 1 2010
INNER JOIN (simple JOIN) Id Name Surname age 1 V P 35 2 N S 37 INNER JOIN (simple JOIN) Studentid Departmentid since 1 2010 SELECT * FROM student AS s INNER JOIN student2department AS sd ON s.id = sd.studentid Id Name Surname age Studentid Departmentid since 1 V P 35 2010
LEFT JOIN student2department AS sd ON s.id = sd.studentid Name Surname age 1 V P 35 2 N S 37 LEFT JOIN Studentid Departmentid since 1 2010 SELECT * FROM student AS s LEFT JOIN student2department AS sd ON s.id = sd.studentid Id Name Surname age Studentid Departmentid since 1 V P 35 2010 2 N S 37 null