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;

Otras mas complejas

SELECT * FROM users
INNER JO…


This content originally appeared on DEV Community and was authored by Leonel G.

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
  • 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;

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 ?


This content originally appeared on DEV Community and was authored by Leonel G.


Print Share Comment Cite Upload Translate Updates
APA

Leonel G. | Sciencx (2021-05-24T00:46:42+00:00) Bases de datos: Vistas. Retrieved from https://www.scien.cx/2021/05/24/bases-de-datos-vistas/

MLA
" » Bases de datos: Vistas." Leonel G. | Sciencx - Monday May 24, 2021, https://www.scien.cx/2021/05/24/bases-de-datos-vistas/
HARVARD
Leonel G. | Sciencx Monday May 24, 2021 » Bases de datos: Vistas., viewed ,<https://www.scien.cx/2021/05/24/bases-de-datos-vistas/>
VANCOUVER
Leonel G. | Sciencx - » Bases de datos: Vistas. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2021/05/24/bases-de-datos-vistas/
CHICAGO
" » Bases de datos: Vistas." Leonel G. | Sciencx - Accessed . https://www.scien.cx/2021/05/24/bases-de-datos-vistas/
IEEE
" » Bases de datos: Vistas." Leonel G. | Sciencx [Online]. Available: https://www.scien.cx/2021/05/24/bases-de-datos-vistas/. [Accessed: ]
rf:citation
» Bases de datos: Vistas | Leonel G. | Sciencx | https://www.scien.cx/2021/05/24/bases-de-datos-vistas/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.