Τι είναι οι μπαλαντέρ MySQL;
Οι χαρακτήρες μπαλαντέρ MySQL είναι χαρακτήρες που βοηθούν στην αναζήτηση δεδομένων που ταιριάζουν με πολύπλοκα κριτήρια. Οι χαρακτήρες μπαλαντέρ χρησιμοποιούνται σε συνδυασμό με τον τελεστή σύγκρισης LIKE ή με τον τελεστή σύγκρισης NOT LIKE.
Γιατί να χρησιμοποιήσετε WildCards;
Εάν είστε εξοικειωμένοι με τη χρήση του SQL, ίσως νομίζετε ότι μπορείτε να αναζητήσετε τυχόν σύνθετα δεδομένα χρησιμοποιώντας τη φράση SELECT και WHERE. Τότε γιατί να χρησιμοποιήσετε Wildcards;
Πριν απαντήσουμε σε αυτήν την ερώτηση, ας δούμε ένα παράδειγμα. Ας υποθέσουμε ότι το τμήμα μάρκετινγκ της βιβλιοθήκης βίντεο Myflix πραγματοποίησε προωθήσεις μάρκετινγκ στην πόλη του Τέξας και θα ήθελε να λάβει κάποια σχόλια σχετικά με τον αριθμό των μελών
που έχουν εγγραφεί από το Τέξας, μπορείτε να χρησιμοποιήσετε την ακόλουθη δήλωση SELECT μαζί με τη ρήτρα WHERE για να λάβετε τις επιθυμητές πληροφορίες.
SELECT * FROM members WHERE postal_address = 'Austin , TX' OR postal_address = Dallas , TX OR postal_address = Iola,TX OR postal_adress = Houston ,TX';
Όπως μπορείτε να δείτε από το παραπάνω ερώτημα, η "ρήτρα ΠΟΥ" γίνεται πολύπλοκη. Χρησιμοποιώντας μπαλαντέρ, απλοποιεί το ερώτημα καθώς μπορούμε να χρησιμοποιήσουμε κάτι απλό όπως το σενάριο που φαίνεται παρακάτω.
SELECT * FROM members WHERE postal_address like '% TX';
Εν ολίγοις, οι χαρακτήρες μπαλαντέρ μας επιτρέπουν να αναπτύξουμε μηχανές αναζήτησης ισχύος στις εφαρμογές μας βάσει δεδομένων.
Τύποι μπαλαντέρ
% το ποσοστό
% το ποσοστό χαρακτήρων χρησιμοποιείται για να καθορίσει ένα μοτίβο μηδέν (0) ή περισσότερων χαρακτήρων . Έχει την ακόλουθη βασική σύνταξη.
SELECT statements… WHERE fieldname LIKE 'xxx%';
ΕΔΩ
- "SELECT statement…" είναι η τυπική εντολή SQL SELECT.
- Το "WHERE" είναι η λέξη κλειδί που χρησιμοποιείται για την εφαρμογή του φίλτρου.
- Το "LIKE" είναι ο τελεστής σύγκρισης που χρησιμοποιείται σε συνδυασμό με χαρακτήρες μπαλαντέρ
- Το 'xxx' είναι οποιοδήποτε καθορισμένο μοτίβο έναρξης, όπως ένας ή περισσότεροι χαρακτήρες και το "%" ταιριάζει με οποιονδήποτε αριθμό χαρακτήρων ξεκινώντας από το μηδέν (0).
Για να εκτιμήσουμε πλήρως την παραπάνω δήλωση, ας δούμε ένα πρακτικό παράδειγμα
Ας υποθέσουμε ότι θέλουμε να πάρουμε όλες τις ταινίες που έχουν τη λέξη "κωδικός" ως μέρος του τίτλου, θα χρησιμοποιούσαμε το ποσοστό μπαλαντέρ για να κάνουμε μια αντιστοίχιση μοτίβου και στις δύο πλευρές της λέξης "κωδικός". Ακολουθεί η δήλωση SQL που μπορεί να χρησιμοποιηθεί για την επίτευξη των επιθυμητών αποτελεσμάτων.
SELECT * FROM movies WHERE title LIKE '%code%';
Η εκτέλεση του παραπάνω σεναρίου στον πάγκο εργασίας MySQL έναντι του myflixdb μας δίνει τα αποτελέσματα που εμφανίζονται παρακάτω.
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
4 | Code Name Black | Edgar Jimz | 2010 | NULL |
7 | Davinci Code | NULL | NULL | 6 |
Σημειώστε ότι ακόμη και αν η λέξη κλειδί αναζήτησης "κωδικός" εμφανίζεται στην αρχή ή στο τέλος του τίτλου, εξακολουθεί να εμφανίζεται στο σύνολο αποτελεσμάτων μας. Αυτό συμβαίνει επειδή ο κώδικας μας περιλαμβάνει οποιονδήποτε αριθμό χαρακτήρων στην αρχή και στη συνέχεια ταιριάζει με το μοτίβο "κωδικός" ακολουθούμενο από οποιονδήποτε αριθμό χαρακτήρων στο τέλος.
Ας τροποποιήσουμε τώρα το παραπάνω σενάριό μας για να συμπεριλάβουμε το ποσοστό μπαλαντέρ στην αρχή μόνο των κριτηρίων αναζήτησης.
SELECT * FROM movies WHERE title LIKE '%code';
Η εκτέλεση του παραπάνω σεναρίου στον πάγκο εργασίας MySQL έναντι του myflixdb μας δίνει τα αποτελέσματα που εμφανίζονται παρακάτω.
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
7 | Davinci Code | NULL | NULL | 6 |
Παρατηρήστε ότι μόνο μια εγγραφή έχει επιστραφεί από τη βάση δεδομένων. Αυτό συμβαίνει επειδή ο κώδικάς μας ταιριάζει με οποιονδήποτε αριθμό χαρακτήρων στην αρχή του τίτλου της ταινίας και λαμβάνει μόνο εγγραφές που τελειώνουν με το μοτίβο "κωδικός".
Ας αλλάξουμε τώρα το ποσοστό μπαλαντέρ στο τέλος του καθορισμένου μοτίβου που θα ταιριάζει. Το τροποποιημένο σενάριο εμφανίζεται παρακάτω.
SELECT * FROM movies WHERE title LIKE 'code%';Η εκτέλεση του παραπάνω σεναρίου στον πάγκο εργασίας MySQL έναντι του myflixdb μας δίνει τα αποτελέσματα που εμφανίζονται παρακάτω.
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
4 | Code Name Black | Edgar Jimz | 2010 | NULL |
Παρατηρήστε ότι μόνο μια εγγραφή έχει επιστραφεί από τη βάση δεδομένων. Αυτό συμβαίνει επειδή ο κώδικάς μας ταιριάζει με όλους τους τίτλους που ξεκινούν με το μοτίβο "κωδικός" ακολουθούμενος από οποιονδήποτε αριθμό χαρακτήρων.
_ υπογράμμιση μπαλαντέρ
Το μπαλαντέρ υπογράμμισης χρησιμοποιείται για να ταιριάζει ακριβώς με έναν χαρακτήρα . Ας υποθέσουμε ότι θέλουμε να αναζητήσουμε όλες τις ταινίες που κυκλοφόρησαν τα χρόνια 200x όπου το x είναι ακριβώς ένας χαρακτήρας που θα μπορούσε να έχει οποιαδήποτε αξία. Για να το πετύχουμε, θα χρησιμοποιούσαμε το μπαλαντέρ. Το παρακάτω σενάριο επιλέγει όλες τις ταινίες που κυκλοφόρησαν το έτος "200x"
SELECT * FROM movies WHERE year_released LIKE '200_';
Η εκτέλεση του παραπάνω σεναρίου στον πάγκο εργασίας MySQL έναντι του myflixdb μας δίνει τα αποτελέσματα που εμφανίζονται παρακάτω.
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
9 | Honey mooners | Jhon Shultz | 2005 | 8 |
Παρατηρήστε ότι στο σύνολο των αποτελεσμάτων μας έχουν επιστραφεί μόνο ταινίες με 200 ακολουθίες από οποιονδήποτε χαρακτήρα κατά τη διάρκεια της χρονιάς που κυκλοφόρησε. Αυτό συμβαίνει επειδή η μπαλαντέρ υπογράμμισης ταιριάζει με το μοτίβο 200 ακολουθούμενο από οποιονδήποτε μεμονωμένο χαρακτήρα
Οχι σαν
Ο λογικός τελεστής ΔΕΝ μπορεί να χρησιμοποιηθεί μαζί με τους χαρακτήρες μπαλαντέρ για την επιστροφή σειρών που δεν ταιριάζουν με το καθορισμένο μοτίβο.
Ας υποθέσουμε ότι θέλουμε να λαμβάνουμε ταινίες που δεν κυκλοφόρησαν το έτος 200x. Θα χρησιμοποιούσαμε τον λογικό τελεστή ΔΕΝ μαζί με τον μπαλαντέρ υπογράμμισης για να λάβουμε τα αποτελέσματά μας. Παρακάτω είναι το σενάριο που το κάνει αυτό.
SELECT * FROM movies WHERE year_released NOT LIKE '200_';
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
1 | Pirates of the Caribean 4 | Rob Marshall | 2011 | 1 |
4 | Code Name Black | Edgar Jimz | 2010 | NULL |
8 | Underworld-Awakeninh | Michahel Eal | 2012 | 6 |
Παρατηρήστε ότι μόνο ταινίες που δεν ξεκινούν με 200 το έτος κυκλοφορίας έχουν επιστραφεί στο σύνολο αποτελεσμάτων μας. Αυτό συμβαίνει επειδή χρησιμοποιήσαμε τον λογικό τελεστή ΔΕΝ στην αναζήτηση μοτίβων μπαλαντέρ.
Διαφυγή λέξης-κλειδιού.
Η λέξη-κλειδί ESCAPE χρησιμοποιείται για τη διαφυγή χαρακτήρων που ταιριάζουν με μοτίβα όπως το ποσοστό (%) και την υπογράμμιση (_) εάν αποτελούν μέρος των δεδομένων.
Ας υποθέσουμε ότι θέλουμε να ελέγξουμε τη συμβολοσειρά "67%" που μπορούμε να χρησιμοποιήσουμε.
LIKE '67#%%' ESCAPE '#';
Αν θέλουμε να αναζητήσουμε την ταινία "67% Guilty", μπορούμε να χρησιμοποιήσουμε το σενάριο που εμφανίζεται παρακάτω για να το κάνουμε αυτό.
SELECT * FROM movies WHERE title LIKE '67#%%' ESCAPE '#';
Σημειώστε το διπλό " %% " στον όρο LIKE, το πρώτο με κόκκινο " % " αντιμετωπίζεται ως μέρος της συμβολοσειράς που θα αναζητηθεί. Το άλλο χρησιμοποιείται για να ταιριάζει με οποιονδήποτε αριθμό χαρακτήρων που ακολουθούν.
Το ίδιο ερώτημα θα λειτουργήσει επίσης εάν χρησιμοποιούμε κάτι παρόμοιο
SELECT * FROM movies WHERE title LIKE '67=%%' ESCAPE '=';
Περίληψη
- Ισχυρά εργαλεία Like & Wildcards που βοηθούν στην αναζήτηση δεδομένων που ταιριάζουν με πολύπλοκα μοτίβα.
- Υπάρχει ένας αριθμός μπαλαντέρ που περιλαμβάνουν το ποσοστό, την υπογράμμιση και τη λίστα χαρακτήρων (δεν υποστηρίζεται από τη MySQL) μεταξύ άλλων
- Το ποσοστό μπαλαντέρ χρησιμοποιείται για την αντιστοίχιση οποιουδήποτε αριθμού χαρακτήρων ξεκινώντας από μηδέν (0) και περισσότερους.
- Το μπαλαντέρ υπογράμμισης χρησιμοποιείται για να ταιριάζει ακριβώς με έναν χαρακτήρα.