Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Vistas | Algunos Temas Adicionales
Optimización de SQL y Características de Consulta

Vistas

Desliza para mostrar el menú

En el capítulo anterior, mencionamos un objeto llamado vista al hablar de los privilegios de usuario. Ahora consideremos este objeto con más detalle.

Una vista en SQL es una tabla virtual que se basa en el conjunto de resultados de una consulta SQL. Contiene filas y columnas igual que una tabla real, y los campos en una vista provienen de una o más tablas reales en la base de datos.
Las vistas se utilizan por varias razones, incluyendo la simplificación de consultas complejas, el aumento de la seguridad al restringir el acceso a datos específicos y la presentación de datos en un formato específico.

Características clave de las vistas

  • Tabla virtual: una vista no almacena datos físicamente. Obtiene sus datos de las tablas en las que se basa (llamadas tablas base);
  • Simplificación de consultas complejas: las vistas pueden simplificar consultas SQL complejas al encapsularlas en una sola vista. Esto facilita el trabajo con combinaciones y agregaciones complejas;
  • Seguridad: las vistas pueden restringir el acceso a filas o columnas específicas de datos, aumentando la seguridad. Se puede conceder acceso a la vista sin otorgar acceso a las tablas base subyacentes;
  • Consistencia: las vistas pueden presentar una interfaz consistente e inalterada incluso cuando el esquema de la base de datos subyacente cambia.

Implementación

Crearemos una vista llamada account_activity_view basada en nuestras tablas BankAccounts y UserLogs que muestra el número de cuenta, el nombre del titular, el saldo y la acción más reciente realizada en la cuenta.

1234567891011121314151617181920212223242526
-- Create a view that shows account details along with their latest action CREATE OR REPLACE VIEW account_activity_view AS SELECT ba.account_number, -- Select the account number from the bankaccounts table ba.account_holder, -- Select the account holder's name from the bankaccounts table ba.balance, -- Select the balance from the bankaccounts table ul.action AS latest_action, -- Select the latest action from the userlogs table (alias as latest_action) ul.timestamp AS latest_action_time -- Select the timestamp of the latest action (alias as latest_action_time) FROM BankAccounts ba -- Main table: bankaccounts LEFT JOIN ( -- Subquery to get the most recent action for each account SELECT DISTINCT ON (account_number) account_number, -- Select the account number action, -- Select the action timestamp -- Select the timestamp FROM UserLogs ORDER BY account_number, -- Order by account number timestamp DESC -- Order by timestamp in descending order to get the latest action ) ul ON ba.account_number = ul.account_number; -- Join the subquery result with bankaccounts on account number -- Get data from the view SELECT * FROM account_activity_view;
Descripción de la consulta
expand arrow
  1. CREATE VIEW account_activity_view AS

Esta sentencia crea una vista llamada account_activity_view que combina información de la tabla bankaccounts con la última actividad de la tabla userlogs. Proporciona una visión general de los titulares de cuentas, su saldo actual y su acción más reciente.

  1. Cláusula principal SELECT:

    • ba.accountnumber: Selecciona el número de cuenta de la tabla bankaccounts.
    • ba.accountholder: Selecciona el nombre del titular de la cuenta de la tabla bankaccounts.
    • ba.balance: Selecciona el saldo de la tabla bankaccounts.
    • ul.action AS latest_action: Selecciona la acción más reciente de la tabla userlogs y la asigna como latest_action.
    • ul.timestamp AS latest_action_time: Selecciona la marca de tiempo de la última acción y la asigna como latest_action_time.
  2. Cláusula FROM:

    • bankaccounts ba: La tabla principal es bankaccounts, y se le asigna el alias ba.
  3. Cláusula LEFT JOIN:

    • La subconsulta obtiene la acción más reciente para cada cuenta.
    • SELECT DISTINCT ON (accountnumber): Garantiza números de cuenta distintos, seleccionando solo la entrada más reciente por cuenta.
    • ORDER BY accountnumber, timestamp DESC: Ordena las entradas por número de cuenta y luego por marca de tiempo en orden descendente para obtener la acción más reciente.
  4. Condición de unión:

    • ul ON ba.accountnumber = ul.accountnumber: Une el resultado de la subconsulta con la tabla bankaccounts en base al número de cuenta.

Ahora puedes utilizar esta vista en otras consultas sin tener que recrear la consulta compleja con uniones, simplemente usando la vista creada como si fuera una tabla ordinaria.

Note
Nota

Aunque podemos usar la vista como una tabla regular, ¡no es realmente una tabla física! Los datos en la vista no se almacenan en el disco. En su lugar, cada vez que usamos la vista, su consulta se ejecuta y los datos resultantes se utilizan en la consulta principal.

question mark

¿Cuál de las siguientes afirmaciones describe mejor el aspecto de seguridad de las vistas?

Selecciona la respuesta correcta

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 3. Capítulo 6

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Sección 3. Capítulo 6
some-alt