Avisar de contenido inadecuado

Nociones de SQL-Consulta y manipulación de datos

{
}

3.3. Consulta y manipulación de datos

Vamos a trabajar con las siguientes ordenes o sentencias:

  • SELECT

  • INSERT

  • UPDATE

  • DELETE

3.3.1. SELECT

 

 

La sentencia SELECT se utiliza para "seleccionar" datos que queremos consultar de la base de datos. Su sintaxis más básica es:

Podemos añadir una cláusula WHERE, para limitar qué filas de la tabla queremos:

Por ejemplo:

Si sólo queremos los perros:

Podemos imponer más de una condición, por ejemplo, buscar los que sean perros de sexo femenino:

Hasta ahora estamos solicitando todas las columnas, pero podemos indicar cuales:

Las cláusulas no tienen por qué ser sólo de equivalencia. Podemos usar muchos otros tipos de comparaciones:

Incluso cláusulas complejas que requieren paréntesis para indicar la asociación:

3.3.1.1. ORDER

En las bases de datos relacionales, el orden de las filas no tiene importancia. Normalmente, es el mismo (según se han insertado), pero no siempre es así y podría cambiar entre ejecución y ejecución. Para obtener los resultados de una consulta en un orden concreto, se puede aplicar la cláusula ORDER:

Es posible especificar más de una columna por la que ordenar, y ASC (por defecto) o DESC para indicar si se desea ordenación ascendiente o descendiente:

3.3.1.2. Incluyendo cálculos

Podemos incluso incluir cálculos en las consultas, tanto en las condiciones como en los campos a devolver. Y asignar nombres a las columnas "columna AS nombre" para simplificar y clarificar los resultados:

La consulta devuelve la edad de la mascota calculando la diferencia entre los años. Luego, compara las fechas cortando 5 caracteres a la derecha del inicio, es decir, eliminando el año. Si la de la mascota es mayor que la fecha actual, se suma 1, si no, 0 (una comparación se evalua a true 1 / false 0).

En la cláusula ORDER puede utilizarse el alias dado al cálculo y, por ejemplo, ordenar por edad con "ORDER BY age".

 3.3.1.3. DISTINCT

DISTINCT devuelve las columnas eliminando duplicados:

Si incluimos dos columnas, busca pares distintos:

La consulta de arriba no tiene sentido, DISTINCT no eliminará ningún duplicado porque los nombres de las mascotas son únicos. En cambio, sí que tendría sentido ver los tipos de mascotas por propietario:

3.3.1.4. COUNT / MAX / MIN / AVEGARE

COUNT cuenta las filas de la columna. Puede usarse de forma conjunta con un GROUP BY de las columnas que no se quieren contar. Por ejemplo, para ver el número de mascotas que tiene cada propietario:

Podríamos utiliza DISTINCT y COUNT a la vez, por ejemplo, para ver el número de tipos de mascota que tiene cada propietario:

COUNT puede utilizarse para contar resultados de una tabla o de una búsqueda:

MAX, MIN, AVERAGE pueden utilizarse de forma similar a COUNT, ya sea únicamente sobre una columna en una tabla, o bien, con GROUP BY para dividir los cálculos en grupos.

3.3.1.5. LIMIT

LIMIT nos permite indicar cuántos resultados queremos obtener y a partir de qué posición. Cuando la lista de resultados es muy grande, es habitual paginar.

3.3.1.6. NULL

Los valores NULL (sin valor asignado, de valor desconocido) son tratados de forma muy diferente al resto de valores a la hora de hacer comparaciones:

Como se puede comprobar, no es posible hacer comparaciones directas con "NULL", hay que usar los comparadores IS NULL / IS NOT NULL. Tanto 0 como '' (texto vacío), y cualquier valor no NULL son considerados diferentes de NULL si se comparan con IS NULL.

En nuestro ejemplo, para ver sólo los animales ya fallecidos NO podríamos utilizar WHERE death <> NULL, sino:

3.3.1.7. Fechas

MySQL proporciona unas funciones muy potentes para la manipulación y gestión de fechas: YEAR(), MONTH(), DAY()...

Por ejemplo, podemos ver qué mascotas cumplen años el mes en curso con:

Si queremos ser previsores y consultar los del mes siguiente, para preparar felicitaciones, podemos calcular la fecha con DATE_ADD(), que suma fechas e INTERVAL, que nos permite indicar periodos:

Otra forma de hacerlo con operadores puramente matemáticos sería calcular el MOD(12) del mes +1 (si el mes es 12, el módulo da 0; para el resto, el módulo da el propio mes).

3.3.1.8. Utilizando más de una tabla

Hasta ahora, hemos visto ejemplos que sólo consultan información de una tabla. La verdadera potencia de SQL y las bases de datos relacionales se obtiene cuando se utiliza la información de diversas tablas.

En la tabla "event" tenemos los eventos que ocurren a cada mascota:

Si queremos saber qué especies han tenido una camada (litter), en la tabla event sólo tenemos los partos y en la tabla "pet" es donde guardamos la especie de la mascota. Necesitamos relacionarlas para realizar la consulta:

Si añadimos "name" a la lista de columnas que queremos recuperar, obtendremos un error:

La columna "name" se encuentra tanto en la tabla "pet" como en "event", por lo que debe aclararse de qué tabla estamos hablando:

En vez de INNER JOIN, otra forma equivalente de hacerlo es directamente utilizando las dos tablas (producto cartesiano de sus columnas) y aplicando condiciones sobre ese producto:

INNER JOIN junta las filas de una y otra tabla cuando en la segunda hay resultados que concuerdan con la primera. En nuestro caso, si no existen eventos asociados a una mascota, la fila de esa mascota de la tabla "pet" no salgan en la consulta. Si deseamos mostrarlas, aunque no tengan eventos, se debe utilizar un LEFT JOIN.

Si comparamos estas dos sentencias, veremos que con LEFT JOIN Puffball, que no tiene ningún evento asociado, sí que aparece en la lista, con date y type a NULL (no tiene eventos asignados).

Puede no parecer importante en esta consulta, que se centra en los eventos pero sí, por ejemplo, para contar. Si queremos listar usuarios de un foro con el número de contribuciones, podemos querer que aparezca la lista completa, no sólo los que han contribuído alguna vez:

3.3.1.9. Utilizando variables En el transcurso de una sesión se pueden utilizar variables para recordar resultados de consultas anteriores. Normalmente, esto se puede hacer desde la aplicación que accede a la base de datos, pero, para programar funciones o triggers, son necesarias.

Por ejemplo, para encontrar los artículos con el precio más alto y más bajo, ejecutamos:

 3.3.1.9. Utilizando variables

En el transcurso de una sesión se pueden utilizar variables para recordar resultados de consultas anteriores. Normalmente, esto se puede hacer desde la aplicación que accede a la base de datos, pero, para programar funciones o triggers, son necesarias.

Por ejemplo, para encontrar los artículos con el precio más alto y más bajo, ejecutamos:

3.3.1.10. Sintaxis completa

La sintaxis completa de la orden SELECT es:

{
}
{
}

Comentarios Nociones de SQL-Consulta y manipulación de datos

Hola Pumaduu, he visto en un foro (a la desesperada, intentando recopilar información que me ayude), que hace un tiempo tú tb hicistes el curso de administración de bases de datos MySQL. Creo que yo ando tan perdida o incluso más, de lo que tú lo estuvisteis en su momento, puesto que yo tampoco tengo muy claro como enfrentarme a los ejercicios. Lo curioso es, que a tí te mandaron exactamente los mismos que a mí me están mandando. Por eso te quería pedir el favor de que me mandaras (s aún lo tienes y te apetece, claro), el ejercicio que dice:
Un veterinario quiere almacenar su lista de clientes, con sus datos personales y de contacto (dirección, teléfono, email, cuenta bancaria) y las mascotas que tiene cada uno, nombre, fecha nacimiento, de fallecimiento. Además quiere almacenar las últimas revisiones, para poder avisar al cliente de forma automática cuando haya transcurrido el tiempo recomendado entre revisiones. Este tiempo depende de cada especie. El historial de atención a cada mascota será guardado, incluyendo fecha, animal, gravedad, tipo de intervención y comentarios. Según la gravedad de la intervención y la especie y el año se definirán una serie de precios. Desea también llevar una agenda de citas planificadas con los clientes.
Creéme que me he leído el temario un montón de veces, y que ando exprimiéndome el cerebro pero no consigo hacerlo, y necesito pasarlo para conseguir el diploma.
Podrías ayudarme??
Muchas gracias!!! Saludos úrsula.
Úrsula Úrsula 10/11/2013 a las 16:49

Deja tu comentario Nociones de SQL-Consulta y manipulación de datos

Identifícate en OboLog, o crea tu blog gratis si aún no estás registrado.

Avatar de usuario Tu nombre