DML – SELECT

¿Qué es DML?

DML es la parte de SQL que se encarga de las consultas a la base de datos, podemos verlo como el medio que nos permite hacer preguntas y que gestiona las respuestas, debemos usarlo si queremos saber cuantos niños se llaman Alberto, si queremos ver los salarios de los empleados de una base de datos o si queremos filtrar los alumnos que aprobaron un examen concreto.

Para hacer esto recurrimos a las sentencias SELECT. Estas sentencias siguen la siguiente estructura:

*enlace a un simulador de SQL donde podrás ir probando consultas -> simulador

SELECT nombreAlumno FROM alumnos;
-- Existe la opción de sustituir el nombre (o nombres) de las columnas por un *
-- Esto hará que la consulta devuelva todas las columnas de la tabla.
SELECT * FROM alumnos;

--IMPORTANTE: cada sentencia SQL debe terminar con ; (punto y coma).

La salida mostrará la lista de nombres de los alumnos que hay en la base de datos.

Es posible solicitar más de una columna de datos en la misma consulta:

SELECT nombrealumno, edadAlumno FROM alumnos;

Esta devolverá la lista de nombres de los alumnos y sus edades.

En el caso de querer definir un nombre diferente para las columnas de la respuesta, puede hacerse utilizando el comando «as», seguido del nombre:

SELECT nombreAlumno as nombre FROM alumnos;

Comandos de consulta

El lenguaje DML ofrece muchos posibles comandos que nos permiten acotar y modificar las consultas, veremos la aplicación de algunos de ellos (enlace donde complementar la información):

  • Distinct: la sentencia DISTINCT se utiliza para devolver solo distintos valores.
SELECT DISTINCT alumnoNombre FROM alumnos;
-- La salida mostrará los nombres sin repetir.
-- IMPORTANTE: se pueden definir los comandos en mayúscula o minúscula, pero por comodidad se usan mayus.
  • Where: una de las sentencias más importantes, define condiciones de la consulta.
SELECT nombreAlumno FROM alumnos WHERE nombreAlumno = 'Jorge';
-- La anterior consulta mostrará el nombre de todos los alumnos que se llamen Jorge.

-- IMPORTANTE: las cadenas de texto deben definirse entre comillas simples.

-- También podemos hacer consultas basadas en operaciones matemáticas (en este caso mayor que 12):
SELECT edadAlumno FROM alumnos WHERE edadAlumno > 12;
  • Between: permite acotar los resultados entre dos valores.
-- Edades entre 5 y 20
SELECT edadAlumno FROM alumnos WHERE edadAlumno BETWEEN 5 AND 20;
  • Like: Realiza una búsqueda basada en el patrón introducido.
SELECT * FROM alumnos WHERE alumnoNombre LIKE 'Jorge';
-- También se pueden realizar las consultas mediante expresiones regulares (regexp):
SELECT * FROM alumnos WHERE alumnoNombre LIKE 'j%';
-- La consulta anterior devuelve todos los alumnos cuyo nombre comienza por 'J' ó 'j'
--IMPORTANTE: Es posible utilizar la negación de LIKE (no comenzados por J en este caso)
SELECT * FROM alumnos WHERE alumnoNombre NOT LIKE 'j%';

*Pequeño tutorial sobre regExp en SQL -> regExp.

  • In: Enumera los posibles valores que debe buscar en la base de datos.
-- Busca todos los alumnos que se llamen Breogán o Laura.
SELECT * FROM alumnos WHERE nombreAlumno IN ('Breogán','Laura');
  • And Or y Not: Las sentencias condicionales que permiten concatenar condiciones.
-- Alumnos de edades entre 5 y 20
SELECT * FROM alumnos WHERE alumnoEdad > 5 AND alumnoEdad <20; 
-- Alumnos de edades superiores a 5 ó menores de 20
SELECT * FROM alumnos WHERE alumnoEdad > 5 OR alumnoEdad <20;
-- Alumnos cuya edad no sea inferior a 10
SELECT * FROM alumnos WHERE NOT alumnoEdad <10;
  • Order by: Sentencia utilizada para ordenar los resultados (ascendente por defecto).
-- Devuelve los alumnos mayores de 5 años ordenados de manera ascendente.
SELECT * FROM alumnos WHERE alumnoEdad > 5 ORDER BY alumnoEdad ASC;
-- Devuelve los alumnos mayores de 5 años ordenados de manera descendente.
SELECT * FROM alumnos WHERE alumnoEdad > 5 ORDER BY alumnoEdad DESC;
-- Podemos realizar la misma búsqueda pero ordenada alfabéticamente por un campo de texto.
SELECT * FROM alumnos WHERE alumnoEdad > 5 ORDER BY alumnoNombre;
  • Is null: Se pueden solicitar a la base de datos los datos de valor nullo.
--Selecciona los alumnos que no hagan deporte
SELECT * FROM alumnos WHERE alumnoDeporte IS NULL;
--Selecciona los alumnos que hacen deporte
SELECT * FROM alumnos WHERE alumnoDeporte IS NOT NULL;
  • Limit: Permite acotar numéricamente las coincidencias.
-- Devuelve los 10 primeros resultados
SELECT * FROM alumnos LIMIT 10;
-- Devuelve 8 resultados comenzando en el quinto, ordenados de manera ascendente por edad.
SELECT * FROM alumnos ORDER BY alumnoEdad ASC LIMIT 5, 8;
  • In: Permite especificar varios valores en una cláusula WHERE.
--La siguiente sentencia buscará los alumnos llamados Ruth, Alfredo o Paula.
SELECT * FROM alumnos WHERE alumnoNombre IN ('Ruth', 'Alfredo', 'Paula');
  • Between: Selecciona los valores dentro de un rango, es una sentencia inclusiva, es decir, los valores límite están incluidos.
-- Devuelve todos los datos de los alumnos cuyas edades estén entre 12 y 15.
SELECT * FROM alumnos WHERE alumnoEdad BETWEEN 12 AND 15;

Funciones de agregado (grupales)

Las siguientes sentencias se utilizan sobre conjuntos de datos para conocer datos que los engloban, como el mayor, el menor, la media…etc

  • Min/Max: Sentencia usada para extraer la coincidencia con el valor más bajo/alto.
-- Selecciona el alumno de menor edad de los mayores de 10 años
SELECT MIN(alumnoEdad) FROM alumnos WHERE edad > 10;
-- Selecciona el alumno de mayor edad de los mayores de 10 años
SELECT MAX(alumnoEdad) FROM alumnos WHERE edad > 10;
  • Count/avg/sum: Sentencias de control numérico de coincidencias.
--Count -> Devuelve el número de coincidencias
SELECT COUNT(alumnoEdad) FROM alumnos;
--Avg -> Devuelve el valor medio de una columna numérica
SELECT AVG(alumnoEdad) FROM alumnos;
--Sum -> Devuelve la suma de una columna numérica
SELECT SUM(alumnoEdad) FROM alumnos;

SQL JOINS

Las cláusulas join se usan para combinar columnas de varias tablas en base a la relación que haya entre ellas, por ejemplo, los alumnos tendrán una lista de materias cursadas y los profesores una lista de materias que imparten, se podría, mediante un join, crear una consulta que diga qué profesor imparte materia a qué alumnos.

Subconsultas SQL

Cuando queremos realizar consultas muy complejas o detalladas, a menudo tendremos que definir varias condiciones, una herramienta útil para llevarlo a cabo son las subconsultas, que no es más que integrar unas consultas en el interior de otras, donde los resultados de la subconsulta interna afectan a la consulta principal.

select *
from articulos
where articulo_precioVenta > any (select articulo_precioVenta
                    from articulos
                    where articulo_color="NEGRO");

Uno de los ejemplos prácticos más útiles para comprender el concepto es el uso de rangos a través de between:

-- Mostramos todos los alumno cuyas edades estén entre el más bajo de la clase 3 y el más alto de la clase 1: 
SELECT * from alumnos where alumnoEdad BETWEEN 
(SELECT min(alumnoEdad) from alumnos WHERE alumnoClase = 3) AND
(SELECT max(alumnoEdad) from alumnos WHERE alumnoClase = 1)

¿Te ha resultado útil?

Promedio de puntuación 0 / 5. Recuento de votos: 0

Deja una respuesta