mysql create view tutorial with code examples
Αυτός ο οδηγός δημιουργίας προβολής MySQL εξηγεί τα πάντα σχετικά με τη δημιουργία μιας προβολής στη MySQL χρησιμοποιώντας διαφορετικές ρήτρες και παραδείγματα. Καλύπτει επίσης τον τρόπο απόρριψης και διαχείρισης προβολών:
Στη MySQL, η προβολή είναι ένας εικονικός πίνακας που μας επιτρέπει να ρίξουμε μια ματιά στα δεδομένα στον πίνακα χωρίς να εμποδίσουμε την πρόσβαση του πίνακα από άλλα προγράμματα και έτσι να μας βοηθήσουν να αποφύγουμε καταστάσεις αδιεξόδου.
Οι προβολές δημιουργούνται πάνω από έναν ή περισσότερους από έναν πίνακα που περιέχει δεδομένα. Πριν προχωρήσουμε, σημειώστε ότι χρησιμοποιούμε Έκδοση 8.0 της MySQL .
Τι θα μάθετε:
Δημιουργία προβολής MySQL
Σύνταξη:
CREATE (REPLACE) VIEW view_name AS SELECT col1, col2, ... FROM table_name WHERE condition;
Επεξήγηση σύνταξης:
- Η σύνταξη ξεκινά με τη λέξη-κλειδί «ΔΗΜΙΟΥΡΓΙΑ ΠΡΟΒΟΛΗΣ», ενημερώνοντας έτσι τον MySQL Server για τον τύπο δραστηριότητας που θα εκτελεστεί. Αυτή είναι μια υποχρεωτική λέξη-κλειδί και δεν μπορεί να παραλειφθεί.
- Το REPLACE είναι μια προαιρετική παράμετρος. Μπορούμε να το χρησιμοποιήσουμε ενώ εργαζόμαστε για μια υπάρχουσα προβολή.
- Στη συνέχεια έρχεται το όνομα της προβολής. Θα πρέπει να είναι μοναδικό όπως τα ονόματα των πινάκων και των στηλών.
- Στη συνέχεια, επιλέξτε τις στήλες από τον πίνακα. Μια προβολή μπορεί να έχει όλες τις στήλες του υποκείμενου πίνακα ή μόνο επιλεγμένες λίγες.
- Στη συνέχεια έρχεται το όνομα του πίνακα στον οποίο πρέπει να εκτελεστεί η προβολή. Αυτό είναι υποχρεωτικό και δεν μπορεί να παραλειφθεί.
- Έπειτα έρχεται η συνθήκη WHERE, που περιορίζει ή φιλτράρει τον αριθμό των σειρών στόχου στις οποίες πρέπει να εφαρμοστεί η ενέργεια CREATE VIEW. ΠΟΥ είναι επίσης μια λέξη-κλειδί, αλλά προαιρετική.
Ωστόσο, η ρήτρα WHERE είναι σημαντική. Εάν δεν αναφέρεται, ή εάν η συνθήκη δεν έχει ρυθμιστεί σωστά, τότε ολόκληρος ο πίνακας ή οι μη απαιτούμενες σειρές θα είναι μέρος της προβολής.
Παράδειγμα δημιουργίας προβολής MySQL
Παρακάτω δίνεται ένα δείγμα πίνακα που δημιουργήθηκε στο MYSQL.
Όνομα σχήματος: ειρηνικός
Όνομα πίνακα: υπαλλήλους
Ονόματα στηλών:
empNum : Διατηρεί ακέραιες τιμές για τον αριθμό υπαλλήλου.
επίθετο : Διατηρεί τιμές varchar για το επώνυμο του υπαλλήλου.
όνομα : Διατηρεί τιμές varchar για το όνομα του υπαλλήλου.
ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ : Διατηρεί τις τιμές varchar για το αναγνωριστικό email του υπαλλήλου.
deptNum : Διατηρεί το varchar για αναγνωριστικό τμήματος στο οποίο ανήκει ένας υπάλληλος.
Μισθός : Διατηρεί τις δεκαδικές αξίες του μισθού για κάθε εργαζόμενο.
ημερομηνία έναρξης : Διατηρεί τιμές ημερομηνίας για την ημερομηνία ένταξης του υπαλλήλου.
Όνομα σχήματος: ειρηνικός
Όνομα πίνακα: τμήματα
Ονόματα στηλών:
deptNum; Διατηρεί το varchar για το αναγνωριστικό τμήματος σε έναν οργανισμό.
πόλη: Κρατά το όνομα της πόλης από την οποία λειτουργούν τα τμήματα.
Χώρα: Κρατά το όνομα της χώρας που αντιστοιχεί στην πόλη.
δώρο Διατηρεί την ποσοστιαία αξία του μπόνους.
MySQL Simple Δημιουργία προβολής
Ας δημιουργήσουμε μια προβολή πάνω από τον παραπάνω πίνακα.
Δίνεται παρακάτω το ερώτημα.
Ο όρος SELECT μπορεί να είναι με συγκεκριμένα ονόματα στηλών ή μπορούμε να χρησιμοποιήσουμε το '*', για να λάβουμε όλες τις στήλες. Μόλις δημιουργήσουμε μια προβολή, δεν μπορούμε να προσθέσουμε ή να διαγράψουμε τις στήλες. Εάν θέλουμε να προσθέσουμε ή να διαγράψουμε στήλες, τότε θα πρέπει είτε να δημιουργήσουμε μια νέα προβολή είτε να αντικαταστήσουμε αυτήν την υπάρχουσα προβολή.
Η δήλωση εξόδου δείχνει ότι οι δηλώσεις CREATE VIEW SQL έχουν εκτελεστεί με επιτυχία. Λέει επίσης ότι δεν έχουν επηρεαστεί σειρές. Αυτό υπονοεί ότι όταν δημιουργείται μια νέα σειρά δεν επηρεάζει τα δεδομένα στον υποκείμενο πίνακα.
Ας ζητήσουμε τώρα την προβολή.
Ερώτηση:
CREATE VIEW employees_view AS SELECT empNum, lastName, firstName, email, deptNum, salary, start_date FROM employees ; SELECT empNum, firstName, lastName, email, deptNum, salary, start_date FROM employees_view ;
Σύνολο αποτελεσμάτων:
empNum | επίθετο | όνομα | ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ | deptNum | Μισθός | ημερομηνία έναρξης |
---|---|---|---|---|---|---|
1008 | Μπέιλι | Όλιβερ | oliver.bailey@gmail.com | 3 | 24494.4 | 0001-01-01 |
1001 | Άντριου | Γρύλος | ja@gmail.com | 1 | 3182.7 | 0001-01-01 |
1002 | Σβάτς | Μικρόφωνο | ms@gmail.com | 1 | 5304.5 | 0001-01-01 |
1003 | Λάνγκλεϊ | Μαργαρίτα | margaret.langley@gmail.com | δύο | 8820 | 0001-01-01 |
1004 | Χαρέρα | Σάντρα | sh@gmail.com | 1 | 10609 | 0001-01-01 |
1005 | ανάγνωση | Πέτρος | pl@gmail.com | δύο | 14332.5 | 0001-01-01 |
1006 | Κιθ | Κλωστική μηχανή | jk@gmail.com | δύο | 16537.5 | 0001-01-01 |
1009 | Φλιτζάνι | Βασανίζω | hb@gmail.com | 5 | 30645.6 | 0001-01-01 |
1011 | Χανκς | Κάποιος | th@gmail.com | ΜΗΔΕΝΙΚΟ | 10100 | 0001-01-01 |
1012 | Λούθηρος | Χελιδόνι | ml@gmail.com | 3 | 13000 | 0001-01-01 |
1014 | Μουρέι | Κιθ | km@gmail.com | 1 | 25000 | 0001-01-01 |
1015 | Μπράνσον | Γιάννης | jb@gmail.com | δύο | 15000 | 0001-01-01 |
1016 | Χελιδόνι | Ρίτσαρντ | rm@gmail.com | 4 | 5000 | 0001-01-01 |
1017 | Τζόνσον | Παραμονή | ej@gmail.com | 3 | 5500 | 2019-11-25 |
1018 | Δεσμός | Νολάν | nb@gmail.com | δύο | 15000 | 2019-09-13 |
Δημιουργία προβολής χρησιμοποιώντας GROUP BY και ORDER BY
Ας υποθέσουμε ένα σενάριο στο οποίο πρέπει να πάρουμε το συνολικό ποσό του μισθού, σοφός τμήματος.
Δίνεται παρακάτω το ερώτημα:
Αντί να τρέχουμε αυτό το ερώτημα στον πίνακα κάθε φορά, χρειαζόμαστε τις πληροφορίες, είναι καλύτερα να ζητάμε την προβολή, καθώς αυτό θα καταναλώνει λιγότερες πηγές βάσης δεδομένων.
Τώρα, ας δούμε το περιεχόμενο της άποψής μας. Θα διαπιστώσουμε πόσο στέλνει κάθε τμήμα στους υπαλλήλους του όσον αφορά τους μισθούς.
Ερώτηση:
CREATE VIEW salPerDept AS SELECT deptNum, sum(salary) FROM employees GROUP BY deptNum ORDER BY deptNum desc ; SELECT * FROM employees_view ;
Σύνολο αποτελεσμάτων:
deptNum | άθροισμα (μισθός) | |||||
---|---|---|---|---|---|---|
1006 | Κιθ | Κλωστική μηχανή | δύο | Σαρλότ | Ηνωμένες Πολιτείες | 5 |
5 | 30645.6 | |||||
4 | 5000 | |||||
3 | 42994.4 | |||||
δύο | 69690 | |||||
1 | 44096.2 | |||||
ΜΗΔΕΝΙΚΟ | 10100 |
Το NULL στο deptNum δηλώνει ότι ένας υπάλληλος δεν είναι μέρος οποιουδήποτε τμήματος αλλά είναι μισθωτός του οργανισμού.
MySQL Δημιουργία προβολής χρησιμοποιώντας το JOIN
Ας υποθέσουμε ότι θέλουμε να λάβουμε δεδομένα σχετικά με το τμήμα, την πόλη από την οποία βασίζεται και το μπόνους που προσφέρεται στους υπαλλήλους του. Χρειαζόμαστε αυτές τις πληροφορίες για κάθε εργαζόμενο.
Για να το επιτύχουμε αυτό, θα χρησιμοποιήσουμε τη λέξη-κλειδί JOIN για τη λήψη δεδομένων από τον πίνακα τμημάτων και υπαλλήλων.
Ας ρίξουμε μια ματιά στο ερώτημα και το αποτέλεσμα.
Μπορούμε να χρησιμοποιήσουμε διαφορετικούς τύπους JOIN εδώ, όπως, INNER JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN ή FULL OUTER JOIN ανάλογα με τις απαιτήσεις μας.
Ερώτηση:
CREATE VIEW join_view AS SELECT A.empNum, A.lastName, A.firstName, A.deptNum, B.city, B.country, B.bonus FROM employees A INNER JOIN departments B USING (deptNum) ; SELECT * FROM join_view ;
Ας εκτελέσουμε τώρα ένα ερώτημα SELECT σε αυτήν την προβολή για να δούμε την έξοδο:
Σύνολο αποτελεσμάτων:
empNum | επίθετο | όνομα | deptNum | πόλη | Χώρα | δώρο |
---|---|---|---|---|---|---|
1001 | Άντριου | Γρύλος | 1 | Νέα Υόρκη | Ηνωμένες Πολιτείες | 3 |
1002 | Σβάτς | Μικρόφωνο | 1 | Νέα Υόρκη | Ηνωμένες Πολιτείες | 3 |
1004 | Χαρέρα | Σάντρα | 1 | Νέα Υόρκη | Ηνωμένες Πολιτείες | 3 |
1014 | Μουρέι | Κιθ | 1 | Νέα Υόρκη | Ηνωμένες Πολιτείες | 3 |
1003 | Λάνγκλεϊ | Μαργαρίτα | δύο | Σαρλότ | Ηνωμένες Πολιτείες | 5 |
1005 | ανάγνωση | Πέτρος | δύο | Σαρλότ | Ηνωμένες Πολιτείες | 5 |
1015 | Μπράνσον | Γιάννης | δύο | Σαρλότ | Ηνωμένες Πολιτείες | 5 |
1018 | Δεσμός | Νολάν | δύο | Σαρλότ | Ηνωμένες Πολιτείες | 5 |
1008 | Μπέιλι | Όλιβερ | 3 | Σικάγο | Ηνωμένες Πολιτείες | 8 |
1012 | Λούθηρος | Χελιδόνι | 3 | Σικάγο | Ηνωμένες Πολιτείες | 8 |
1017 | Τζόνσον | Παραμονή | 3 | Σικάγο | Ηνωμένες Πολιτείες | 8 |
1016 | Χελιδόνι | Ρίτσαρντ | 4 | Λονδίνο | Αγγλία | 10 |
1009 | Φλιτζάνι | Βασανίζω | 5 | Βερολίνο | Γερμανία | 13 |
Δημιουργία προβολής με χρήση του Subquery
Σε αυτό το είδος δήλωσης δημιουργίας προβολής, προσπαθούμε να πάρουμε την τιμή μιας στήλης όπου η ρήτρα βασίζεται στην έξοδο ενός υποερώματος. Ας πούμε, πρέπει να βρούμε όλους τους υπαλλήλους των οποίων ο μισθός είναι μεγαλύτερος από τον μέσο μισθό του οργανισμού.
Ας δούμε το ερώτημα:
Ερώτηση:
CREATE VIEW avgSal_view AS SELECT empNum, lastName, firstName, salary FROM employees WHERE salary > ( SELECT avg(salary) FROM employees ) ; SELECT * FROM avgSal_view ;
Σύνολο αποτελεσμάτων:
empNum | επίθετο | όνομα | Μισθός |
---|---|---|---|
1018 | Δεσμός | Νολάν | 15000 |
1005 | ανάγνωση | Πέτρος | 14332.5 |
1006 | Κιθ | Κλωστική μηχανή | 16537.5 |
1008 | Μπέιλι | Όλιβερ | 24494.4 |
1009 | Φλιτζάνι | Βασανίζω | 30645.6 |
1014 | Μουρέι | Κιθ | 25000 |
1015 | Μπράνσον | Γιάννης | 15000 |
Διαχείριση προβολών
Χρησιμοποιώντας Alter View ή Δημιουργία / Αντικατάσταση προβολής μπορούμε να τροποποιήσουμε / αντικαταστήσουμε οποιαδήποτε προβολή. Η χρήση του ALTER VIEW ρητά για την ανασύνθεση μιας προβολής δεν είναι έγκυρη.
Εάν έχετε προνόμια συστήματος ALTER ANY Table ή εάν η προβολή βρίσκεται στο σχήμα σας, μπορείτε να χρησιμοποιήσετε τη δήλωση ALTER VIEW.
καλύτερο πρόγραμμα για να απαλλαγείτε από κακόβουλο λογισμικό
Χρησιμοποιώντας το ερώτημα Alter View, μπορούμε να εντοπίσουμε τα σφάλματα ανασύνθεσης πριν από το χρόνο εκτέλεσης. Η χρήση της δήλωσης ALTER VIEW μπορεί να επηρεάσει το άλλο αντικείμενο / προβολή που εξαρτάται από αυτήν. Έτσι, μπορούμε να μεταγλωττίσουμε μια προβολή μετά την αλλαγή.
Μπορούμε να επαναπροσδιορίσουμε μια προβολή χρησιμοποιώντας το Δημιουργία προβολής και να αντικαταστήσουμε την υπάρχουσα προβολή με το ερώτημα Αντικατάσταση προβολής.
Για παράδειγμα, θεωρήστε τους υπαλλήλους Εδώ έχουμε τις στήλες LastName και FirstName μαζί με μερικές άλλες. Ας υποθέσουμε ότι έχουμε την απαίτηση να συγχωνεύσουμε τις στήλες FirstName και LastName.
Δίνεται παρακάτω το στιγμιότυπο της προβολής πριν εκτελέσετε το ερώτημα ALTER.
Τώρα ας εκτελέσουμε το ερώτημα ALTER VIEW για να συγχωνεύσουμε το όνομα και το επώνυμο.
Το ερώτημα δίνεται παρακάτω:
Ερώτηση:
ALTER VIEW employees_view AS SELECT empNum, CONCAT(firstName, ' ', lastName) AS empName, email, deptNum, salary, start_date FROM employees ;
Ας δούμε το περιεχόμενο των υπαλλήλων_επισκόπηση τώρα:
Εάν μπορείτε να το παρατηρήσετε, δεν έχουμε δύο ξεχωριστές στήλες για ονόματα. Αντ 'αυτού, έχουμε μόνο μια στήλη που έχει ταυτόχρονα το όνομα και το επώνυμο.
Μάθετε περισσότερα = >> Συνάρτηση MySQL CONCAT
Ερώτηση:
SELECT * FROM employees_view;
Σύνολο αποτελεσμάτων:
empNum | empName | ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ | deptNum | Μισθός | ημερομηνία έναρξης |
---|---|---|---|---|---|
1008 | Όλιβερ Μπέιλι | oliver.bailey@gmail.com | 3 | 24494 | 0001-01-01 |
1001 | Τζακ Άντριους | ja@gmail.com | 1 | 3182.7 | 0001-01-01 |
1002 | Μάικ Σβάτς | ms@gmail.com | 1 | 5304.5 | 0001-01-01 |
1003 | Μαργαρίτα Λάνγκλεϊ | margaret.langley@gmail.com | δύο | 8820 | 0001-01-01 |
1004 | Σάντρα χαράρα | sh@gmail.com | 1 | 10609 | 0001-01-01 |
1005 | Πέτερ Λι | pl@gmail.com | δύο | 14333 | 0001-01-01 |
1006 | Τζένη Κιθ | jk@gmail.com | δύο | 16538 | 0001-01-01 |
1009 | Χάρι Μπέικερ | hb@gmail.com | 5 | 30646 | 0001-01-01 |
1011 | Τομ Χανκς | th@gmail.com | 10100 | 0001-01-01 | |
1012 | Μάρτιν Λούθερ | ml@gmail.com | 3 | 13000 | 0001-01-01 |
1014 | Keith Murray | km@gmail.com | 1 | 25000 | 0001-01-01 |
1015 | Τζον Μπράνσον | jb@gmail.com | δύο | 15000 | 0001-01-01 |
1016 | Ρίτσαρντ Μάρτιν | rm@gmail.com | 4 | 5000 | 0001-01-01 |
1017 | Εύα Τζόνσον | ej@gmail.com | 3 | 5500 | 2019-11-25 |
1018 | Νολάν Μποντ | nb@gmail.com | δύο | 15000 | 2019-09-13 |
Απόρριψη προβολής
Μπορούμε να αφήσουμε μια προβολή χρησιμοποιώντας τη δήλωση DROP VIEW. Κάποιος μπορεί να χρησιμοποιήσει μια ΠΡΟΒΟΛΗ ΠΡΟΒΟΛΗΣ εάν έχει ΔΙΑΚΟΠΗ ΟΠΟΙΑΔΗΠΟΤΕ προνόμιο προβολής ή αλλιώς θα πρέπει να βρίσκεται στο σχήμα του. Η ανατροπή δεν επηρεάζει τον υποκείμενο πίνακα στον οποίο έχει δημιουργηθεί η προβολή ή τα δεδομένα σε αυτόν τον πίνακα.
Ερώτηση:
DROP VIEW (view name);
Συχνές ερωτήσεις
Ε # 1) Πώς να δημιουργήσετε προβολές στη MySQL;
Απάντηση: Υπάρχουν πολλοί τρόποι δημιουργίας προβολών στη MySQL. Έχουμε περάσει από τέσσερις διαφορετικούς τρόπους όπως φαίνεται παρακάτω.
1. MySQL Simple Δημιουργία προβολής
2. MySQL Δημιουργία προβολής με χρήση GROUP BY και ORDER BY
3. MySQL Δημιουργία προβολής χρησιμοποιώντας το JOIN
4. MySQL Δημιουργία προβολής με χρήση του Subquery
Q # 2) Τι είναι η προβολή στο MySQL;
Απάντηση: Οι προβολές είναι σαν προ-εκτελεσμένα ερωτήματα που αποθηκεύονται σε λογική δομή, ώστε να μην χρειάζεται να εκτελέσουμε εκ νέου τα σύνθετα ερωτήματα στον πίνακα. Μπορούμε απλώς να ζητήσουμε την προβολή και να λάβουμε τα δεδομένα μας χωρίς να επηρεάσουμε τον πίνακα.
Q # 3) Μπορούμε να εφαρμόσουμε το JOIN στις προβολές κατά τη δημιουργία προβολών;
Απάντηση: Ναι, οι δηλώσεις JOIN θα μπορούσαν να χρησιμοποιηθούν σε προβολές, με παρόμοιο τρόπο με τον οποίο τις χρησιμοποιούμε στους πίνακες.
Q # 4) Μπορούμε να δημιουργήσουμε μια προβολή από άλλη προβολή;
Απάντηση: Οι προβολές λειτουργούν ουσιαστικά ως πίνακες, αλλά ως εικονικές. Ως εκ τούτου, με τον τρόπο που δημιουργούμε προβολές πάνω από έναν πίνακα, μπορούμε επίσης να δημιουργήσουμε προβολές πάνω από μια άλλη προβολή.
Ερ # 5) Γιατί χρησιμοποιούμε προβολές;
Απάντηση: Ως αποτέλεσμα του ερωτήματος SQL, η προβολή δημιουργεί έναν λογικό πίνακα. Χρησιμοποιούμε προβολές για τους ακόλουθους λόγους.
- Χρησιμοποιώντας την προβολή, μπορούμε να περιορίσουμε την ορατότητα των γραμμών και των στηλών (χρησιμοποιώντας τη ρήτρα Select and Where) για σχετικές εργασίες.
- Οι προβολές χρησιμοποιούνται όταν συνδυάζουμε σειρές και στήλες (χρησιμοποιώντας Ενωση και Εγγραφή) από πολλούς πίνακες.
- Για να πάρετε μια πιο ξεκάθαρη παρουσίαση των συγκεντρωτικών σειρών (χρησιμοποιώντας το Group by and Have) σε έναν πίνακα με λεπτότερες λεπτομέρειες.
- Οι προβολές χρησιμοποιούνται κατά τη μετονομασία ή την αποκωδικοποίηση είτε στηλών (χρησιμοποιώντας AS) είτε σε σειρές (χρησιμοποιώντας JOIN, IF, CASE ή Oracle's DECODE).
- Συνδυάζοντας οποιοδήποτε από τα παραπάνω με τις ρυθμίσεις ασφαλείας, μπορούμε να ελέγξουμε εάν ο χρήστης έχει πρόσβαση σε αυτό που είναι εξουσιοδοτημένο μόνο.
συμπέρασμα
Σε αυτό το σεμινάριο, διερευνήσαμε τους διαφορετικούς τρόπους δημιουργίας μιας προβολής στη MySQL.
1. MySQL Simple Δημιουργία προβολής
2. MySQL Δημιουργία προβολής με χρήση GROUP BY και ORDER BY
3. MySQL Δημιουργία προβολής χρησιμοποιώντας το JOIN
4. MySQL Δημιουργία προβολής με χρήση του Subquery
Μπορούμε να επιλέξουμε οποιαδήποτε από αυτές τις επιλογές ανάλογα με τις απαιτήσεις του έργου.
Περαιτέρω ανάγνωση = >> MySQL ΔΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΑ
Καλή μάθηση !!
Συνιστώμενη ανάγνωση
- MySQL ALTER TABLE - Πώς να προσθέσετε στήλη σε έναν πίνακα στο MySQL
- MySQL CONCAT και GROUP_CONCAT Λειτουργίες με παραδείγματα
- MySQL COUNT και COUNT DISTINCT με παραδείγματα
- MySQL Δημιουργία βάσης δεδομένων - Πώς να δημιουργήσετε μια βάση δεδομένων στο MySQL
- MySQL CREATE USER: Πώς να δημιουργήσετε νέο χρήστη στο MySQL
- MySQL Δημιουργία εκπαιδευτικού προγράμματος με παραδείγματα κώδικα
- MySQL GROUP BY Clause - Tutorial με παραδείγματα
- MySQL JOIN Tutorial: Εσωτερικό, εξωτερικό, σταυρό, αριστερά, δεξιά και μόνος