Dott. Gianni Nigita Dott. Sebastiano Di Bella 8 aprile 2012 1
Materiale didattico Libro di testo Paul DuBois, MySQL, Four Edition, Pearson Education, 2009 Documentazione on-line MySQL http://www.mysql.com/ 8 aprile 2012 2
Sommario Introduzione a MySQL Installazione MySQL Connessione/Disconnessione da un db MySQL Programmi Client Creazione Account e Privilegi Prompt MySQL Comandi MySQL (part I) Engine Tipi di dati Comandi MySQL (part II) Esempi Query NULL Funzioni & Operatori 8 aprile 2012 3
MySQL: un po di storia Creato dalla società MySQL AB sin dal 1979 soltanto dal 1996 supporta anche SQL. Sun Microsystem nel 2008 acquista la società per 1 miliardo di dollari Nel 2010 Oracle acquista Sun per 7,5 miliardi di dollari possedendo così anche MySQL 8 aprile 2012 4
MySQL è un RDBMS (I) Possiamo identificare 4 tipi di database in base alla loro struttura logica: Gerarchico: basato su una struttura ad albero in cui ogni dato che non sia a livello radice ha uno e un solo padre (anni 80) Reticolare: deriva da quello gerarchico, ne supera i limiti della struttura ad albero ma la sua complessità ne limita la diffusione Relazionale: organizza i dati in tabelle basandosi sulle relazione fra esse (MySQL) Ad oggetti: estende il concetto relazionale adattandolo alla programmazione ad oggetti 8 aprile 2012 5
MySQL è un RDBMS (II) RDBMS (relational database management system) ovvero un DBMS basato sul modello relazione (Edgar F. Codd) Una Relazione è la struttura di una tabella (entità) definita da records (righe di dati) e da attributi (colonne della tabella di dati) Esempio: 8 aprile 2012 6
MySQL Installation (I) Link: http://dev.mysql.com/downloads/ MySQL è disponibile per diverse piattaforme tra cui Linux e Windows; Altri Tool Utili MySQL Query Browser Tool grafico per l ottimizzazione delle query http://dev.mysql.com/doc/query-browser/it/mysql-querybrowser-introduction.html 8 aprile 2012 7
MySQL Installation (II) MySQL Connector Per la connessione con altre piattaforme Java/.NET/ C++/ect.. http://dev.mysql.com/downloads/connector/ MySQL Administrator Gestisce le operazioni (configuring, monitoring, start e stop) del server MySQL http://dev.mysql.com/doc/administrator/en/ MySQL Migration Toolkit Tool per la migrazione di db da ORACLE/Access a MySQL http://dev.mysql.com/doc/migration-toolkit/en/ 8 aprile 2012 8
MySQL Installation (III) MySQL Workbench E un tool che fornisce la gestione grafica del server MySQL e dei database http://dev.mysql.com/downloads/workbench/5.2.html 8 aprile 2012 9
Connect/Disconnect (I) Per connettersi al server è necessario fornire login e password localhost: hostname in cui risiede il MySQL root: username che possiede un account sul server -h indirizzo -u utente -P porta -p indica al server la richiesta della password all utente 8 aprile 2012 10
Connect/Disconnect (II) Per uscire (quit o exit) 8 aprile 2012 11
Per help Connect/Disconnect (III) 8 aprile 2012 12
Connect/Disconnect (IV) Visualizzare alcune informazioni relative al server e alla connessione 8 aprile 2012 13
Client (I) Login tramite QueryBrowser Nome Connessione 8 aprile 2012 14
Client (II) 8 aprile 2012 15
Client (III) XAMPP http://dev.mysql.com/do wnloads/workbench/5.2. html LAMP http://www.lamphowto.c om/ WAMP http://www.wampserver. com/en/ NOTA: Attenzione alla porta 8080 8 aprile 2012 16
Client (IV) Download all indirizzo http://www.phpmyadmin.net/home_page/ Oppure all interno dei pacchetti XAMPP LAMP WAMP 8 aprile 2012 17
Client (V) http://localhost/phpmyadmin/ 8 aprile 2012 18
Client (VI) 8 aprile 2012 19
Client (VII) 8 aprile 2012 20
Client (VIII) 8 aprile 2012 21
Client (IX) 8 aprile 2012 22
Client (IX) 8 aprile 2012 23
Client (X) 8 aprile 2012 24
Client (XI) 8 aprile 2012 25
Client (XII) 8 aprile 2012 26
Client (XIII) 8 aprile 2012 27
Client (XIV) 8 aprile 2012 28
Client (XV) 8 aprile 2012 29
Client (XVI) 8 aprile 2012 30
Dentro il db world Client (XVII) tables funzioni db world 8 aprile 2012 31
Client (XVIII) 8 aprile 2012 32
Client (XIX) 8 aprile 2012 33
Client (XX) 8 aprile 2012 34
Client (XXI) svuota table cancella table 8 aprile 2012 35
Client (XXII) 8 aprile 2012 36
Creazione Account/Privilegi (I) Eseguito dall utente root mediante l uso del comando GRANT GRANT Tutte le operazioni: SELECT, INSERT... Nome db Nome tabella user password localhost, Indicando il nome di un server è possibile effettuare la connessione da un server specifico 8 aprile 2012 37
Creazione Account/Privilegi (II) Mentre GRANT assegna i privilegi con REVOKE vengono ritirati: REVOKE (SELECT/ALL PRIVILEGES) on nome_db.( nome_tabella ;*) FROM nome_utente @localhost; 8 aprile 2012 38
Prompt di MySQL mysql> Prompt Significato Pronto per ricevere un comando; -> In attesa della linea successiva per un comando multi-linea; > In attesa della linea successiva per un comando multi-linea, apice di apertura nella riga precedente; > In attesa della linea successiva per un comando multi-linea, doppio apice di apertura nella riga precedente; `> In attesa della linea successiva per un comando multi-linea, che fa riferimento ad un identificatore che inizia con backtick; 8 aprile 2012 39
Esempi Ritorna utente e host con i quali si è fatto l accesso Ritorna la versione e la data corrente Ritorna l utente e la data corrente 8 aprile 2012 40
Comandi (I) Mostra i db Scelgo il db 8 aprile 2012 41
Comandi (II): show SHOW ha diverse forme che forniscono informazioni circa il db, le tables, le columns, o informazioni di status circa il server (help show) 8 aprile 2012 42
Comandi (III): gestione db Creazione database: mysql> CREATE DATABASE world ; mysql> USE world ; Creazione con IF NOT EXISTS: mysql> CREATE DATABASE [IF NOT EXISTS] world ; Cancellazione database: mysql> DROP DATABASE [IF EXISTS] world ; 8 aprile 2012 43
Comandi (IV): gestione table Creare una table: mysql> CREATE [TEMPORARY] TABLE [IF NOT EXISTS] nome_tabella [(definizione, )]; Temporary: la table è valida e visibile solo per la connessione corrente; If Not Exists: Per gestire gli errori in caso esista già la table; Definizione: Possono essere definizioni di una colonna oppure relative alla tabella 8 aprile 2012 44
Comandi (V): gestione table mysql>create TABLE `City` (`ID` int(11) NOT NULL AUTO_INCREMENT, `Name` char(35) NOT NULL DEFAULT '', ` CountryCode` char(3) NOT NULL DEFAULT '', `District` char(20) NOT NULL DEFAULT '', `Population` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`ID`)) ENGINE=MyISAM AUTO_INCREMENT=4080 DEFAULT CHARSET=latin1; 8 aprile 2012 45
Autoincrement Se NULL o NOT NULL non sono stati specificati il sistema per default associa il valore NULL Una colonna integer può avere l attributo addizionale AUTO_INCREMENT. Quando viene inserito un valore NULL (recommended) o zero (0) in una colonna AUTO_INCREMENT, alla colonna viene automaticamente inserito il successivo valore disponibile. Tipicamente il valore è value+1, dove value è il più grande valore presente nella tabella per quel campo. La sequenza AUTO_INCREMENT inizia con 1 8 aprile 2012 46
Engine (I) MySQL mette a disposizione diversi tipi di tabelle, ovvero storage engine per la memorizzazione dei dati. Due sono i sistemi principali: 1. Transazionali: sono più sicuri, permettono di recuperare i dati anche in caso di crash, e consentono di effettuare modifiche tutte insieme 2. Non transazionali: sono più veloci, occupano meno spazio su disco e minor richiesta di memoria. Durante la creazione di una tabella si specifica il tipo tramite il comando ENGINE: mysql>create TABLE t (i INT) ENGINE=INNODB 8 aprile 2012 47
Engine: MyISAM MyISAM è lo storage engine di default dal MySQL 3.23. E basato sullo storage ISAM. Ogni tabella MyISAM è memorizzata all interno del disco con tre file: 1. un file.frm che contiene la definizione della tabella, 2. un file.myd per i dati 3. un file.myi per gli indici 8 aprile 2012 48
Engine: InnoDB Foreign Key: Le tabelle InnoDB sono in grado di gestire l integrità referenziale tra le chiavi esterne del database, permettendo di specificare vari comportamenti a seconda della chiave esterna utilizzata Transizioni: Permette di eseguire le query che verranno validate o annullate mediante chiamate COMMIT o ROLLBACK 8 aprile 2012 49
Engine (II) Alcuni storage consentono di specificare il tipo di indice (struttura dati) durante la creazione delle tabella Bisogna usare la parola chiave USING type_name. Engine MySIAM InnoDB MEMORY/HEAP Type BTREE BTREE HASH, BTREE mysql> CREATE TABLE lookup ( id INT, INDEX USING BTREE (id)) ENGINE= MEMORY; 8 aprile 2012 50
Tipi di tabelle Storage Engine BDB HEAP ISAM InnoDB MEMORY MERGE MRG_MyISAM MyISAM Descrizione Tabelle transaction-safe con page locking I dati della seguente tabella sono solamente memorizzati nella memoria principale Primo storage engine di MySQL Tabella transaction-safe con lock di righe e chiavi esterne Un alias di HEAP Una collezione di tabelle MyISAM usate come se fossero una singola tabella Alias di MERGE Storage engine binario portabile, evoluzione di ISAM 8 aprile 2012 51
Engine: MyISAM vs InnoDB http://www.mysqlperformanceblog.com/2007/01/08/innod b-vs-myisam-vs-falcon-benchmarks-part-1/ 8 aprile 2012 52
Tipi di dati: Numerici (1/2) Tipo Byte Minimum Value Maximum Value (Signed/Unsigned) TINYINT[(M)] 1-128/0 127/255 (Signed/Unsigned) SMALLINT[(M)] 2-32768/0 32767/65535 MEDIUMINT[(M)] 3-8388608/0 8388607/16777215 INT[(M)] 4-2147483648/0 2147483647/4294967295 BIGINT[(M)] 8 9223372036854775808/0 9223372036854775807 /8446744073709551615 FLOAT[(M)] 4 +/-1.175494351E-38 +/- 3.402823466E+38 DOUBLE[(M)] 8 +/- 2.2250738585072014E- 308 +/- 1.7976931348623157E+308 8 aprile 2012 53
Tipi di dati: Numerici (2/2) INTEGER equivale a INT DOUBLE PRECISION equivale a DOUBLE REAL equivale a DOUBLE DECIMAL con M cifre di cui D decimali, occupa M+2 byte NUMERIC equivale a DECIMAL 8 aprile 2012 54
Tipi di dati: Data e Tempo Tipo Range Byte DATE 1000-01-01 9999-12-31 3 DATETIME 1000-01-01 00:00:00 9999-12-31 23:59:59 8 TIMESTAMP[(M)] Da 1970 01 01 ad una data nel 2037 4 TIME -838:59:59-838:59:59 3 YEAR[(M)] 1901 al 2144 per YEAR(4) 1 8 aprile 2012 55
Tipi di dati: Testo Tipo Max size Byte CHAR[(M)] M M VARCHAR(M) M L+1 TINYBLOB/ TINYTEXT 28-1 L+1 BLOB/TEXT 216-1 L+2 MEDIUMBLOB/MEDIU MTEXT 224-1 L+3 LONGBLOB/LONGTEXT 232-1 L+4 ENUM( value1, value2, ) 65535 elementi 1 o 2 byte SET ( value1, value2, ) 64 elementi 1,2,3,4 o 8 byte L rappresenta la lunghezza effettiva del testo 8 aprile 2012 56
Comandi (VI): gestione table 8 aprile 2012 57
Comandi (VII): gestione table 8 aprile 2012 58
Comandi (VIII): gestione table LOW_PRIORITY: l'inserimento non viene effettuato fino a quando esistonoclient che leggono sulla tabella interessata; DELAYED: anche in questo caso l'inserimento viene ritardato fino a quando la tabella non è libera. La differenza rispetto al caso precedente è che al client viene dato immediatamente l'ok, e le righe da inserire vengono mantenute in un buffer gestito dal server fino al momento della effettiva scrittura HIGH PRIORITY: annulla l'effetto di una eventuale opzione -- low-priority- IGNORE: permette di gestire eventuali errori che si verificano in fase di inserimento (chiavi duplicate o valori non validi) ON DUPLICATE KEY UPDATE: nel caso in cui si verifichi una chiave doppia, l'istruzione specificata viene eseguita sulla riga preesistente. 8 aprile 2012 59
Comandi (IX): gestione table INSERT INTO `City` VALUES (1,'Kabul','AFG','Kabol',1780000); INSERT INTO `City` VALUES (2,'Qandahar','AFG','Qandahar',237500); INSERT INTO `City` VALUES (3,'Herat','AFG','Herat',186800); INSERT INTO `City` VALUES (4,'Mazar- e - Sharif','AFG','Balkh',127800); INSERT INTO `City` VALUES (5,'Amsterdam','NLD','Noord- Holland',731200); 8 aprile 2012 60
Comandi (X): gestione table E possibile inserire i dati in un tabella anche leggendo le righe da file di testo con LOAD DATA INFILE 8 aprile 2012 61
Comandi (XI): gestione table Le opzioni LOW_PRIORITY e IGNORE funzionano come per una INSERT L'opzione LOCAL specifica che il file da leggere si trova sulla macchina del client. Se si usa FIELDS è obbligatorio indicare almeno una delle opzioni che la compongono: TERMINATED BY indica quale stringa separa i campi; ENCLOSED BY indica i caratteri usati per racchiudere i valori; ESCAPED BY specifica il carattere di escape usato per i caratteri speciali (cioè quelli utilizzati nelle altre opzioni di FIELDS e LINES) 8 aprile 2012 62
Comandi (XII): gestione table LINES può indicare le opzioni per le righe: STARTING BY indica una stringa che sarà omessa in ogni riga (può anche non trovarsi all'inizio della riga, nel qual caso sarà omesso tutto ciò che si trova prima). TERMINATED BY indica il carattere di fine riga mysql>load DATA INFILE test.txt INTO TABLE test LINES STARTING BY yyy ; Text.txt: yyy ROW,1 Blablabla yyy ROW,2 Carica: ( ROW,1), ( ROW ;2) IGNORE n LINES si usa per saltare le prime n righe del file di input 8 aprile 2012 63
Comandi (XIII): Select 8 aprile 2012 64
Comandi (XIV): Select SELECT seguita da una o più espressioni che saranno le colonne della tabella risultato; FROM seguita dai nomi di una o più tabelle dalle quali devono essere estratti i dati, per ogni tabella si può specificare un alias WHERE che specifica le condizioni in base alle quali ogni riga sarà estrattaoppure nodalletabelle GROUP BY che specifica le colonne sui cui valori devono essere raggruppate le righe nel risultato: tutte le righe con valori uguali verranno ridotte a una HAVING che specifica ulteriori condizioni da applicare alle righe dopo il raggruppamento effettuato dalla GROUP BY ORDER BY che specifica in quale ordine figureranno le righe del resultset LIMIT che stabilisce il massimo numero di righe da estrarre 8 aprile 2012 65
Esempi: Query (I) 8 aprile 2012 66
Esempi: Query (II) Quali sono i paesi (continente, regione, area) con popolazione > 500000, in ordine crescente? 8 aprile 2012 67
Esempi: Query (III) Quali lingue vengono parlate in China, in che percentuale? Usiamo gli alias per le tabelle 8 aprile 2012 68
Esempi: Query (IV) Quali nomi di paesi contengono una w? % Match con qualsiasi numero di caratteri, anche zero. 8 aprile 2012 69
Esempi: Query (V) Quali nomi di paesi contengono 14 caratteri? _ Match esattamente un carattere 8 aprile 2012 70
Esempi: Query (VI) Una espressione regolare è un modo molto potente per specificare un pattern per una ricerca complessa expr REGEX pat: Esegue un pattern match tra una stringa di espressione expr contro un pattern pat Operatori: ^: match l inizio di una stringa $: match la fine di una stringa.: match qualsiasi carattere a*=a{0,}: match qualsiasi sequenza di zero o più caratteri a a+=a{1,}: match una sequenza di una o più caratteri a de abc: match della sequenza de o della sequenza abc (abc)*: match zero o più istanze della sequenza abc 8 aprile 2012 71
Esempi: Query (VII) ^ match l inizio di una stringa Quali nomi dei paesi del Nord America iniziano per C? 8 aprile 2012 72
Esempi: Query (VIII) $ match la fine di una stringa Quali nomi dei paesi dell Europa finiscono con ia? 8 aprile 2012 73
Esempi: Query (IX). match qualsiasi carattere Quali Continente iniziano per A e quali nomi di paesi hanno 6 caratteri? 8 aprile 2012 74
Esempi: Query (X) de abc Match o della sequenza de o della sequenza abc Quali nomi di paesi contengono tal o y? 8 aprile 2012 75
Il valore NULL (I) In quale anno è stata conquistata l indipendenza? 8 aprile 2012 76
Il valore NULL (II) Il valore NULL per un campo assume il seguente significato: mancante, sconosciuto infatti è trattato diversamente dagli altri valori. Per testare il valore di NULL non si possono usare i consueti operatori di confronto =,<, o <> Esempio: 8 aprile 2012 77
Il valore NULL (III) Con l uso di IS NULL e IS NOT NULL si ottiene: Quando si usa ORDER BY i valori NULL sono inseriti all inizio con ASC ed alla fine con ORDER BY DESC. 8 aprile 2012 78
Comandi (XV): UPDATE SET: specifichiamo quali colonne modificare e quali valori assegnare WHERE: le condizioni che determinano quali righe saranno modificate ORDER BY: per decidere in che ordine effettuare gli aggiornamenti LIMIT: per indicare il numero massimo di righe da modificare 8 aprile 2012 79
Comandi (XVI): DELETE LOW_PRIORITY e IGNORE hanno il significato già visto. ORDER BY e LIMIT funzionano come nella UPDATE WHERE stabiliamo le condizioni in base alle quali le righe verranno eliminate 8 aprile 2012 80
Comandi (XVII): Funzioni Input arg 1 arg 2 arg n Funzioni Elaborazione Valori dei Risultati Output 8 aprile 2012 81
Comandi (XVIII): Funzioni Funzioni Funzioni Single-row Funzioni Multiple-row 8 aprile 2012 82
Comandi (XIX): Funzioni Stringhe Generali Funzioni (Single-Row) Numeri Conversione Date http://dev.mysql.com/doc/refman/5.0/en/functions.html 8 aprile 2012 83
Aritmetici: +" (addizione) Operatori (I) "-" (sottrazione) "*" (moltiplicazione) "/" (divisione) "%" (modulo) 8 aprile 2012 84
Operatori (II) Matematici: ABS(X) FLOOR(X) CEILING(X) SIN(X) COS(X) LN(X) LOG(X) LOG(B,X) Ect 8 aprile 2012 85
Operatori (III) Logici: NOT(!) AND(&&) 8 aprile 2012 86
Operatori (IV) OR( ) XOR 8 aprile 2012 87
Operatori (V) Confronto, da come risultati 1 oppure 0: =, <>!=, <= < >=, > <=> (NULL-safe), IS NULL, IS NOT NULL 8 aprile 2012 88
Operatori (VI) Se expr è più grande o uguale a min e expr è minore o oguale a max allora ritorna 1 altrimenti ritorna 0. expr BETWEEN min AND max expr NOT BETWEEN min AND max Equivalente a NOT (expr BETWEEN min AND max). 8 aprile 2012 89
Operatori (VII) Ritorna 1 se expr è uguale a qualsiasi altro valore nella lista di IN altrimenti ritorna 0. expr IN (value,...) expr NOT IN (value,...) Equivalente a NOT (expr IN (value,...)). 8 aprile 2012 90
Operatori (VIII) ISNULL(expr) COALESCE(list) Ritorna il primo elemento non-null nella lista: INTERVAL(N,N1,N2,N3,...) Ritorna 0 se N < N1, 1 se N < N2 ecc.o -1 se N è NULL. N1 < N2 < N3 <... < Nn 8 aprile 2012 91
Operatori (IX) Controllo di flusso: sono utili quando vogliamo eseguire dei test sui valori contenuti in una tabella e decidere cosa estrarre in base al risultato. CASE: la prima versione ritorna result quando value=compare_value; la seconda ritorna result quando la condizione è true; 8 aprile 2012 92
Operatori (X) IF: se expr1 è true ritorna expr2 altrimenti expr3; 8 aprile 2012 93
Operatori (XI) IFNULL: Se expr1 è not null ritorna expr1 altrimenti expr2; 8 aprile 2012 94
Operatori (XII) Funzioni su stringhe Funzioni Conversioni Case LOWER UPPER INITCAP Funzioni di Manipolazione Stringhe CONCAT SUBSTR LENGTH INSTR LPAD TRIM RIGHT 8 aprile 2012 95
Operatori (XIII) Funzione conversioni case: LOWER (str) LCASE(str) UPPER (str) UCASE(str) 8 aprile 2012 96
Operatori (XIV) Funzioni manipolazione stringhe: ASCII (str) : Ritorna il valore numerico del carattere più a sinistra di str BIN(N): Ritorna una stringa che rappresenta il valore binario di N 8 aprile 2012 97
Operatori (XV) BIT_LENGHT(str): Ritorna la lunghezza della stringa str in bit CHAR (N,...) : interpreta ogni argomento N come intero e ritorna una stringa consistente dei caratteri dati dal codice numerico degli interi 8 aprile 2012 98
Operatori (XVI) CHAR_LENGTH (str): ritorna la lunghezza della stringa misurata in caratteri. CHARACTER_LENGTH (str): sinonimo di char_length. CONCAT(str1,str2,...): ritorna la stringa che si ottiene concatenando gli argomenti. Ritorna NULL se un argomento è NULL 8 aprile 2012 99
Operatori (XVII) CONCAT_WS (separator,str1,str2, ): Il primo argomento è il separatore il resto gli argomenti CONV (N,from_base,to_base): converte i numeri tra differenti basi. 8 aprile 2012 100
Operatori (XVIII) ELT (N,str1,str2,str3, ): Ritorna str1 se N=1, str2 se N=2 ect FIELD (str,str1,str2,str3, ): Ritorna la posizione di str in str1,str2,ect 8 aprile 2012 101
Operatori (XIX) FIND_IN_SET (str,strlist): Ritorna un valore nel range tra 1 a N se la stringa str è nella lista delle stringhe strlist consistente di N sottostringhe, separate da,. HEX(N_o_S): ritorna il valore esadecimale della stringa 8 aprile 2012 102
Operatori (XX) INSERT (str, pos,len,newstr): Ritorna la stringa str con la substring alla posizione pos e per len caratteri di newstr. INSTR(str,substr): Ritorna la posizione della prima occorrenza della substr in str. 8 aprile 2012 103
Operatori (XXI) LEFT(str,len): Ritorna i len caratteri più a sinistra di str; LENGTH(str): Ritorna la lunghezza della stringa str in bytes; 8 aprile 2012 104
Operatori (XXII) LOCATE (substr,str)/(substr,str,pos): La prima sintassi ritorna la posizione delle prima occorrenza di substr in str, la seconda inizia la ricerca dalla posizione pos: LTRIM(str): Ritorna str con gli spazi iniziali rimossi: 8 aprile 2012 105
Operatori (XXIII) REPEAT(str,count): Ritorna una stringa consistente della stringa str, ripetuta countvolte: REPLACE(str,from_str,to_str):Ritorna la stringa str con tutte le occorrenze della stringa from_str sostituite con to_str: 8 aprile 2012 106
Operatori (XXIV) REVERSE(str): Ritorna la stringa invertita RIGHT(str,len): Ritorna i len caratteri più a destra di str RTRIM(str): Ritorna la stringa str con gli spazi finali rimossi 8 aprile 2012 107
Operatori (XXV) STRCMP(expr1,expr2): Ritorna 0 (zero) se le due stringhe sono uguali, -1 se il primo argomento è più piccolo del secondo, 1 altrimenti. expr LIKE pat [ESCAPE escape_char ]: Ritorna 1 oppure 0 8 aprile 2012 mysql> SELECT 'David!' LIKE 'David_'; -> 1 mysql> SELECT 'David!' LIKE '%D%v%'; -> 1 mysql> SELECT 'David!' LIKE 'David\_'; -> 0 mysql> SELECT 'David_' LIKE 'David\_'; -> 1 108
Operatori (XXVI) MATCH (col1,col2, ) AGAINST (expr[in BOOLENA MODE WITH QUERY EXPANSION]): MATCH... AGAINST() è utilizzata per ricerche full text, ritorna la rilevanza tra il testo che si trova nelle colonne (col1,col2,...) e la query expr. La similarità è un valore positivo in virgola mobile. La funzione match esegue una ricerca in linguaggio naturale per una stringa contro un text collection che è rappresentato da una o più colonne incluse in un indice FULL TEXT 8 aprile 2012 109
Full-Text Search (I) 8 aprile 2012 110
Full-Text Search (II) La ricerca di default è insensitive 8 aprile 2012 111
Full-Text Search (III) Mostriamo come recuperare il valore della rilevanza esplicitamente 8 aprile 2012 112
Full-Text Search (IV) Recuperiamo il valore della rilevanza e ordiniamo le righe in maniera decrescente per farlo usiamo MATCH sia nella SELECT che nel WHERE. 8 aprile 2012 113
Full-Text Search (V) E possibile eseguire una ricerca full-text in boolean mode, i segni + e indicano le parole che devono essere presente o assenti, rispettivamente per un match che occorre. 8 aprile 2012 114
Full-Text Search (VI) A volte la stringa di ricerca è troppo corta e potrebbe tralasciare dei risultati significativi, è possibile utilizzare query expansion che in genere implica che una ricerca è correlata con unaconoscenza sottintesa Attenzione perché può aumentare il rumore dei risultati. 8 aprile 2012 115