MySQL Caratteri jolly: Mi piace, Non mi piace, Escape, ( % ), ( _ )

⚡ Riepilogo intelligente

MySQL I caratteri jolly rendono possibile la ricerca basata su modelli, combinando gli operatori LIKE e NOT LIKE con caratteri speciali. Questo spiega i caratteri jolly percentuale e underscore, la parola chiave ESCAPE, le query pratiche sul database myflixdb e le considerazioni sulle prestazioni.

  • 🔍 Definizione di base: I caratteri jolly sono caratteri segnaposto che LIKE e NOT LIKE utilizzano per trovare corrispondenze con modelli di testo anziché con valori esatti.
  • 📊 Carattere jolly percentuale: Il simbolo % corrisponde a zero o più caratteri, quindi '%code%' restituisce tutti i titoli dei film che contengono la parola code.
  • 🔡 Carattere jolly underscore: Il simbolo _ corrisponde esattamente a un carattere, quindi '200_' restituisce i titoli pubblicati tra il 2000 e il 2009.
  • 🚫 Regola di negazione: NOT LIKE inverte il confronto e restituisce tutte le righe che non corrispondono al modello specificato.
  • 🛡️ Gestione della fuga: La parola chiave ESCAPE contrassegna un carattere % o _ all'interno della stringa di ricerca in modo che venga trattato come dato.
  • Informazioni sulle prestazioni: Un valore % iniziale blocca l'utilizzo dell'indice e impone una scansione completa della tabella, quindi ancora i pattern a sinistra quando possibile.
  • 🧩 Selezione del metodo: LIKE gestisce la corrispondenza semplice di prefissi e suffissi, mentre REGEXP si occupa di classi di caratteri e alternanza.

Che cosa sono MySQL Caratteri jolly?

MySQL I caratteri jolly I caratteri jolly sono caratteri speciali che consentono di cercare dati corrispondenti a un modello complesso anziché a un valore esatto. I caratteri jolly vengono sempre utilizzati insieme all'operatore di confronto LIKE o all'operatore di confronto NOT LIKE.

MySQL Supporta due caratteri jolly, ognuno dei quali risponde a una domanda diversa sui tuoi dati.

Wildcard Significato Esempio di modello Partite
% Zero (0) o più caratteri '%codice%' Code Nome Black, Davinci Code
_ Esattamente un carattere '200_' 2005, 2008

Ora che i due personaggi sono stati definiti, la sezione successiva spiega perché vale la pena impararli.

Perché utilizzare i caratteri jolly in MySQL?

Se hai familiarità con SQL, potresti pensare di poter già cercare dati complessi utilizzando SELECT e la clausola WHERE. Quindi, perché usare i caratteri jolly?

Prima di rispondere a questa domanda, consideriamo un esempio. Supponiamo che il reparto marketing della videoteca Myflix abbia condotto delle promozioni nella città di Texas e desideri avere un riscontro sul numero di iscritti provenienti da Texas. È possibile utilizzare la seguente istruzione SELECT insieme alla clausola WHERE per ottenere le informazioni desiderate.

SELECT * FROM members
WHERE postal_address = 'Austin, TX'
   OR postal_address = 'Dallas, TX'
   OR postal_address = 'Iola, TX'
   OR postal_address = 'Houston, TX';

Come puoi vedere dalla query precedente, il "Dove la clausola" diventa lungo e fragile: ogni nuova città deve essere aggiunta manualmente e un singolo indirizzo scritto in modo errato viene silenziosamente escluso. L'utilizzo dei caratteri jolly semplifica la query, perché un singolo modello copre tutte le città dello stato.

SELECT * FROM members
WHERE postal_address LIKE '%TX';

In breve, i caratteri jolly consentono di integrare potenti funzionalità di ricerca in applicazioni basate sui dati con molto meno codice SQL. La sezione successiva analizza ciascun carattere jolly singolarmente.

Tipi di MySQL I caratteri jolly

% – Il carattere jolly percentuale

Il carattere percentuale (%) viene utilizzato per specificare un modello di zero (0) o più caratteri. Ha la seguente sintassi di base.

SELECT * FROM table_name
WHERE fieldname LIKE 'xxx%';

QUI:

  • "Istruzione SELECT" è il comando SQL SELECT standard.
  • “WHERE” è la parola chiave utilizzata per applicare il filtro.
  • “LIKE” è l’operatore di confronto che viene utilizzato insieme ai caratteri jolly.
  • 'xxx' rappresenta un modello specificato, come un singolo carattere o più, e "%" corrisponde a un numero qualsiasi di caratteri a partire da zero (0).

Per comprendere appieno l'affermazione precedente, consideriamo un esempio pratico. Supponiamo di voler ottenere tutti i film che contengono la parola "code" nel titolo. Utilizzeremmo il carattere jolly percentuale su entrambi i lati della parola "code" per eseguire una corrispondenza di pattern in qualsiasi punto del titolo.

SELECT * FROM movies
WHERE title LIKE '%code%';

Eseguendo lo script precedente in MySQL banco di lavoro Il confronto con il database myflixdb ci fornisce i risultati mostrati di seguito.

id_film titolo direttore anno_rilasciato categoria_id
4 Code Nome Nero Edgar Jimz 2010 NULL
7 Da Vinci Code NULL NULL 6

Si noti che la parola chiave di ricerca "code" viene restituita sia che appaia all'inizio che alla fine del titolo. Questo perché il modello consente un numero qualsiasi di caratteri prima di "code" e un numero qualsiasi di caratteri dopo di esso.

Modifichiamo ora lo script in modo che il carattere jolly percentuale appaia solo all'inizio dei criteri di ricerca.

SELECT * FROM movies
WHERE title LIKE '%code';

Eseguendo lo script precedente in MySQL L'analisi con Workbench sul database myflixdb fornisce i risultati mostrati di seguito.

id_film titolo direttore anno_rilasciato categoria_id
7 Da Vinci Code NULL NULL 6

Nota che è stato restituito un solo record. Il modello corrisponde a qualsiasi numero di caratteri all'inizio del titolo ma richiede che il titolo sia fine con “codice”.

Ora spostiamo il carattere jolly percentuale alla fine del pattern. Lo script modificato è mostrato di seguito.

SELECT * FROM movies
WHERE title LIKE 'code%';

Eseguendo lo script precedente in MySQL L'analisi con Workbench sul database myflixdb fornisce i risultati mostrati di seguito.

id_film titolo direttore anno_rilasciato categoria_id
4 Code Nome Nero Edgar Jimz 2010 NULL

Viene restituito di nuovo un solo record, perché questo modello corrisponde a ogni titolo che inizio con “codice” seguito da un numero qualsiasi di caratteri. La posizione del simbolo % determina quindi il significato della ricerca.

Suggerimento: Un modello come 'code%' può ancora utilizzare un indice sulla colonna del titolo, mentre '%code%' non può. Un carattere jolly percentuale iniziale forza MySQL per scansionare ogni riga, quindi mantieni il carattere jolly a destra ogni volta che la ricerca lo consente.

_ – Il carattere jolly underscore

Viene utilizzato il carattere jolly di sottolineatura corrisponde esattamente a un carattereSupponiamo di voler trovare tutti i film usciti nell'anno 200x, dove x è esattamente un carattere che può assumere qualsiasi valore. Lo script seguente seleziona tutti i film usciti nell'anno "200x".

SELECT * FROM movies
WHERE year_released LIKE '200_';

Eseguendo lo script precedente in MySQL L'analisi con Workbench sul database myflixdb fornisce i risultati mostrati di seguito.

id_film titolo direttore anno_rilasciato categoria_id
2 Dimenticando Sarah Marshal Nicholas Stoller 2008 2
9 Honey moonERS Jhon Shultz 2005 8

Si noti che vengono restituiti solo i film il cui valore year_released è 200 seguito da un singolo carattere. A differenza del carattere jolly percentuale, il trattino basso riserva uno spazio per un solo carattere e non di più.

NON COME con i jolly

L'operatore logico NOT può essere utilizzato insieme ai caratteri jolly per restituire le righe che non non è un corrispondere al modello specificato.

Supponiamo di voler selezionare i film che non sono stati distribuiti nell'anno 200x. Combiniamo l'operatore logico NOT con il carattere jolly underscore, come mostrato di seguito.

SELECT * FROM movies
WHERE year_released NOT LIKE '200_';
id_film titolo direttore anno_rilasciato categoria_id
1 Pirati dei Caraibi 4 Rob Marshall 2011 1
4 Code Nome Nero Edgar Jimz 2010 NULL
8 Malavita-AwakenStampa Michele Eal 2012 6

Vengono restituiti solo i film che non seguono il modello 200x, perché NOT inverte il risultato del confronto con il carattere jolly. Nota che le righe contenenti un NULL I valori non vengono mai restituiti da LIKE o NOT LIKE, poiché NULL è sconosciuto piuttosto che disuguale.

parola chiave ESCAPE

Viene utilizzata la parola chiave ESCAPE caratteri di escape per la corrispondenza di pattern come la percentuale (%) e il trattino basso (_) quando fanno parte dei dati stessi.

Supponiamo di voler cercare la stringa letterale "67%". Dichiariamo un carattere di escape e lo posizioniamo immediatamente prima del carattere che deve essere letto come dato.

LIKE '67#%%' ESCAPE '#';

Se vogliamo trovare il film "67% Guilty", possiamo usare la sceneggiatura mostrata qui sotto.

SELECT * FROM movies
WHERE title LIKE '67#%%' ESCAPE '#';

Si noti il ​​doppio “%%” nella clausola LIKE. Il primo è preceduto dal carattere di escape (#) e viene quindi trattato come parte della stringa da cercare. Il secondo mantiene il suo significato di carattere jolly e corrisponde a qualsiasi numero di caratteri che lo seguono.

Qualsiasi carattere può fungere da carattere di escape, quindi la stessa query funziona anche con il segno di uguale.

SELECT * FROM movies
WHERE title LIKE '67=%%' ESCAPE '=';

I caratteri jolly gestiscono molto bene i modelli semplici, ma alcune ricerche richiedono regole più espressive. Il confronto seguente mostra dove si trova il limite.

MySQL Caratteri jolly o espressioni regolari: quale usare?

MySQL supporta solo due caratteri jolly. Gli elenchi di caratteri come [ac], che alcuni altri motori di database accettano all'interno di LIKE, non sono supportati. Quando una ricerca necessita di intervalli di caratteri, alternanza o ancoraggio, il Operatore REGEXP è la scelta corretta.

Criterio MI PIACE con i caratteri jolly REGEXP
potenza del modello Solo due simboli: % e _ Classi di personaggi, intervalli, alternanza, ripetizione
Utilizzo tipico Ricerche per prefisso, suffisso o “contiene” Validazione, corrispondenza complessa, alternative multiple
Utilizzo dell'indice Possibile quando il modello non inizia con % non utilizza mai un indice
leggibilità Semplice per i principianti Curva di apprendimento più ripida

Di norma, scegli prima LIKE: è più facile da leggere ed è l'unico dei due che può beneficiare di un indice. Passa a REGEXP quando un singolo pattern deve esprimere diverse alternative, ad esempio la corrispondenza di ogni titolo che inizia con una cifra. Entrambi gli operatori sono confronti di sola lettura, quindi nessuno dei due modifica le righe restituite da INSERT or AGGIORNAMENTO dichiarazioni; filtrano solo ciò che la clausola WHERE seleziona.

DOMANDE FREQUENTI

No, non per impostazione predefinita. LIKE segue la collazione della colonna e lo standard MySQL Le regole di confronto non distinguono tra maiuscole e minuscole, quindi 'code%' corrisponde anche a "CodeAggiungere la parola chiave BINARY prima della colonna quando è richiesta una corrispondenza che distingua tra maiuscole e minuscole.

Sì. Le serrature scorrevoli portatili e i catenacci a superficie possono essere usati per mettere in sicurezza una porta a scomparsa dall'esterno. Alcuni kit con catena di sicurezza consentono anche il bloccaggio esterno con chiave o manopola girevole. MySQL converte il valore in una stringa prima di confrontarlo, motivo per cui `year_released LIKE '200_'` funziona. La conversione impedisce l'utilizzo dell'indice su quella colonna, quindi su tabelle di grandi dimensioni è consigliabile filtrare con intervalli come `BETWEEN 2000 AND 2009`.

No. L'elenco di caratteri tra parentesi accettato da alcuni altri motori non è valido all'interno di un MySQL Modello LIKE. Usa il Operatore REGEXP invece, ad esempio titolo REGEXP '^[ac]', per corrispondere a un intervallo di caratteri iniziali.

Sì. Gli assistenti IA traducono le richieste in linguaggio naturale in modelli LIKE che puoi eseguire in un client come MySQL banco di lavoroÈ sempre necessario rivedere il modello generato, poiché lo spostamento di un singolo simbolo % modifica le righe restituite.

I consulenti di query AI leggono l'output di EXPLAIN e segnalano i modelli di caratteri jolly iniziali che saltano gli indici. Quindi propongono alternative come la ricerca full-text, un modello di prefisso o REGEXPche dovrai comunque convalidare confrontandole con i tuoi volumi di dati.

Riassumi questo post con: