Consultas básicas de selección
La sentencia SELECT
El comando SELECT permite:
- Obtener datos de ciertas columnas de una tabla.
- Obtener filas de una tabla de acuerdo con ciertos criterios.
- Realizar cálculos sobre los datos.
- Mezclar datos de tablas diferentes.
- Agrupar datos.
En este curso, vamos a quedarnos en lo más sencillo, que son las opciones 1, 2 y 3.
En su forma más simple, la sintaxis para la expresión SELECT es:
SELECT campos FROM tablas [WHERE condiciones]
- campos: son las columnas (separadas por comas) o cálculos que se desea recuperar de la base de datos. Se puede utilizar * si se desean recuperar todas las columnas.
- tablas: indica las tablas de las que se desean recuperar los registros. Mínimo debe haber una tabla para poder recuperar registros.
- condiciones: las condiciones que deben cumplir las filas que se desean recuperar.
La sentencia más sencilla sería la de recuperar todos los campos de una tabla:
SELECT *
FROM alumnos;
Si se desea recuperar solo DNI, nombre y apellidos de los alumnos, entonces se pondría:
SELECT DNI, nombre, apellidos
FROM alumnos;
Condiciones
La cláusula WHERE sirve para restringir los datos de salida. Permite poner una o varias condiciones que han de cumplir las filas que se desean recuperar, las que no cumplan esas condiciones no aparecerán en el resultado de la consulta.
Por ejemplo, si solo se desea mostrar los datos de las asignaturas que tengan una duración mayor de 2 horas a la semana. Sería como sigue:
SELECT *
FROM Asignatura
WHERE Horas_semanales > 2;
Se van a explicar a continuación los operadores básicos que se pueden utilizar en la cláusula WHERE.
Operadores de comparación
Operador |
Significado |
> |
Mayor que |
< |
Menor que |
>= |
Mayor o igual que |
<= |
Menor o igual que |
= |
Igual |
<> |
Distinto |
!= |
Distinto |
Valores lógicos
Operador |
Significado |
AND |
Devuelve verdadero si las expresiones de su izquierda y derecha son ambas verdaderas. |
OR |
Devuelve verdadero si cualquiera de las dos expresiones a izquierda y derecha del OR, son verdaderas. |
NOT |
Invierte la lógica de la expresión que está a su derecha. Si es verdadera, mediante NOT pasa a ser falsa. |
Por ejemplo, si se desea mostrar los datos de las asignaturas que tengan una duración mayor de 2 horas a la semana pero menor de 6. Sería:
SELECT *
FROM Asignatura
WHERE Horas_semanales>2 AND Horas_semanales<6;
LIKE
Se usa sobre todo con textos, permite obtener registros cuyo valor en un campo cumpla una condición textual. LIKE utiliza una cadena que puede contener estos símbolos:
Símbolo |
Significado |
% |
Una serie cualquiera de caracteres |
_ |
Un carácter cualquiera |
Por ejemplo, mostrar los nombres de los alumnos que empiecen por S:
SELECT nombre
FROM alumnos
WHERE nombre LIKE 'S%';
IS NULL
Devuelve verdadero si el valor que examina es nulo. Los campos tienen valor nulo cuando al insertar una fila, ese campo se deja vacío.
La siguiente sentencia devuelve el nombre y apellidos de los alumnos que no tienen email.
SELECT nombre, apellidos
FROM alumnosalumno
WHERE email IS NULL
Hay otros operadores como BETWEEN o IN, que no se van a explicar en este curso.
ORDENACIÓN
El orden inicial de los registros obtenidos por una SELECT es el orden en el que fueron introducidos. Para ordenar basándose en otros criterios, se utiliza la cláusula ORDER BY.
En esa cláusula se coloca una lista de campos que indica la forma de ordenar. Se ordena primero por el primer campo de la lista, si hay coincidencias por el segundo, si ahí también las hay por el tercero, y así sucesivamente.
Se puede colocar la palabra ASC O DESC (por defecto, si se indica nada, utiliza ASC).
Por ejemplo, la siguiente sentencia muestra todos los datos de los alumnos que no tienen email, ordenados alfabéticamente por el nombre:
SELECT nombre, apellidos FROM alumnosalumno
WHERE email IS NULL
ORDER BY nombre ASC;
Contar filas
Existe una función que sirve para contar filas, es la función count. Sirve para contar filas. Vamos a verlo con algún ejemplo.
La siguiente consulta cuenta cuántos alumnos hay en la tabla alumno:
SELECT count(*)
from alumno;
Si queremos contar cuántos alumnos hay cuyo apellido empiece por A:
SELECT count(*)
from alumno
where apellidos like 'A%';