Εμφάνιση ενός μόνο μηνύματος
  #5  
Παλιά 18-05-11, 09:02
kapetang Ο χρήστης kapetang δεν είναι συνδεδεμένος
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.674
Προεπιλογή

Καλημέρα στην παρέα

Παίρνοντας αφορμή από τα μηνύματα του Νίκου και του Δημήτρη και ιδίως το τελευταίο που αναφέρεται σε σύνολα, θα προσπαθήσω να συσχετίσω τα σύνολα με κάποια ερωτήματα επιλογής.
Υποθέτω ότι έχουμε τα σύνολα Α={α, β, γ, δ, ε } και Β={γ, ε, ζ, η}. Σύμφωνα με τη σχετική θεωρία:
1)Η ένωση των συνόλων Α και Β είναι το σύνολο Γ που περιέχει όλα τα στοιχεία των δύο συνόλων, χωρίς επαναλήψεις: Γ={α, β, γ, δ, ε, ζ, η}.
2) Η τομή των συνόλων Α και Β είναι το σύνολο Γ που περιέχει τα κοινά στοιχεία των δύο συνόλων: Γ={γ, ε}.
3) Η Διαφορά Α-Β=Γ περιέχει τα στοιχεία του συνόλου Α που δεν είναι στοιχεία του Β: Γ={α, β, δ}.
Επειδή τα ερωτήματα επιλογής επιστρέφουν σύνολα εγγραφών το πρότυπο της SQL δίνει τη δυνατότητα να εφαρμοστούν τα ισχύοντα στα σύνολα και στα ερωτήματα.
Έτσι αν έχουμε δύο ερωτήματα με ίδια πεδία, ΕρώτημαΑ και ΕρώτημαΒ, μπορούμε:
1) Με την έκφραση: ΕρώτημαΑ UNION ΕρώτημαΒ, να πάρουμε το σύνολο των εγγραφών που επιστρέφουν τα δύο ερωτήματα, χωρίς πολλαπλές εγγραφές ,όπως στην ένωση συνόλων.
Αν χρησιμοποιήσουμε την έκφραση ΕρώτημαΑ UNION ALL ΕρώτημαΒ θα πάρουμε όλες τις εγγραφές που επιστρέφουν τα δύο ερωτήματα (μπορεί να υπάρχουν πολλαπλές εγγραφές).
2) Με την έκφραση: ΕρώτημαΑ INTERSECT ΕρώτημαΒ, θα πάρουμε μόνο τις εγγραφές που είναι ίδιες και στα δύο ερωτήματα, όπως στην τομή συνόλων.
3) Με την έκφραση: ΕρώτημαΑ EXCEPT ΕρώτημαΒ, θα πάρουμε μόνο τις εγγραφές του ερωτήματος Α που δεν υπάρχουν στο ερώτημα Β, όπως στη διαφορά συνόλων.
Ενώ όλα τα σοβαρά συστήματα σχεσιακών βάσεων δεδομένων, υποστηρίζουν τους παραπάνω τελεστές, η access δεν υποστηρίζει τους INTERSECT και EXCEPT.
Για να πάρουμε την τομή και τη διαφορά εγγραφών στην access μπορούμε να χρησιμοποιήσουμε ερωτήματα με υποερωτήματα της μορφής:
1) Για την τομή: SELECT field1 FROM Table1 WHERE field1 in (SELECT field2 FROM Table2).
2) Για τη διαφορά: SELECT field1 FROM Table1 WHERE field1 not in (SELECT field2 FROM Table2).
Στο αρχείο που επισυνάπτω, υπάρχει ένα σύνθετο πλαίσιο με τα χαρακτηριστικά που θέλει ο Δημήτρης.
Για προέλευση γραμμής έχει ένα ερώτημα που δίνει τη διαφορά εγγραφών των πινάκων tblMathima-tblProgramma και τιμή ΟΧΙ για την ιδιότητα «Περιορισμός στη λίστα» .

Φιλικά/Γιώργος
Συνημμένα Αρχεία
Τύπος Αρχείου: mdb ComboBoxWithQueryDifference.mdb (312,0 KB, 80 εμφανίσεις)

Τελευταία επεξεργασία από το χρήστη kapetang : 18-05-11 στις 14:32. Αιτία: αντί ένωση τομή
Απάντηση με παράθεση