Υπολογιστές, Τύπους αρχείων
SQL διακριτές: περιγραφή, τα παραδείγματα, ιδιότητες
Συχνά, όταν χρησιμοποιείτε SQL για την ανάκτηση δεδομένων από τους πίνακες, ο χρήστης λαμβάνει το πλεονάζοντα δεδομένα είναι η ύπαρξη ενός απολύτως όμοια διπλούν σειρές. Για να αποφευχθεί αυτή η κατάσταση, χρησιμοποιήστε τον SQL διακριτή επιχείρημα στην πρόταση Επιλογή. Αυτό το άρθρο θα συζητήσει παραδείγματα της χρήσης αυτού του επιχειρήματος, καθώς και τις περιπτώσεις στις οποίες η αίτηση θα πρέπει να εγκαταλειφθεί από το επιχείρημα.
Πριν προχωρήσουμε να εξετάσουμε τα συγκεκριμένα παραδείγματα, να δημιουργήσει τη βάση δεδομένων απαιτείται μια-δυο πίνακες.
πίνακας προετοιμασία
Φανταστείτε ότι έχουμε ένα αποθηκεύει πληροφορίες της βάσης δεδομένων για την ταπετσαρία παρουσιάζονται σε δύο πίνακες. Αυτό Oboi τραπέζι (ταπετσαρία) με πεδία id (μοναδικό αναγνωριστικό), του τύπου (τύπος της ταπετσαρίας -. Χαρτί, βινύλιο, κλπ), χρώμα (χρώμα), ένα struct (δομή) και η τιμή (τιμή). Και πίνακα Ostatki (υπολείμματα) με πεδία id_oboi (αναφορά στο μοναδικό αναγνωριστικό του πίνακα Oboi) και μέτρηση (ο αριθμός των κυλίνδρων σε απόθεμα).
Συμπληρώστε τον πίνακα δεδομένων. Στον πίνακα προσθέστε την ταπετσαρία 9 εγγραφές:
Oboi | ||||
ταυτότητα | τύπος | χρώμα | struct | τιμή |
1 | χαρτί | πολύχρωμα | ανάγλυφο | 56,9 |
2 | Χαρτί δύο στρωμάτων | μπεζ | λείος | 114,8 |
3 | βινύλιο | πορτοκάλι | ανάγλυφο | 504 |
4 | προβιά | μπεζ | ανάγλυφο | 1020.9 |
5 | Χαρτί δύο στρωμάτων | μπεζ | λείος | 150,6 |
6 | χαρτί | πολύχρωμα | λείος | 95,4 |
7 | βινύλιο | καφέ | λείος | 372 |
8 | προβιά | λευκό | ανάγλυφο | 980.1 |
9 | ύφασμα | ροζ | λείος | 1166.5 |
Ο πίνακας με τα λείψανα - και εννέα βιβλία:
Ostatki | |
id_oboi | υπολογίζω |
1 | 8 |
2 | 12 |
3 | 24 |
4 | 9 |
5 | 16 |
6 | 7 |
7 | 24 |
8 | 32 |
9 | 11 |
Θα προχωρήσουμε στην περιγραφή της ξεχωριστή σειρά με την SQL.
Τοποθετήστε διακριτή στον όρο select
διακριτή επιχείρημα αυτό πρέπει να τοποθετούνται αμέσως μετά την Επιλογή λέξεων-κλειδιών στα ερωτήματα. Θα εφαρμοστεί σε όλες τις στήλες που ορίζονται στην πρόταση Επιλογή, γιατί θα πρέπει να εξαιρεθούν από το τελικό αποτέλεσμα του ερωτήματος είναι απολύτως όμοια χορδές. Έτσι, από τη στιγμή είναι αρκετή για να καθορίσετε κατά τη σύνταξη SQL «επιλέξτε ξεχωριστή» αίτημα. Η εξαίρεση είναι η χρήση διαφορετικών εσωτερικό λειτουργιών μέγεθος που δούμε λίγο αργότερα.
Θα πρέπει να υπενθυμίσουμε ότι το μεγαλύτερο μέρος της βάσης δεδομένων και δεν αναγνωρίζει τον τύπο του αιτήματος:
SELECT distinct Ostatki.Count, ξεχωριστή Oboi. * ΑΠΟ Oboi INNER JOIN Ostatki ΓΙΑ Oboi.id = Ostatki.id_oboi |
Εκεί δεν θεωρήθηκε επιχείρημα αρκετές φορές ή μία φορά διευκρινίζεται, αλλά πριν από τη δεύτερη, τρίτη ή άλλη επιλεγμένη στήλη. Θα πάρετε ένα λάθος αναφέρεται σε ένα λάθος στην σύνταξη.
Εφαρμογή διακριτά ερωτήματα στο πρότυπο
Είναι προφανές ότι με την κατάλληλη πίνακες δομή του κτιρίου και τη συμπλήρωσή τους σε ένα ενιαίο πίνακα αποκλείεται η κατάσταση, όταν δεν υπάρχει καμία απολύτως όμοιες χορδές. Ως εκ τούτου, η εκτέλεση του ερωτήματος «Επιλέξτε διακριτές *» με ένα δείγμα από ένα τραπέζι είναι ανέφικτη.
Σκεφτείτε μια κατάσταση όπου πρέπει να γνωρίζουμε τι είδους έχουμε ταπετσαρία, μόνο για λόγους ευκολίας, για να ταξινομήσετε με βάση τον τύπο:
SELECT Oboi.type ΑΠΟ προκειμένου Oboi ανά τύπο |
Και να πάρει τα αποτελέσματα:
τύπος |
χαρτί |
χαρτί |
Χαρτί δύο στρωμάτων |
Χαρτί δύο στρωμάτων |
βινύλιο |
βινύλιο |
ύφασμα |
προβιά |
προβιά |
Όπως φαίνεται στον πίνακα, υπάρχουν διπλότυπες σειρές. Αν προσθέσουμε την πρόταση Επιλογή διακριτές:
SELECT distinct Oboi.type ΑΠΟ προκειμένου Oboi ανά τύπο |
παίρνουμε το αποτέλεσμα χωρίς επανάληψη:
τύπος |
χαρτί |
Χαρτί δύο στρωμάτων |
βινύλιο |
ύφασμα |
προβιά |
Έτσι, αν εισαγάγετε σωστά τα δεδομένα σε έναν πίνακα, στη συνέχεια, αμέσως μετά από ένα τηλεφώνημα ή αίτημα των αγοραστών μπορούμε να απαντήσουμε ότι τα υγρά ταπετσαρία, fiberglass και ακρυλικό ταπετσαρία διαθέσιμο στο κατάστημα, δεν είναι. Δεδομένου ότι το εύρος των καταστημάτων είναι συνήθως δεν περιορίζεται σε εκατό ταπετσαρία, δείτε τη λίστα των μη μοναδικά είδη θα είναι αρκετά επίπονη.
Εφαρμογή διακριτές συναρτήσεις συγκεντρωτικών αποτελεσμάτων κατά
SQL διακριτή επιχείρημα μπορεί να χρησιμοποιηθεί με οποιοδήποτε συσσωμάτωμα λειτουργία. Όμως, για την εφαρμογή του Min και Max θα έχει κανένα αποτέλεσμα, αλλά κατά τον υπολογισμό του ποσού ή τη μέση τιμή είναι σπάνια μια κατάσταση όπου κανείς δεν θα πρέπει να λαμβάνουν υπόψη τις επαναλήψεις.
Ας υποθέσουμε ότι θέλουμε να ελέγξουμε την ικανότητα της αποθήκης μας και να στείλετε το αίτημα αυτό, υπολογίζει το συνολικό αριθμό των σπειρών σε απόθεμα:
SELECT SUM (Ostatki.count) ΑΠΟ Ostatki |
Αίτημα θα δώσει την απάντηση 143. Αν, όμως, θα αλλάξει σε:
SELECT SUM (διακριτές Ostatki.count) ΑΠΟ Ostatki |
παίρνουμε το συνολικό 119, ως ταπετσαρία για τους αριθμούς μέρος 3 και 7 είναι σε απόθεμα στο ίδιο ποσό. Ωστόσο, είναι προφανές ότι η απάντηση είναι λάθος.
Τις περισσότερες φορές χρησιμοποιείται σε SQL διακριτή λειτουργία αρίθμησης. Έτσι, μπορούμε εύκολα να βρούμε πόσα μοναδικά είδη της ταπετσαρίας, έχουμε:
SELECT count (διακριτές Oboi.type) ΑΠΟ Oboi |
Και να πάρει το αποτέλεσμα των 5 - απλό χαρτί και διπλής στρώσης βινυλίου και μη-υφαντό ύφασμα. Σίγουρα όλοι δει τις διαφημίσεις όπως: «Μόνο εμείς έχουμε πάνω από 20 διαφορετικά είδη ταπετσαρίας,» με το οποίο εννοείται ότι αυτό το κατάστημα δεν είναι μόνο ένα ζευγάρι δεκάδες ρόλους και μια ποικιλία της ταπετσαρίας σύγχρονων τύπων.
Είναι ενδιαφέρον ότι το ίδιο ερώτημα, μπορείτε να καθορίσετε πολλαπλές λειτουργίες, όπως Καταμέτρηση αποδίδουν DISTINCT, και χωρίς αυτό. Αυτή είναι η μόνη περίπτωση κατά την οποία διακρίνεται σε Select'e μπορεί να υπάρχει πολλές φορές.
Πότε να εγκαταλείψουν τη χρήση του επιχειρήματος
Από τη χρήση του SQL ξεχωριστή επιχείρημα αυτό πρέπει να εγκαταλειφθεί σε μία από τις δύο περιπτώσεις:
- Μπορείτε να εκτελέσετε μια ποικιλία από πίνακες και είναι σίγουροι για την μοναδική αξία η κάθε μία. Σε αυτή την περίπτωση, η χρήση του επιχειρήματος είναι ακατάλληλη, διότι είναι ένα πρόσθετο φορτίο στο διακομιστή ή πελάτη (ανάλογα με τον τύπο του DBMS).
- Φοβάστε να χάσει τα δεδομένα σας. Ας εξηγήσουμε.
Ας υποθέσουμε ότι το αφεντικό σας ζητά να απαριθμήσει την ταπετσαρία που έχετε, με την ένδειξη μόνο δύο στήλες - τον τύπο και το χρώμα. Από συνήθεια, να σας δώσω ένα επιχείρημα διακριτές:
SELECT distinct Oboi.type, Oboi.color ΑΠΟ Oboi ORDER BY Oboi.type |
Και - χάσετε κάποια δεδομένα:
τύπος | χρώμα |
χαρτί | πολύχρωμα |
Χαρτί δύο στρωμάτων | μπεζ |
βινύλιο | καφέ |
βινύλιο | πορτοκάλι |
ύφασμα | ροζ |
προβιά | μπεζ |
προβιά | λευκό |
Αυτό μπορεί να δώσει την εντύπωση ότι η ταπετσαρία χαρτί (συμβατικά και διπλής στρώσης) έχουμε μόνο ένα μυαλό, στην πραγματικότητα, ακόμη και σε μικρές τραπέζι μας δύο άρθρου (αποτέλεσμα χωρίς διακριτές):
τύπος | χρώμα |
χαρτί | πολύχρωμα |
χαρτί | πολύχρωμα |
Χαρτί δύο στρωμάτων | μπεζ |
Χαρτί δύο στρωμάτων | μπεζ |
βινύλιο | καφέ |
βινύλιο | πορτοκάλι |
ύφασμα | ροζ |
προβιά | λευκό |
προβιά | μπεζ |
Ως εκ τούτου, όπως εγγράφως κάθε αίτηση με το επιχείρημα ξεχωριστή ανάγκη να είμαστε προσεκτικοί και αρμόδια για να αποφασίσει σχετικά με την εφαρμογή του, ανάλογα με την εργασία.
εναλλακτικές διακριτές
Σε αντίθεση με το επιχείρημα ξεχωριστή - All επιχείρημα. Με την προσφυγή της είναι διπλότυπες σειρές αποθηκεύονται. Αλλά, όπως την προεπιλεγμένη βάση δεδομένων και θεωρεί ότι είναι απαραίτητο για να εμφανίσετε όλες τις τιμές, το επιχείρημα All - είναι μάλλον ένα προσδιοριστικό από το πραγματικό επιχείρημα λειτουργία.
Similar articles
Trending Now