martes, 11 de diciembre de 2007

Subconsultas y expresiones de Consultas









Una subconsulta es una consulta dentro de otra. El DBMS usa los dos resultados la subconsulta para determinear resultados de la consulta que contiene la subconsulta. La consulta principal y la subconsulta expresan la solicitud original y recuperan los datos solicitados de la base de datos. La subconsulta SQL utiliza la clásula WHERE(filas individuales) y HAVINGN (grupos de filas).
  • La subconsulta contiene un único elemento de selección en su cláusula SELECT.
  • La cláusla ORDEN BY no puede especificar una subconsulta.
  • Nombra columnas que aparecen en una subconsulta pueden hacer referencia a las columnas delas tablas de la coluna principal.
  • La mayoria de implementaciones una subconsulta puede ser la UNION de varias instrucciones SELECT diferentes; solo permite una única SELECT.

Sunconsultas en la cláusula WHERE funcionan como parte del proceso de selección de filas y prodecen un valor que se usa para comprobar dentro de una condición de búsqueda.

Referencias externas es un nombre de columna que no se refiere a ninguna de las tablas listadas en la cláusula FROM de la subconsulta en la que aparece el nombre de la columna. La cláusula principal es el nombre de una columna que hace referencia a una columna de una tabla especificada con la clásula FROM. El DBMS examina la condición de búsqueda de la subconsulta, el valor de la columna de la referencia externa se toma de la fila que se esta comprobando en la consulta principal.

El test de comparación en subconsultas (<=,<>,<,<=>,>=) compara el valor de una expresión con el valor producido por una subconsulta y devuelve un resultado TRUE si la comparación es cierta.

Test de pernitencia a conjuntos funciona a igual que el test simple IN solamente que este produce un conjunto de valores de la subconsulta, en lugar de listarse explicitamente en la intrucción.

El test de existencia (EXISTS) comprueba si una subconsulta produce alguna fila como resultado de la consulta, se usa nadamas en la subconsulta.

  • Si la columna esta vacía. el test EXISTS es TRUE.
  • Si la subconsulta no produce filas, el test EXISTS es FALSE
  • El test EXISTS no puede producir un valor NULL.

Para invertir la lógica del test EXISTS usando la forma NOT EXISTS. La condición de búsqueda no usa realmente los resultados de la consulta, simplemente prueba si la subconsulta ressultados poreso SQL dice que las subconsultas deben devolver una única columna de datos, usando la instrucción SELECT de la consulta de un TEST EXISTS. El test ANY usa un operador de comprobación especificado para constrastar el valor del test, con cada valor de dato de la columna uno a uno.

El estándar SQL de ANSI/ISO especifica una alternativa para ANY y la clave SOME lo cual no es admitido en el SGBD. Acontinuación se describen algunas reglas detalladas de los resultados del test ANY cuando el valor del test se compara con columna de los resultados de la subconsulta .

  • Si la subconsulta produce una columna vacía de resultados el test, ANY devuelve FALSE no produce ningun valor en las subconsultas para el que se cumpla el test de comparación
  • Si el test de comparación es TRUE para alguna de los valores de datos de la columna, entonces la condición de búsqueda ANY devuelve TRUE hay algún valor producido por la subconsulta para el que se cumpla el test de comparación.
  • Si el test de comparación es FALSE para cada valor de dato la columna, entonces la condición de búsqueda ANY devuelve FALSE.
  • Si el test de comparación no es TRUE para algún valor de dato de la columna, pero es NULL para uno o mas valores de datos, entonces la condición de búsqueda ANY devuelve NULL.

El test ALL utiliza utiliza los mismos operadores y test de comparaciones que el test ANY. Solamente en las reglas en donde cambia sus resultados de valor del test de comparación de la subconsulta.

  • Si la subconsulta produce una columna vacía de resultados es test ALL devuelve TRUE.
  • Si el test de comparación es TRUE para todos los valores de datos de columna, entonces la condición de búsqueda ALL devuelve TRUE.
  • Si el test de comparación es FALSE para algún vaor de dato en la columna, entonces la condicion de búsqueda ALL devuelve FALSE.
  • Si el test de comparación no es FALSE para algún valor de dato de la columna, pero es NULL para uno o mas valores de dato, entonces la condición de búsqueda ALLdevuelve NULL.

Subconsulta de reuniones, la consulta interna es una consulta de resumen mientras que la externa no porque no hay forma de que dos consultas se puedan combinar en una única reunión. Una consulta anidada es la forma de presentar una solicitud de forma natural, consulta de tres niveles una consulta principal, subconsulta y una sub-subconsulta.

El estándar ANSI/ISO no especifica un número máximo de niveles de anidamiento, cuando una consulta llega a aumentar el número de niveles, la consulta es más dificíl de conservarla, porque SQL restringe el número de niveles a un número mas pequeño.

Subconsultas correlacionadas también llamadas referencias externas sus resultados estan correlacionados en cada fila individual de la consulta principal. En la cláusula puede haber un nombre de columna ambigua que una consulta principal , en un nombre de columna calificada, SQL se refiere si pertenece a una tabla de la subconsulta o otra tabla .

Subconsultas en la cláula HAVING funciona como selección de grupos de filas también se usa en subconsultas correlacionadas en la cláusula.




1 comentario:

lupini dijo...

Muy bien explicado, gracias ;)