Hasta el momento se han advertido los mecanismos más sencillos de interactuación en lenguaje SQL. En este apartado se comenzará a explorar las posibilidades de consulta esenciales de SQL, concretamente el uso del operador LIKE, REGEXP (de comparación de cadenas) y los operadores AND, OR, XOR y NOT ( booleanos ).
Consulta con operador LIKE
El operador LIKE al igual que REGEXP, son operadores cuya misión es la comparación de cadenas o patrones dados en la consulta. La principal diferencia es que LIKE efectúa un reconocimiento de la cadena de consulta de forma absoluta a no ser que se especifiquen los caracteres precedentes y antecedentes con:
- ( % ) Establece coincidencia con cualquier extensión y tipo de caracter delante o detrás de la cadena de consulta, según se ubique el porcentaje.
- ( _ ) Establece coincidencia con 1 caracter de cualquier tipo delante o detrás de la cadena de consulta, según se ubique el guión bajo.
SELECT * FROM catalogo WHERE titulo LIKE '%cupe%'
Tabla1. Buscar cualquier registro de la tabla catálogo cuyo título contenga la cadena cupe. Esta consulta obtendría como resultado registros con la palabra recuperación, irrecuperable, ocupe, desocupen, etc.
SELECT * FROM catalogo WHERE isbn LIKE '978-84-____-___-5'
Tabla2. Buscar cualquier registro de la tabla catálogo cuyo isbn contenga cualquier caracter entre 978-84- y -5. Por ejemplo se obtendría como resultado 978-84-1234-123-5.
Consulta con operador AND ( && )
Recupera registros siempre y cuando se cumplan todas las condiciones establecidas. Si alguna no se cumple, no se incluye como resultando, saltando a los siguientes registros de la tabla. Por ejemplo la consulta de la tabla3, establece que los registros deberán cumplir la condición de contener en su título, subtítulo, resumen, descripción y autor la palabra texto. Obsérvese la sintaxis empleada (SELECT + campos + FROM + tabla afectada + WHERE + condición1(campo + LIKE + 'texto de consulta') AND condición2(campo + LIKE + 'texto de consulta') AND condición3(campo + LIKE + 'texto de consulta' ))
SELECT * FROM catalogo WHERE
titulo LIKE '%texto%' AND subtitulo LIKE '%texto%' AND
resumen LIKE '%texto%' AND
descripcion LIKE '%texto%' AND
autor LIKE '%texto%'
LIMIT 0,30
Tabla3. Consulta utilizando el operador AND
Consulta con operador OR ( || )
Recupera registros siempre que al menos una de las condiciones establecidas se verifique. Por ejemplo, en la tabla4 se establece que los registros deberán cumplir que o bien el título coincida con el patrón, o bien sea el subtítulo, el resumen, descripción o autor. No devolverá ningún registro si no se cumple al menos una de las condiciones.
SELECT * FROM catalogo WHERE
titulo LIKE '%texto%' OR subtitulo LIKE '%texto%' OR
resumen LIKE '%texto%' OR
descripcion LIKE '%texto%' OR
autor LIKE '%texto%'
LIMIT 0,30
Tabla4. Consulta utilizando el operador OR
Consulta con operador XOR
Variante absoluta del operador OR, recupera registros que cumplan una condición u otra pero nunca recuperará registros en que ambas condiciones se cumplan a la vez. Por ejemplo la consulta de la tabla5 recuperará cualquier libro del catálogo cuya temática sea arquitectura o bibliotecas, pero nunca arquitectura de bibliotecas.
SELECT * FROM catalogo WHERE
tematica LIKE '%arquitectura%' XOR
tematica LIKE '%bibliotecas%'
LIMIT 0,30
Tabla5. Consulta utilizando el operador XOR
Consulta con operador NOT ( ! )
Se utiliza como operador de precedencia con los operadores de comparación de cadenas de tipo LIKE, permite establecer una negación en las consultas. Por ejemplo en la tabla6, se recuperará todos los registros del catálogo cuyo autor sea Cervantes y cuyos títulos no contengan la palabra Quijote. El resultado probable sería La Gitanilla, Rinconete y Cortadillo, El Licenciado Vidriera, etc, menos El Quijote.
SELECT * FROM catalogo WHERE
autor LIKE '%cervantes%' AND
title
NOT LIKE '%quijote%'
LIMIT 0,30
Tabla6. Consulta utilizando el operador NOT
Consulta con operador REGEXP
REGEXP es un operador especializado en la comparación de cadenas de texto mediante expresiones regulares (REGular EXPressions). Las expresiones regulares se utilizan para afinar de forma mucho más precisa la consulta de datos o cadenas de texto. Estas se componen a base de caracteres especiales, los más comunes son:
- ( . ) Cada punto corresponde a un caracter individual, puede ser un número, letra o cualquier otro caracter.
- ( ^ ) Indica que el patrón comienza por la instrucción que siga a ^.
- ( $ ) Indica que el patrón finaliza con la cadena o instrucción que preceda a $.
- ( ... ) Tantos puntos se indiquen, tantos caracteres tendrá la cadena de texto objetivo.
- ( ^[Az]{5} ) Indica que el patron a buscar comienza por cualquier letra, con una extensión de 5 caracteres.
- ( ^.*[0-9]{2}$ ) Establece que la cadena comienza por cualquier caracter repetido n veces y que finaliza con un número de 2 cifras.
Por ejemplo en la
tabla7 se consultan todos los autores cuyo apellido comience por Bal. El resultado podrá ser muy diverso,
Balzac, Balz, Balza, etc.
SELECT * FROM catalogo WHERE
autor REGEXP '^Bal'
LIMIT 0,30
Tabla7. Consulta utilizando el operador REGEXP
Algunas referencias de interés para el estudio de expresiones regulares y sus pruebas son las siguientes: