Τι είναι και πως δουλεύουν τα ερωτήματα SQL σε ένα πίνακα της ACCESS. Μερικά ποιο σύνθετα θέματα.

Θα εξετάσουμε παρακάτω πως λειτουργούν τα ερωτήματα SQL σε ένα μόνο πίνακα. Από την βάση "Προμηθευτές - Έργα - Εξαρτήματα" θα χρησιμοποιήσουμε τον πίνακα Εξαρτήματα (P). Θα εξετάσουμε θέματα όπως :

Το αρχείο της βάσης (MS ACCESS) με τα παρακάτω ερωτήματα είναι εδώ. Θα πρέπει να έχετε κατά νου, ότι οι επιλογές [ALL|DISTINCT], [TOP N|TOP N PERCENT], που αναφέρονται παρακάτω, εισάγονται μόνο από τη σύνταξη SQL.




Ερώτηση Σχεδίαση ερωτήματος SQL
Τα ονόματα με αύξουσα αλφαβητική ταξινόμηση και οι κωδικοί όλων των εξαρτημάτων.
SELECT P.PNAME, P.P
   FROM P
   ORDER BY P.PNAME;
2. Τα ονόματα με φθίνουσα αλφαβητική ταξινόμηση και οι κωδικοί όλων των εξαρτημάτων.
SELECT P.PNAME, P.P
   FROM P
   ORDER BY P.PNAME DESC;
3. Τα ονόματα και τα χρώματα με αύξουσα αλφαβητική ταξινόμηση, όλων των εξαρτημάτων.
SELECT P.PNAME, P.COLOR
   FROM P
   ORDER BY P.COLOR;
4. Τα ονόματα με φθίνουσα αλφαβητική ταξινόμηση και τα χρώματα με αύξουσα αλφαβητική ταξινόμηση, όλων των εξαρτημάτων.
SELECT P.PNAME, P.COLOR
   FROM P
   ORDER BY P.PNAME DESC , P.COLOR ASC;
5. Τα ονόματα με αύξουσα αλφαβητική ταξινόμηση, των εξαρτημάτων των εξαρτημάτων με όνομα διαφορετικό από Screw.
SELECT P.PNAME
   FROM P
   WHERE P.NAME <> "Screw"
   ORDER BY P.NAME;
6. Τα ονόματα με αύξουσα αλφαβητική ταξινόμηση και το βάρος, όλων των εξαρτημάτων που έχουν χρώμα Red.
SELECT P.PNAME, P.WEIGHT
   FROM P
   WHERE P.COLOR = "Red"
   ORDER BY P.PNAME;
7. Τα χρώματα των εξαρτημάτων. (Προσοχή! Όχι το χρώμα κάθε εξαρτήματος. Η επιλογή DISTINCT μετά από SELECT αφαιρεί τις διπλοεγγραφές, με αποτέλεσμα να παίρνουμε το κάθε χρώμα μόνο μία μοναδική φορά. Παρατηρείστε επίσης ότι το αποτέλεσμα είναι ταξινομημένο. Εκτελέστε το ερώτημα με SELECT DISTINCT και με SELECT ALL, μέχρι να καταλάβετε τη διαφορά.)
SELECT DISTINCT P.COLOR
   FROM P;
8. Τα βάρη των εξαρτημάτων. (Ισχύουν τα ίδια με το προηγούμενο ερώτημα)
SELECT DISTINCT P.WEIGHT
   FROM P;
9. Τις πρώτες 3 εγγραφές από τον πίνακα εξαρτημάτων
SELECT TOP 3 P.*
   FROM P;
10. Τους κωδικούς και τα ονόματα των 3 βαρύτερων εξαρτημάτων.
SELECT TOP 3 P.P, P.PNAME
   FROM P
   ORDER BY P.WEIGHT DESC;
11. Το πρώτο 10% από τις εγγραφές από τον πίνακα εξαρτημάτων
SELECT TOP 3 P.*
   FROM P;
12. Τους κωδικούς και τα ονόματα των 10% ελαφρύτερων εξαρτημάτων.
SELECT TOP 10 PERCENT P.P, P.PNAME
   FROM P
   ORDER BY P.WEIGHT ASC;
13. Οι κωδικοί των εξαρτημάτων που το χρώμα τους δεν είναι ούτε Red ούτε Blue
SELECT P.P, P.COLOR
   FROM P
   WHERE P.COLOR<>"Red" 
     AND P.COLOR<>"Blue";
14. Και τώρα η έκπληξη! Αλλάξτε τον τελεστή AND του προηγούμενου ερωτήματος σε OR και εκτελέστε το ερώτημα. Βεβαιωθείτε ότι καταλάβατε απολύτως τη διαφορά. Τip: κάντε τον πίνακα αληθείας.
SELECT P.P, P.COLOR
   FROM P
   WHERE P.COLOR<>"Red" 
      ΟR P.COLOR<>"Blue";
15. Οι κωδικοί και το χρώμα των εξαρτημάτων που το χρώμα τους δεν είναι Blue. Προφανώς, σε αυτή τη περίπτωση ο τελεστής NOT δεν είναι απαραίτητος. Χρησιμοποιήστε τον, για να καταλάβετε τη σημασία του.
SELECT P.P, P.COLOR
   FROM P
   WHERE ΝΟΤ (P.COLOR="Blue");
16. Οι κωδικοί και το βάρος των εξαρτημάτων όπου το βάρος δεν είναι στην περιοχή [14,17]. Μπορείτε να διατυπώσετε το ερώτημα χωρίς τον τελεστή NOΤ;
SELECT P.P, P.WEIGHT
   FROM P
   WHERE NOT 
     (P.WEIGHT BETWEEN 14 AND 17);
17. Οι κωδικοί των εξαρτημάτων που το χρώμα τους δεν είναι ούτε Red ούτε Blue
SELECT P.P, P.COLOR
   FROM P
   WHERE NOT 
     P.COLOR IN ("Red","Blue");
18. Οι κωδικοί των εξαρτημάτων που το χρώμα τους δεν είναι Red ή δεν είναι Blue Η διατύπωση αυτή είναι παρόμοια με τη προηγούμενη. Συγκρίνετε τα αποτελέσματα με αυτά που παίρνετε από τις ερωτήσεις 13 και 14.
SELECT P.P, P.COLOR
   FROM P
   WHERE (NOT P.COLOR="Red")
      OR (NOT P.COLOR="Blue");
19. Οι κωδικοί των εξαρτημάτων που το χρώμα τους δεν είναι Red και δεν είναι Blue Η διατύπωση αυτή είναι παρόμοια με τη προηγούμενη. Συγκρίνετε τα αποτελέσματα με αυτά που παίρνετε από τις ερωτήσεις 13,14,17 και 18. Δοκιμάστε τις ερωτήσεις χωρίς τον τελεστή NOT.
SELECT P.P, P.COLOR
   FROM P
   WHERE (NOT P.COLOR="Red")
     AND (NOT P.COLOR="Blue");