dal 2015 - visita n. 618
Clausola like
Clausola like

 

Clausola like

Abbiamo già visto il comando SQL SELECT per prelevare dei dati da una tabella MySQL. E abbiamo anche usato la clausola condizionale WHERE per selezionare i record desiderati.

La clausola WHERE con il segno uguale (=) lavora bene quando è richiesta una perfetta coincidenza nella ricerca, come "prova_author = 'S. Pinco'". Ma potrebbe essere necessario filtrare tutti i dati dove in prova_author sia contenuto "nco". Questo risultato può essere ottenuto con la clausola LIKE anzichè con la clausola WHERE.

In sostanza la clausola LIKE prende in considerazione soltanto una parte dei caratteri, in modo simile al metacarattere (*) usato in ambiente UNIX allorquando si richiede l'elenco dei file in una directory.

La clausola LIKE coincide con la clausola WHERE se le viene passato l'intero campo come elemento di confronto.

Sintassi

Ecco la sintassi generale per il comando SELECT con la clausola LIKE per prelevare dati da una tabella MySQL:

SELECT field1, field2,...fieldN table_name1, table_name2...
WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'

Clausola like a linea di comando

Useremo il comando SELECT con la clausola WHERE...LIKE per prelevare dati dalla tabella dbprova_tbl.

Esempio

Nell'esempio che segue ricercheremo nella tabella dbprova_tbl tutti record in cui il nome dell'autore finisce per nco:

# mysql -u root -p password;

Dopo l'immissione della password di root si avrà:

mysql> use DBPROVA;
Database changed
mysql> SELECT * from dbprova_tbl 
    -> WHERE prova_author LIKE '%nco';
+-------------+----------------+-----------------+-----------------+
| prova_id    | prova_title    | prova_author    | submission_date |
+-------------+----------------+-----------------+-----------------+
|           3 | JAVA Tutorial  | S. Pinco        | 2015-02-18      |
+-------------+----------------+-----------------+-----------------+
1 rows in set (0.01 sec)

Clausola like con script PHP

Con una sintassi simile si può scrivere la clausola WHERE...LIKE nella funzione PHP mysql_query(), che viene usata per l'esecuzione del comando SQL. Poi una seconda funzione PHP, mysql_fetch_array(), serve per prelevare i dati preselezionati dalla clausola WHERE...LIKE con il comando SELECT precedente.

Ovviamente quando la clausola WHERE...LIKE verrà usata in unione con i comandi DELETE o UPDATE non servirà una seconda funzione PHP.

Esempio

Nell'esempio seguente verranno restituiti tutti i record della tabella dbprova_tbl in cui il nome dell'autore contiene nco:

<?php
$dbhost = 'localhost:3036';
$dbuser = 'root';
$dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ) {
  die('Connessione impossibile. Errore: ' . mysql_error());
}
$sql = 'SELECT prova_id, prova_title, 
               prova_author, submission_date
        FROM dbprova_tbl
        WHERE prova_author LIKE "%nco%"';

mysql_select_db('DBPROVA');
$retval = mysql_query( $sql, $conn );
if(! $retval ) {
  die('Dati non trovati. Errore: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
    echo "Tutorial ID :{$row['prova_id']}  <br> ".
         "Title: {$row['prova_title']} <br> ".
         "Author: {$row['prova_author']} <br> ".
         "Submission Date : {$row['submission_date']} <br> ".
         "--------------------------------<br>";
} 
echo "Ricerca riuscita.\n";
mysql_close($conn);
?>


Operatore regexp

MySQL supporta un altro tipo di operazione per la ricerca dei pattern basato sulle espressioni regolari, si tratta dell'operatore REGEXP. Per chi già conosce PHP o Perl è molto semplice comprenderne l'analogia con le cosiddette espressioni regolari.

Quella che segue è la tabella dei pattern che viene usata dall'operatore REGEXP.

PatternDescrizione
^Inizio della stringa.
$Fine della stringa.
.Ogni singolo carattere.
[...]Ogni carattere tra quelli elencati in parentesi quadre.
[^...]Ogni carattere diverso da quelli elencati in parentesi quadre.
p1|p2|p3Alternative, uno dei pattern indicati: p1, p2, p3.
*Zero o più instanze dell'elemento precedente.
+Una o più instanze dell'elemento precedente.
{n}n instanze dell'elemento precedente.
{m,n}Compreso tra m ed n instanze dell'elemento precedente.

Esempi:

Ora in base alla tabella precedente è possibile scrivere vari tipi di query SQL per ogni tipo di esigenza. I casi esaminati qui sotto prevedono una tabella persone_tbl con un campo nome:

Query per cercare tutti i nomi che iniziano per 'Ba'

mysql> SELECT nome FROM persone_tbl WHERE nome REGEXP '^Ba';

Query per cercare tutti i nomi che finiscono per 'sa'

mysql> SELECT nome FROM persone_tbl WHERE nome REGEXP 'sa$';

Query per cercare tutti i nomi che contengono 'mar'

mysql> SELECT nome FROM persone_tbl WHERE nome REGEXP 'mar';

Query per cercare tutti i nomi che iniziano per vocale o finiscono per 'sa'

mysql> SELECT nome FROM persone_tbl WHERE nome REGEXP '^[aeiou]|sa$';

















Introduzione
Installazione
Amministrazione
MySQL e PHP
Gestione database
Tipi di dati
Gestione tabelle
Query insert
Query select
Query update e delete
Clausola where
Clausola like e regexp
Clausola order by
Clausola join
Il valore NULL
Le transazioni
Il comando ALTER
Gli indici
Tabelle temporanee e cloni
Info sul database
Generazione di sequenze
Gestione dei duplicati
Iniezione di codice SQL
Export / Import



Sicuramente i più coraggiosi sono coloro che hanno la visione più chiara di ciò che li aspetta, così della gloria come del pericolo, e tuttavia l'affrontano.
Tucidide (460-403 a.C.)

Valid CSS!
pagina generata in 0.001 secondi