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;
Otras mas complejas
SELECT * FROM users
INNER JOIN posts
ON (posts.user_id = users.id)
WHERE users.age > 18;
Y mas complejas aun
SELECT * FROM employees
INNER JOIN departments
ON (departments.id = employees.dep_id)
WHERE salary > (
SELECT AVG(salary) FROM employees
);
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>
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>
Veamos un ejemplo
Mi tabla users
tiene los siguiente campos:
- id
- username
- 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;
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
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%'
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;
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%';
Aca no:
CREATE VIEW view_list_users AS
SELECT * FROM users;
Esto solo fue una introduccion, lo demas, lo dejo a tu imaginacion para que sigas practicando y probando 💪
Top comments (1)
Las vistas como las adoro son de lo que mas ocupo actualmente, gran dato.