Σάββατο 23 Φεβρουαρίου 2019

Σχέσεις πινάκων στη MySQL

Όπως είπαμε και στο μάθημα με την Access, ο πίνακας Τάξη, για παράδειγμα, με τον πίνακα Μαθητής έχουν μία σχέση ένα προς πολλά, αφού σε μία Τάξη ανήκουν πολλοί μαθητές, αλλά ο κάθε μαθητής δεν ανήκει σε πολλές τάξεις.

Αυτό στη MySQL υλοποιείται με την παρακάτω εντολή (εφόσον οι πίνακες έχουν ήδη δημιουργηθεί):

ALTER TABLE student
ADD FOREIGN KEY (class_id) REFERENCES class(class_id);  



Εναλλακτικά, θα μπορούσαμε κατά τη δημιουργία του πίνακα (π.χ. marks (βαθμοί)):


CREATE TABLE marks(
    a_m int NOT NULL,
   lesson_id NOT NULL,
    mark int,
 
   FOREIGN KEY (a_m) REFERENCES student(a_m)
);  


Αν θέλουμε να υπάρχει συνέπεια σε όλους τους πίνακες που περιέχουν το κλειδί, όταν γίνονται αλλαγές ή διαφραφές, προσθέτουμε λίγο πριν το τέλος:
 
 ON DELETE CASCADE ON UPDATE CASCADE;

Συνεχίστε και γράψτε όλες τις σχέσεις των πινάκων της Βάσης school.

Όλα αυτά μπορούν να γίνουν και από το γραφικό περιβάλλον phpadmin στη Σχεδίαση, όπως τα κάναμε και στο Access.

Έχοντας ολοκληρώσει τις σχέσεις των πινάκων, μπορούμε να υποβάλλουμε ερωτήματα σε διαφορετικούς πίνακες.
Ας υποθέσουμε, λοιπόν,, ότι θέλουμε όλα τα ονοματεπώνυμα των μαθητών της Α τάξης:

SELECT name, surname, class_name FROM student, class WHERE class_name='A' and student.class_id=class.class_id ;

Βλέπουμε ότι επιλέγουμε στοιχεία από τους πίνακες class και student και πέρα από το κριτήριο το όνομα της τάξης να είναι 'Α',  ζητούμε τα κοινά τους στοιχεία (student.class_id=class.class_id ;
).

Ας υποθέσουμε ότι θέλουμε όλα τα ονοματεπώνυμα μαθητών, ομαδοποιημένα ανά τάξη:

SELECT name, surname, class_name FROM student, class where student.class_id=class.class_id ORDER BY class_name;

Ας υποθέσουμε ότι θέλουμε το πλήθος των μαθητών ανά τμήμα:

SELECT count(*), classroom_name FROM student, classroom where student.classroom_id=classroom.classroom_id group by classroom_name

Ασκήσεις


1. Και τώρα δημιουργήστε ένα νέο ερώτημα που θα σας εμφανίζει όλους τους μαθητές, ταξινομημένους ανά Τάξη.

2. Βρείτε το πλήθος των μαθητών ανά τάξη

3. Βρείτε  όλους τους μαθητές , ομαδοποιημένους ανά τάξη , που γεννήθηκαν μετά την 01/01/2002

4. Βρείτε τους μαθητές της Α που το επώνυμό τους αρχίζει από Κ

5. Βρείτε τους μαθητές της Β που η ηλικία τους είναι μεταξύ 14 και 16 ετών

6. Βρείτε τους μαθητές της Γ που εξετάζονται προφορικά

7. Βρείτε τη μεγαλύτερη ηλικία του μαθητή της Α τάξης

8 Βρείτε  πόσοι μαθητές της Β μένουν στην Ερυθραία

9. Βρείτε  ποιοι μαθητές της Γ είναι ενήλικοι. 


10. Βρείτε το σύνολο των απουσιών (Sum) ενός συγκεκριμένου μαθητή

12.  Βρείτε τις συνολικές απουσίες του κάθε μαθητή.

Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου

Σημείωση: Μόνο ένα μέλος αυτού του ιστολογίου μπορεί να αναρτήσει σχόλιο.