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.




domingo, 9 de diciembre de 2007

Consultas de Resumen






La funciòn de columnas (AVG) de SQL toma una columna de datos completada como argumento y produce un ùnico elemento de datos que resume la estructura.

SQL ofrece 6 funciones de columna diferente de datos:

  • SUM. Calcula el total de una columna. Los datos de la columna deben tener un tipo numerico (entero, decimal, flotante o meneda en el resultado es mayor precisiòn.
  • AVG. Calcula el valor medio de una columna. Suma los valores de la columna y despues los divide entre los nùmeros de valores de la columna.
  • MIN. Halla el menor valor de una columna.
  • MAX. Halla el mayor valor de una columna. Estas dos hallan valores menores y mayores los datos de las columnas que contienen informaciòn nùmerica los de cadena compara los nùmeros en un orden algebraico y la fecha-hora compara secuencialmente, la comparaciòn de dos cadenas depende del conjunto de caràcteres que use y el resultado es el mismo tipo de dato que los de la columna.
  • COUNT. Cuenta el nùmero de valores de una columna. Los datos de la columna pueden ser de cualquier tipo, devuelven un entero en el tipo dato de la columna del resultado, no importa realmente la columna que se especifique como argumento de la funciòn COUNT.
  • COUNT(*) Cuenta las filas de los resultados.

La funciòn de la columna aparece en la lista de selecciòn produciendo una columna de resumen o una lista de selecciòn no puede contener ninguna funciòn de columna produciendo una consulta detallada. La regla es un poco mas compleja en las consultas agrupadas y en subconsultas una de las funciones que usan las columnas de esta tabla de resultados detalladosque genera una ùnica fila de resultados de resumen.

E l estandar SQL de ANSI/ISO especifica que los valores NULL de la columna se ignora por las funciones de columna, acontinuaciòn se mencionan reglas para el manejo d valores NULL.


  • Si alguno de los valores de dato de una columna es NULL se ignora para el pròposito del càlculo del valor de funcón de una columna .

  • Si cada elemento de dato de la columna es NULL, entonces SUM Y AVG.

  • MIN() Y MAX devuelve un valor NULL; la funciòn COUNT() devulve el valor cero

  • Si hay un elemento de cda dato en la columna (columna vacìa) entonces la funciòn de la columna SUM()AVG(), MIN() Y MAX() devuelve el valor NULL; la función COUNT devuelve el valor cero.

  • COUNT(*)cuenta filas y no depende de la presencia o ausencia de los valores NULL. Si hay una fila devuelve un valor cero.

Los productos comerciales de SQL pueden producir resultados diferentes en le estándar si los valores de datos de una columna son NULL o cuando la funciòn de columna se aplica a una tabla vacìa, poreso antes de saber el compaortamiento del estàndar se deberia de specificar DBMS que se usa.

DISTINCT en la lista de selecciòn elimna filas duplicadas de resultados antes del pigmento de la funciòn de columnas. El estàndar SQL1 no permite expresiones solamente nombre simple de columna permite la clave DISTINCT las funciones de columna SUM() Y AVG() MIN Y MAX no porque no tienen pacto en sus resultados.

COUNT no requiere valores de columna de la clave COUNT (*) no puede especificar esta funciòn con valores de datos.

Las consultas de agrupaciòn concluye la clàusula GROUP BY que agrupa los datos de sus tablas fuente en una ùnica fila d resumen, por cada grupo de filas.Las columnas de agrupaciòn como dividen las filas en grupos. L a clàusula GROUP BY, dice que SQL, que divida los resultados dtallados en grupos y que aplique una funciòn de columna separadas por grupos produciendo un resultado por grupo. Las consultas de agrupaciòn siguen los pasos de las reglas de procesamiento añadiendo 3 pasos mas.


  • Si hay una clàusula GROUP BY organiza las filas restantes de la tabla productos en dos grupos, de forma que las filas de cada grupo tengan identicos valores en todas las columnas de agrupaciòn.

  • Si hay una clàusula HAVING aplica su condiciòn de bùsqueda a dada grupo de filas, conservado los grupos patra la condiciòn de bùsqueda es TRUE (y descartando aquellos para los que la condición es FALSE o NULL.
  • Para cada fila resultante (o grupo de filas), calcula el valor de cada elemento de la lista de selección para producir una única fila de resultados. Para una referencia a una columna simple, usa el valor de la columna en las filas en curso (o grupo de filas. Para una función de columnas, usa el grupo actual de filas como argumento, si se especifica GROUP BY; en caso contrario, usa el conjunto completo de resultados.

Para agrupación de múltiples columnas agrupan los resultados de la consulta en término de los contenidos de dos o más columnas proporcionando un nivel de agrupación de resultados de resumen y detallados de consulta. El estándar SQL añadio una cláusula COMPUTE para calcular los subtotales.

Las restricciones sobre los elementos aparecen en la lista de selección de una consulta de agrupación puede ser:

  • Una constante
  • Una función de columna, que prodece un único valor resumiendo las filas del grupo
  • Una columna de agrupación, que por su deficnición tiene el mismo valor en cada fila del grupo.
  • Una expresión que contenga combinaciones de lo anterior.

Las limitaciones de las consultas de agrupación es que SQL ignora la informacion de las claves primarias y externas al analizar las consultas de agrupación.

El estándar ANSI/ISO especifca que los valores NULL en una agrupación de columnas son diferentes en las cláusula WHERE y en la cláusula GROUP BY los valores NULL son iguales formando cada cláusula su grupo de valores NULL para tener un resultado debe construir una tabla de test de comprobación para saber el comportamiento de SGBD.

La cláusula HAVING especifica una condición de búsqueda para grupos, se puede usar para destacar y seleccionar los grupos de filas. Para resticciones sobre condiciones de búsqueda de grupos es excluir o incluir grupos de filas de resultados, aplicando la cláusula WHERE para filas individuales, HAVING para un grupo de filas, la clásula HAVING para valores NULL en condicones de búsqueda utlizan las mismos resultados que WHERE en la cual actua igual en los grupos de resultados de consultas. La cláula HAVING puede trabajar sin la cláusula GROUP BY considerando un resulatdo detallado de la consulta en un único grupo, la cual lo utiliza rara ala vez.


domingo, 2 de diciembre de 2007

Consultas Multitablas

Reunión de tablas es el proceso de la formación de pares de filas correponden al contenidode las columnas relacionadas

Reunión de dos tablas. Contiene datos de tablas originales

Equirreunión. Es la correpondencia exacta entre dos reuniones.

Las reuniones es un proceso de consulta multitabla que maneja SQL en la condición de búsqueda con la instrucción SELECT especificando el encaje la correspondencia de columnas.

La base de datos relacional almacena datos de las columnas de las relaciones entre tablas haciendo corresponder los contenidos de las columnas relacionadas incorporadas en la base de datos no tienen mecanismos para relación de filas, el único mecanismo es la relación de datos entre tablas .

Las consultas multitablas mas comúnes involucran dos tablas que una relación natural Padre/Hijo.

La relación Padre/Hijo en una consulta debe especificarse con una condición de búsqueda comparando la clave (es el hijo de la relación) y primaria(Padre) de la relación de base de datos de SQL.

La consulta multitabla especifica las columnas conicidentes de una condición de búsqueda que pueden combinarse con otras condiciones de búsqueda para limitar el contenido de los resultados .

Las reuniones multicolumnaque incluyen dos tablas son menos comunes que las reuniones de una única collumna incluyendo también claves externas en una consulta, no hay limite para el número de columnas incluida en la condición de encaje, pero las reuniones de las entidades representadas en las tablas de base de datos que se encuentra en una o sólo algunas columnas de las tablas.

SQL puede combinar datos de tres o más tablas usando técnicas básicas de las consultas de dos tablas .

La relación varios a varios y uno a varios es diferente de la relación creada las columnas coincidentes de la clave primaria y externa, la instrucción SELECT debe escribir la expresión correcta de la columna.

  • Las reuniones que encajan las claves primarias sonlas claves esternas siempre producen relaciones padre/hijo uno a varios.

  • Otras reuniones también pueden generar relaciones uno a varios si la columna coincide en al menos una de las tablas únicos en todas las filas de las tablas.
  • En general la reunión de las columnas coincidentes albitrarias generan relaciones varios a varios.

SQL permite reunir tablas en términos de otros operadores de comparación. La relación de igualdad no son comunes son útiles para la toma de decisiones y otras aplicaciones mas complejas en la base de datos.

En la siguiente sección se expresan algunas caracteristicas de las consultas multitabla del lenguaje SQL.

    • Los nombres calificados de las columnas se necesitan a veces en consultas multitabla para eliminar referencias ambiguas a columnas.

    • Las selecciones de todas las columnas (SELECT*) tienen un significado especial para las consultas multitablas.

    • Las autoreuniones se pueden usar para crear consultas que la relacione una tabla consigo misma.

    • Las alias de tablas se pueden usar en la cláusula FROM para simplificar los nombres calificados de columnas y permite referencias no ambiguas o columnas en las autocorrecciones.

El nombre calificado de columnas se puede usar en cualquier lugar de la instrucción SELECT que permite un nombre de columna, la tbla especificada en la columna calificada debe coincidir con algunas de las tablas especificadas en la lista FROM.

La desventaja es que el texto de la consulta sea mayor. SQL interactivo hace una consulta sin nombres calificados, y deja que SQL encuentre columnas ambiguas, si SQL informa de un error se edita la consulta para calificar las columnas ambiguas.

SELECT se puede usar para las colum,nas de la tabla nombrada en la cláusula FROM. SQL trata el asterisco(*) como una clase especial de nombre de columna comodín o un nombre de una tabla calificada.

Las consultas multitablas incluyen una relación de una tabla que tiene consigo misma, no permite duplicar contenido de las tablas, SQL solamente hace refencia de un nombre diferente denominado alias de tablas.En las consultas con autoreuniones son requeridas las aliasde tablas.

  • La cláusula FROM identifica todas las tablas que aportan datos a los resultados de la consultas . Cualquier columna referenciada en la instrucción SELECT puede venir de una de las tablas listadas en la consulta de la cláusula FORM.

  • La cláusula FROM especifica la etiqueta que se usa para identificar las tablas en las referencias calificada a columnas dentro de la instruccion SELECT. Si se especificaen las alias de la tabla, se convierte en una etiqueta de la tabla, en caso contrario el nombre de la tabla, tal como aparece en la clausula FROM es el que se convierte en una etiqueta. El requisito para las etiquetas de las tablas es que sean distintas entre si.SQL permite que la clave AS aparezca entre el nombre de la tabla y su alias.

El lenguaje SQL noimpone un número de tablas reunidas en consulta, algunos productos de SQL, si limitan el número de tablas. Las aplicaciones de procesamiento interactivo de transacciones (OLTP,ONLINE TRANSATION PROCESSING) es común que contenga solo una o dos tablas. El usuario introduce uno o dos tablas y necesita una respuesta de la bse de datos en segundo o dos para tener una buena toma de decisiones en las aplicaciones de los resultados de la´consulta que se lleva mas tiempo requiere de minutos o incluso hasta de horas debido a las complejas relaciones de la base de datos.

La estructura de un join es saber determinar el uso de la instrución SELECT saber que es una reunión que deberia usarse en la reunion de varias tablas, las condiciones de búsqueda, los resultados producidos y conocer la teoria de la base de datos realcionales sobre las reuniones.

La multiplicación de las tablas es el producto de dos tablas es otra tabla que consiste en todos los posibles pares de filas de dos tablas. Se podria decir que las filas eliminadas son precisamente las que cumplen con la condición de las columnas coincidentes en la reunión, el producto es parte de la definición formal del procesamiento de SQL de una consulta multitabla

Reglas para el procesamiento consultas multitablas,

  • Si la instrucción es una UNION de instrucciones SELECT aplica los pasos 2 al 5 a cada una de las instrucciones para generar sus resultados individuales.

  • Si se especifica SELECT DISTINCT, elimina todas las filas duplicadas del resultado que se hubiera producido.

  • Si la instrucción es una UNION de instrucciones SELECT, mezcla los resultados de la instrucciones individuales en una única tabla de resultados. Eliminando las filas duplicadas a menos que se especifique UNION ALL.

  • Si hay una cláusula ORDEN BY, ordena los resultados como se especifique

Esto es lo que produciria una consulta multitabla de resulatdos.

La reunión externa (outer join ) denominada a veces reunion interna, es una parte bien asimilada y útil del modelo de datos relacional, y expresión a cierto tipo de consulta se implemento en muchos productos de SQL de marcas diferentes de IBM com Microsoft, Sybase, Oracle e Informix.

Procedimiento para la construcción de la reunion externa:

  • Empezar con la reunion interna de las dos tablas usando las columnas coincidentes de la forma usual.

  • Para cada fila de la primera tabla que no coincida con ninguna de la segunda. anñadir una fila alos resultados los valores de las columnas de la primera tabla y asumir un valor NULL para todas las columnas de la segunda tabla.

  • Para cada fila de la segunda tabla que no coincide con ninguna de la fila de la primera tabla, añadir una fila de resultado usando los valores de las columnas de la segunda tabla y asumiendo un valor NULL para todas las columnas de la primera tabla.

  • La tabla resultante es la union externa de dos tablas.

La unión externa por la izquierda de dos tablas se puden producir los siguientes pasos 1 y 2 de la lista enumerada anterior. pero omitiendo el paso 3., incluyendo copias rellenas con valores NULL de las filas que no encajan en la primera tabla (izquierda), pero incluyendo las filas que no encajen de la segunda (derecha).


La unión externa de la derecha de las dos tablas se produce siguiendo los pasos, y omitiendo los pasos 2, incluyendo copias con los valores NULL de las filas que no encajan de la segunda tabla (derecha) , pero no incluyen las filas que no encajan de la primera tabla (izquierda). L a notación de la unión externa (outer join) indica una condición de reunión con un test de comparación añadiendo un asterisco "*=*" en la cláusula WHERE usando reuniones externas de las tablas.También Oracle tiene una notación pero diferente en la reunión externa inicia con la cláusula WHERE incluyendo entre paréntesis un signo (+) las reuniones externas para la izquierda y derecha usadas también en Oracle.