Como siempre recomendamos antes de empezar dar un repaso artículos anteriores de instalación y configuración de una pequeña base de datos con PHPMyAdmin y MySQL.
En este artículo trabajaremos únicamente con la tabla ‘T_SENSOR_AUDIT‘ que contendrá información del muestreo de datos obtenidos con el paso del tiempo en distintos sensores de temperatura, humedad,… esta tabla pertenece al proyecto de creación de sistema de riego disponible también en el portal.
Nota: Evidentemente todos los datos que usaremos de prueba serán de ejemplo, ni que decir que no disponemos aún de tomas de datos reales ni conexión directa a una Raspberry Pi conectada.
1. Condiciones (WHERE) SQL
Partiremos de una base de datos donde ya existen registros como sería la tabla ‘T_SENSOR_AUDIT‘ en la siguiente imagen:
Las condiciones que se pueden introducir con la clausula ‘WHERE‘ son predicados lógicos que, en caso de satisfacerse en cierta fila o registro, harán que se muestre como resultado dicho registro o registros. En palabras más llanas, la condición ‘WHERE‘ nos permite filtrar entre toooooodos los registros de una tabla y obtener el listado de aquellos que estamos buscando.
A continuación mostramos varios ejemplos:
- Si se quiere extraer todos los datos de auditoria de sensores para el sensor con id 1
SELECT * FROM T_SENSOR_AUDIT WHERE SENSOR_ID = ‘1’
- Si se quiere extraer todos los datos de auditoria de sensores para el sensor con id 1 y valor mayor que 22
SELECT * FROM T_SENSOR_AUDIT WHERE SENSOR_ID = ‘1’ AND VALOR > 22
2. Operadores de condición
2.1. Operadores básicos de condición:
- Igual: =
- Mayor: >
- Mayor o igual: >=
- Menor: <
- Menor o igual: <=
- Distinto: <>
2.2. Operador ‘between’:
El operador ‘between‘ permite definir rangos. Por ejemplo, los datos de los sensores cuyo valor se encuentre entre 18 y 120 son:
SELECT * FROM T_SENSOR_AUDIT WHERE VALOR BETWEEN 18 AND 120
2.3. Operadores lógicos ‘AND’, ‘OR’ y ‘NOT’:
Para unir varias condiciones se pueden usar los operadores lógicos ‘AND’, ‘OR’ y ‘NOT’. Así podríamos extraer los mismos datos de auditoria de sensores donde el valor es mayor que 18 y menor que 120.
SELECT * FROM T_SENSOR_AUDIT WHERE VALOR > 18 AND VALOR < 120
Combinando operadores lógicos con ‘between‘ podríamos buscar los sensores que NO ESTÉN en un rango de valores dado
SELECT * FROM T_SENSOR_AUDIT WHERE VALOR NOT BETWEEN 25 AND 130
También podríamos hacer condiciones más complejas como buscar los sensores con valor entre 100 y 120 (incluyendo ambos) o estado ‘Activo’. La sentencia sería similar a la siguiente
SELECT * FROM T_SENSOR_AUDIT WHERE (VALOR >= 100 AND VALOR =< 200) OR ESTADO = ‘Activo’
Nota: Para diferenciar condiciones, sobre todo cuando se usa ‘OR’, es común separar o aislar ambas expresiones con paréntesis.
2.4. Operador ‘LIKE’:
Cuando se trata de establecer condiciones sobre cadenas de caracteres , resulta de gran utilidad el operador ‘LIKE‘, que busca cadenas conforme a alguna de combinación de caracteres establecida con ayuda de:
- %: Substituye a un número indefinido de caracteres indeterminados.
- _: Substituye a un carácter indeterminado.
A continuación mostramos varios ejemplos:
- Los registros de nuestra tabla ‘T_SENSOR_AUDIT‘ donde el estado comienzo por ‘Ac’
SELECT * FROM `T_SENSOR_AUDIT` WHERE ESTADO LIKE ‘Ac%’
- Los registros de nuestra tabla ‘T_SENSOR_AUDIT‘ donde el estado comienzo por ‘In’
SELECT * FROM `T_SENSOR_AUDIT` WHERE ESTADO LIKE ‘In%’
- Los registros de nuestra tabla ‘T_SENSOR_AUDIT‘ donde el estado contenga la cadena ‘ctiv’
SELECT * FROM `T_SENSOR_AUDIT` WHERE ESTADO LIKE ‘%ctiv%’
- Los registros de nuestra tabla ‘T_SENSOR_AUDIT‘ que tienen una ‘n’ como segunda letra
SELECT * FROM `T_SENSOR_AUDIT` WHERE ESTADO LIKE ‘_n%’
Nota: Admitimos que esta tabla da poco juego, una tabla que contuviera por ejemplo nombres de personas sería mejor para practicar 😛
Hasta aquí el artículo, continuaremos en nuestro próximo artículo con expresiones aritméticas en SQL.