SQL Selección de datos (II)

-- LIKE e IN

-- Like sirve para buscar patrones sencillos en cadenas
-- LIKE es 'como' busca algo como el patrón que te indico
-- Ejemplo: Todos los médicos cuyo nombre empieza por M
-- Busca todos los nombres que tienen una M y después cualquier cantidad de letras
-- El % es como un 'comodín' que encaja con cualquier número de letras
-- Incluso con 0
SELECT * FROM medico where nombre like 'm%';

-- Ejemplos típicos de %
-- Cadena que empieza por una letra o cadena
SELECT * FROM medico where nombre like 'm%';
SELECT * FROM medico where nombre like 'ma%';
-- Cadena que acabe por una letra o cadena
SELECT * FROM medico where apellidos like '%z';
SELECT * FROM medico where apellidos like '%nez';
-- Cadena que empiece por una letra o cadena y acabe con otra
SELECT * FROM medico where apellidos like 'p%z';
SELECT * FROM medico where apellidos like 'pe%ez';
-- Cadena que contenga otra cadena
SELECT * FROM medico where apellidos like '%gue%';

-- Otras combinaciones
SELECT * FROM medico where apellidos like 'p%z s%z';

-- El guión bajo (_) encaja con un carácter
-- Busco todos los nombres que empiecen por 'ju' tengan cualquier letra y acaben en 'n'
SELECT * FROM medico where nombre like 'ju_n';
-- Todos los códigos que empiezan por M0 y acaban en 3
SELECT * FROM medico where codigo like 'M0_3';

-- En otras bases de datos permiten los corchetes [AEIOU]
-- Ejemplo: Like '[aeiou]%' 

-- ¿Qué medicos tienen pérez en el apellido?

select * from medico where apellidos like '%perez%';
-- ¿Qué medicos su teléfono acaba en 7?

select * from medico where telefono like '%7';

-- IN sirve para comproba si una cadena está en una serie de valores
-- Por ejemplo si está en una lista de nombres:

SELECT * FROM medico WHERE nombre in ('María','Ana');

SELECT * FROM medico WHERE especialidad in ('Cardiología','Neurología','Dermatología');

-- Si lo que quiero es los que no están en esa lista uso NOT IN

SELECT * FROM medico WHERE especialidad NOT IN ('Cardiología','Neurología','Dermatología');

-- Todo se puede combinar y es frecuente que así sea
-- Porque necesitamos obtener información de la base de datos
-- Del tipo que médicos han operado a más pacientes
-- Qué ingresos son de determinadas fechas y especialidades, etc...

-- Dime todos los médicos que no trabajen en cirugía
-- Cuyo apellido acabe en z o en s
-- Y su teléfono acabe en 7 o en 8

SELECT * FROM medico WHERE especialidad NOT LIKE '%cirugía%'
AND (apellidos LIKE '%z' OR apellidos LIKE '%s')
AND (telefono LIKE '%7' OR telefono LIKE '%8');

Publicado por

Juan Pablo Fuentes

Formador de programación y bases de datos