Home > desarrollo, documentación, Spanish, Tech Crunch > Vistas SQL – A que sirven y como no hacerlas

Vistas SQL – A que sirven y como no hacerlas

Las vistas (“views”) en SQL son un mecanismo que permite generar un resultado a partir de un pedido (query) almacenado, y ejecutar nuevos pedidos sobre este resultado como si fuera una tabla normal.

Por ejemplo, si tenemos unas tablas que representan autores y libros, y queremos hacer un listado plano de libros y sus autores, podemos ejecutar un query que haga una junta (join) entre estas dos tablas. Pero si posteriormente queremos pedir solo unas líneas de este resultado a partir de otro filtro, vamos a tener que re-ejecutar el query completo, agregando nuestro filtro. Obviamente es posible, pero también implica repetir operaciones anteriores. En el caso de tener pedidos complejos, esto puede resultar en una pérdida de eficiencia grande, y mucho trabajo adicional para el desarrollador.

Por lo tanto, las vistas fueron inventadas hace un buen tiempo, aunque solo fueron disponibles en MySQL a partir de la versión 5.0.1 (PostgreSQL las tenía mucho antes, en comparación).

Como usar vistas

En muchos sistemas de gestión de bases de datos, usar vistas es algo muy simple. Por ejemplo:

CREATE VIEW biblio AS SELECT a.id as aid, a.name as author, b.id as bid, b.title as book FROM author a, book b WHERE b.author_id = a.id AND a.id > 100;

creará una vista que ya tiene preseleccionados los nombres de autores superiores a 100 con sus libros, en una misma tabla.

Ahora se puede hacer un SELECT * from biblio, y tendrá los resultados ya filtrados por el query que generó la vista. Pero lo más útil es poder seguir haciendo queries más específicos ahora sobre estos resultados agrupados y ya filtrados, como

SELECT * FROM biblio WHERE author LIKE ‘%rio%’;

para encontrar todas las entradas para las cuales los autores tienen un ID superior a 100 *y* que se llamen algun nombre que contenga “rio”.

Como *no* usar vistas

Esto siendo dicho, hay formas en las que no tiene sentido usar una vista (y doy gracias a la vida por llegar a hacerme ver estos ejemplos desconcertantes). Por ejemplo:

CREATE VIEW view_books AS SELECT * FROM books;

Obviamente, esto es completamente inutil y probablemente gastará la memoria de su servidor SQL.

Advertisements
  1. June 11, 2010 at 12:46 pm

    mmm, interesante, pero recuerdo haber trabajado en proyectos con vistas desde la version “5.0” de mysql junto con procedimientos almacenados(store procedures) y triggers

  2. ywarnier
    June 11, 2010 at 4:43 pm

    Tienes razón. La formulación de la página MySQL me llevó a pensar que era 5.1. Era 5.0.1 en realidad. Lo he corregido. Igual PostgreSQL tenía mucha anterioridad (en procedimientos almacenados también).

  3. Charly
    February 22, 2011 at 10:13 pm

    Hermoso y al grano. Excelente publicación

  4. November 30, 2011 at 2:26 am

    genial, es bueno saber donde no usarla lol

  5. December 7, 2011 at 4:41 am

    como hacer una vista en mysql sobre un mes en especifico, por ejemplo si quiero saber los reportes del mes actual como lo hago

  6. Salomé
    November 26, 2012 at 11:29 pm

    Hola,
    Tengo una vista en sql con un order. Pero en mi programa de visual basic aparece sin ese orden. ¿alguna sugerencia?

  7. April 18, 2013 at 1:54 am

    Excelente documentación quede claro con tu explicación.

  8. Eddie Vedder
    April 18, 2013 at 2:11 am

    Está explicación es monumental. Sencilla y sin rodeos.

  9. masam
    March 11, 2016 at 7:48 pm

    explicación muy breve y no habla sobre cual es la ventaja de usar las vistas, solo que se ahorra tiempo el programador, pero y el tiempo de ejecución, se gana algo?

  10. ssssss
    May 24, 2016 at 2:50 pm

    gracias!

  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: