SQL Vista En Linea (Inline View) | |
SQL >
SQL Avanzado >
Vista En Linea
Una vista en línea (inline view) es una declaración SELECT en la cláusula FROM. Una vista es una tabla virtual que tiene las características de una tabla pero que no contiene datos reales. En una construcción de vista en línea, en lugar de especificar el nombre de la tabla o tablas después de la palabra clave FROM, la fuente de los datos proviene realmente de la vista en línea. A veces se hace referencia a una vista en línea como una tabla derivada. Estos dos términos se utilizan de manera intercambiable. SintaxisLa sintaxis para una vista en línea es: SELECT "Nombre_de_Columna" FROM (Vista_En_Linea);
EjemploSupongamos que tenemos dos tablas: la primera tabla es User_Address, que asigna a cada usuario un código postal; la segunda tabla es User_Score, que registra todas las puntuaciones de cada usuario. La pregunta es, ¿cómo escribir una consulta SQL para encontrar el número de usuarios que obtuvieron más de 200 puntos para cada código postal? Sin utilizar una vista en línea, podemos lograr esto en dos pasos: Consulta 1 CREATE TABLE User_Higher_Than_200
SELECT User_ID, SUM(Score) FROM User_Score GROUP BY User_ID HAVING SUM(Score) > 200; Consulta 2 SELECT a2.ZIP_CODE, COUNT(a1.User_ID)
FROM User_Higher_Than_200 a1, User_Address a2 WHERE a1.User_ID = a2.User_ID GROUP BY a2.ZIP_CODE; En el código anterior, introdujimos una tabla temporal, User_Higher_Than_200, para almacenar la lista de usuarios que obtuvieron más de 200 puntos. Luego, User_Higher_Than_200 se utiliza para hacer un JOIN con la tabla User_Address y obtener el resultado final. Podemos simplificar el SQL anterior utilizando la construcción de vista en línea de la siguiente manera: Consulta 3 SELECT a2.ZIP_CODE, COUNT(a1.User_ID)
FROM (SELECT User_ID, SUM(Score) FROM User_Score GROUP BY User_ID HAVING SUM(Score) > 200) a1, User_Address a2 WHERE a1.User_ID = a2.User_ID GROUP BY a2.ZIP_CODE; El código que está en rojo representa una vista en línea. Hay dos ventajas al usar una vista en línea aquí: 1. No necesitamos crear la tabla temporal. Esto evita que la base de datos tenga demasiados objetos, lo cual es beneficioso ya que cada objeto adicional en la base de datos cuesta recursos para administrar. 2. Podemos utilizar una única consulta SQL para lograr lo que queremos. Observa que tratamos la vista en línea exactamente de la misma manera que tratamos una tabla. Al comparar la Consulta 2 y la Consulta 3, vemos que la única diferencia es que reemplazamos el nombre de la tabla temporal en la Consulta 2 con la declaración de la vista en línea en la Consulta 3. Todo lo demás permanece igual.
|