DEV Community

Cover image for Bases de datos: Vistas
Leonel Gareis
Leonel Gareis

Posted on

Bases de datos: Vistas

Photo by luis gomes from Pexels

En algun momento de nuestras vidas como desarrolladores, nos hemos topado con SQL.

Hemos hecho consultas agradables:

SELECT * FROM users
WHERE age > 18;
Enter fullscreen mode Exit fullscreen mode

Otras mas complejas

SELECT * FROM users
INNER JOIN posts
ON (posts.user_id = users.id)
WHERE users.age > 18;
Enter fullscreen mode Exit fullscreen mode

Y mas complejas aun

SELECT * FROM employees
INNER JOIN departments
ON (departments.id = employees.dep_id)
WHERE salary > (
    SELECT AVG(salary) FROM employees
);

Enter fullscreen mode Exit fullscreen mode

Y en algun momento te habras preguntado: ¿Hay una forma mas sencilla que estar copiando y ejecutando la misma sentencia SQL una y otra vez?

Bueno, esto ya esta respondido en el titulo 😁

Introduccion a Vistas

Las vistas son tablas virtuales creadas a partir de una consulta almacenada.
Este mecanismo de SQL nos permite definir, una unica vez, una consulta (query) y usarla tantas veces como deseemos.

Como crear una vista

Esto depende del motor de bases de datos usado.
Yo uso PostgreSQL, pero vos podes usar el que quieras (solo vas a tener que buscar la sintaxis)

CREATE VIEW <nombre_de_la_vista> AS
    <SENTENCIA_sql>
Enter fullscreen mode Exit fullscreen mode

Como usar una vista

Dado que se crea una tabla virtual, podemos consultarla como tal a traves del select.

SELECT * FROM <nombre_de_la_vista>
Enter fullscreen mode Exit fullscreen mode

Veamos un ejemplo

Mi tabla users tiene los siguiente campos:

  • id
  • username
  • email
  • password
  • age

Necesito obtener el username y el email de aquellos usuarios cuya edad sea mayor a 18.

Antes, hubieramos realizado una consulta SQL normal de toda la vida.

SELECT username, email FROM users
WHERE age > 18;
Enter fullscreen mode Exit fullscreen mode

Pero ahora que sabemos vistas, las cosas se ponen mas interesantes

CREATE VIEW users_legal_age AS 
    SELECT username, email FROM users
    WHERE age > 18;

SELECT * FROM users_legal_age
Enter fullscreen mode Exit fullscreen mode

Lo interesante de las vistas es que, dado que son tablas, podemos seguir lanzando distintas consultas sin necesidad de modificar la query original.

Si yo quisiera en este momento obtener, ademas de los usuarios mayores de edad, aquellos cuyo username contiene la cadena 'admin', solo tendria que hacer esto:

SELECT * FROM users_legal_age
WHERE username LIKE '%admin%'
Enter fullscreen mode Exit fullscreen mode

Y nuestra query original se mantiene intacta.

Recomendacion para operaciones con mas tablas

Si tenemos la siguiente vista

CREATE VIEW view_posts_users AS
    SELECT * FROM users
    INNER JOIN posts
    ON (posts.user_id = users.id)
    WHERE users.age > 18;
Enter fullscreen mode Exit fullscreen mode

Debemos de tener cuidado con los campos que tienen el mismo nombre.

Si users y posts tienen campos cuyos nombres son iguales, debemos de asignarle un alias a esos campos para evitar conflictos.

¿Cuando debo usar vistas?

Lo recomendado es que lo uses cuando tenes una query compleja y que requiere ser usada mas de una vez.

Aca tiene sentido crear una:

CREATE VIEW view_admin_users_legal_age AS
    SELECT first_name, last_name
    FROM users
    WHERE age > 18 AND username LIKE '%admin%';
Enter fullscreen mode Exit fullscreen mode

Aca no:

CREATE VIEW view_list_users AS
    SELECT * FROM users;
Enter fullscreen mode Exit fullscreen mode

Esto solo fue una introduccion, lo demas, lo dejo a tu imaginacion para que sigas practicando y probando 💪

Top comments (1)

Collapse
 
dacreb profile image
Alesba

Las vistas como las adoro son de lo que mas ocupo actualmente, gran dato.