72 - Variables de usuario.


Cuando buscamos un valor con las funciones de agrupamiento, por ejemplo "max()", la consulta nos devuelve el máximo valor de un campo de una tabla, pero no nos muestra los valores de otros campos del mismo registro. Por ejemplo, queremos saber todos los datos del libro con mayor precio de la tabla "libros" de una librería, tipeamos:

 select max(precio) from libros;

Para obtener todos los datos del libro podemos emplear una variable para almacenar el precio más alto:

 select @mayorprecio:=max(precio) from libros;

y luego mostrar todos los datos de dicho libro empleando la variable anterior:

 select * from libros
  where precio=@mayorprecio;

Es decir, guardamos en la variable el precio más alto y luego, en otra sentencia, mostramos los datos de todos los libros cuyo precio es igual al valor de la variable.

Las variables nos permiten almacenar un valor y recuperarlo más adelante, de este modo se pueden usar valores en otras sentencias.

Las variables de usuario son específicas de cada conexión, es decir, una variable definida por un cliente no puede ser vista ni usada por otros clientes y son liberadas automáticamente al abandonar la conexión.

Las variables de usuario comienzan con "@" (arroba) seguido del nombre (sin espacios), dicho nombre puede contener cualquier caracter.

Para almacenar un valor en una variable se coloca ":=" (operador de asignación) entre la variable y el valor a asignar.

En el ejemplo, mostramos todos los datos del libro com precio más alto, pero, si además, necesitamos el nombre de la editorial podemos emplear un "join":

 select l.titulo,l.autor,e.nombre
  from libros as l
  join editoriales as e
  on l.codigoeditorial=e.codigo
  where l.precio = @mayorprecio;

La utilidad de las variables consiste en que almacenan valores para utilizarlos en otras consultas.

Por ejemplo, queremos ver todos los libros de la editorial que tenga el libro más caro. Debemos buscar el precio más alto y almacenarlo en una variable, luego buscar el nombre de la editorial del libro con el precio igual al valor de la variable y guardarlo en otra variable, finalmente buscar todos los libros de esa editorial:

 select @mayorprecio:=max(precio) from libros;

 select @editorial:=e.nombre
  from libros as l
  join editoriales as e
  on l.codigoeditorial=e.codigo
  where precio=@mayorprecio;

 select l.titulo,l.autor,e.nombre
  from libros as l
  join editoriales as e
  on l.codigoeditorial=e.codigo
  where e.nombre=@editorial;

Retornar