SlideShare une entreprise Scribd logo
1  sur  16
Télécharger pour lire hors ligne
Trabajo con Subconsultas




Contenido

Contenido

Introducción                      1
Introducción a las subconsultas    2
Uso de una subconsulta como una
tabla derivada                     4
Uso de una subconsulta como una
expresión                          5
Uso de una subconsulta para
correlacionar datos                6
Uso de las cláusulas EXISTS
y NOT EXISTS                      13
Trabajo con Subconsultas                                                                                     i



Notas para el instructor
                           Este módulo presenta técnicas avanzadas de consulta, que incluyen
                           subconsultas anidadas y correlacionadas. En él se describe cuándo y cómo
                           utilizar una subconsulta y el modo de usar subconsultas para dividir y realizar
                           consultas complejas.
                           Al terminar este módulo, los alumnos serán capaces de:
                              Describir cuándo y cómo utilizar subconsultas.
                              Utilizar subconsultas para dividir y realizar consultas complejas.
Trabajo con Subconsultas                                                                             1



Introducción
 Objetivos de la
 diapositiva
 Exponer un breve resumen
 de los temas tratados en              Introducción a las subconsultas
 este módulo.
                                       Uso de una subconsulta como una tabla derivada
 Explicación previa
 En este módulo aprenderá              Uso de una subconsulta como una expresión
 acerca de las técnicas
 avanzadas de consulta.                Uso de una subconsulta para correlacionar datos
                                       Uso de las cláusulas EXISTS y NOT EXISTS




                            Este módulo presenta técnicas avanzadas de consulta, lo que incluye las
                            subconsultas anidadas y correlacionadas, y cómo se pueden utilizar para
                            modificar datos. En él se describe cuándo y cómo utilizar una subconsulta y el
                            modo de usar subconsultas para dividir y realizar consultas complejas.
                            Al terminar este módulo, el alumno será capaz de:
                               Describir cuándo y cómo utilizar subconsultas.
                               Utilizar subconsultas para dividir y realizar consultas complejas.
Trabajo con Subconsultas                                                                                  2


Introducción a las subconsultas
 Objetivos de la
 diapositiva
 Comentar si se deben
 utilizar subconsultas.                 Por qué utilizar subconsultas
 Explicación previa                         Para dividir una consulta compleja en varios pasos
 Las subconsultas son un                    lógicos
 conjunto de instrucciones
 SELECT. A menudo, las                      Para responder una consulta que depende de los
 subconsultas se pueden                     resultados de otra consulta
 escribir como                          Por qué utilizar combinaciones en lugar de
 combinaciones.                         subconsultas
                                            SQL Server ejecuta combinaciones más rápidas que la
                                            subconsultas
                                        Cómo utilizar subconsultas




                             Una subconsulta es una instrucción SELECT anidada en una instrucción
                             SELECT, INSERT, UPDATE o DELETE, o en otra subconsulta. A menudo
                             puede escribir las subconsultas como combinaciones y utilizarlas en lugar de
                             una expresión.
                             Una expresión es una combinación de identificadores, valores y operadores que
                             evalúa SQL Server para obtener un resultado.

                             Por qué utilizar subconsultas
                             Las subconsultas se utilizan para dividir una consulta compleja en varios pasos
                             lógicos y, como resultado, resolver un problema con una única instrucción. Las
                             subconsultas son útiles cuando la consulta depende de los resultados de otra
                             consulta.

                             Por qué utilizar combinaciones en lugar de subconsultas
                             A menudo, una consulta que contiene subconsultas se puede escribir como una
                             combinación. En general, el rendimiento de una consulta puede ser similar con
                             una combinación y con una subconsulta. El optimizador de consultas optimiza
                             habitualmente subconsultas mediante el uso del plan de ejecución de ejemplo
                             que utilizaría una combinación semánticamente equivalente. La diferencia
                             consiste en que la subconsulta puede requerir que el optimizador de consultas
                             realice pasos adicionales, como ordenar, lo que puede influir en la estrategia del
                             proceso.
                             Normalmente, utilizar combinaciones permite al optimizador de consultas
                             recuperar datos de forma más eficiente. Si una consulta no requiere varios
                             pasos, puede que no sea necesario utilizar una subconsulta.
Trabajo con Subconsultas                                                                                3


 Sugerencia                    Cómo utilizar subconsultas
 Revise cada hecho e           Cuando decida utilizar subconsultas, tenga en cuenta los siguientes hechos e
 instrucción para determinar   instrucciones:
 cuándo usar subconsultas.
                                  Las subconsultas se deben incluir entre paréntesis.
                                  Se pueden utilizar subconsultas en lugar de una expresión siempre y cuando
                                  se devuelva un solo valor o una lista de valores. Se pueden utilizar
                                  subconsultas que devuelvan un conjunto de registros de varias columnas en
                                  lugar de una tabla o para realizar la misma función que una combinación.
                                  No se pueden utilizar subconsultas que recuperen columnas con tipos de
                                  datos text e image.
                                  Puede tener subconsultas dentro de subconsultas, con una anidación de hasta
                                  32 niveles. El límite varía según la cantidad de memoria disponible y la
                                  complejidad de las otras expresiones de la consulta. Las consultas
                                  individuales pueden no admitir una anidación de hasta 32 niveles.
Trabajo con Subconsultas                                                                                 4


Uso de una subconsulta como una tabla derivada
 Objetivos de la
 diapositiva
 Describir cómo utilizar una
 subconsulta como una tabla
 derivada.
                                          Es un conjunto de registros dentro de una consulta que
                                          funciona como una tabla
 Explicación previa
 Una tabla derivada se crea               Ocupa el lugar de la tabla en la cláusula FROM
 al utilizar una subconsulta
 en lugar de una tabla en                 Se optimiza con el resto de la consulta
 una cláusula FROM:
                                     USE northwind
                                     USE northwind
                                     SELECT T.orderid, T.customerid
                                     SELECT T.orderid, T.customerid
                                      FROM ( SELECT orderid, customerid
                                      FROM ( SELECT orderid, customerid
                                              FROM orders ) AS T
                                              FROM orders ) AS T
                                     GO
                                     GO




                               Una tabla derivada se crea al utilizar una subconsulta en lugar de una tabla en
                               una cláusula FROM. Una tabla derivada es un uso especial de una subconsulta
                               en una cláusula FROM a la que hace referencia un alias o nombre especificado
                               por el usuario. El conjunto de resultados de la subconsulta en la cláusula FROM
                               crea una tabla que utiliza la instrucción SELECT externa.
Ejemplo                        En este ejemplo se utiliza una subconsulta para crear una tabla derivada en la
                               parte interna de la consulta que consulta la parte externa. La tabla derivada
                               propiamente dicha es funcionalmente equivalente a la consulta entera, pero
                               aparece separada con propósitos ilustrativos.
                               USE northwind
                               SELECT T.orderid, T.customerid
                                FROM ( SELECT orderid, customerid
                                        FROM orders ) AS T
                               GO

                               Cuando se utilice como tabla derivada, tenga en cuenta que una subconsulta:
                                  Es un conjunto de registros dentro de una consulta que funciona como una
                                  tabla.
                                  Ocupa el lugar de la tabla en la cláusula FROM.
                                  Se optimiza con el resto de la consulta.
Trabajo con Subconsultas                                                                                  5


Uso de una subconsulta como una expresión
 Objetivos de la
 diapositiva
 Describir cómo usar
 una subconsulta como                    Se evalúa y trata como una expresión
 una expresión.
 Explicación previa
                                         Se ejecuta una vez para la instrucción entera
 Puede sustituir una
 subconsulta donde utilice
 una expresión en las             USE pubs
                                  USE pubs
 instrucciones SELECT,            SELECT title, price
                                  SELECT title, price
 UPDATE, INSERT y                      ,( SELECT AVG(price) FROM titles) AS average
                                       ,( SELECT AVG(price) FROM titles) AS average
 DELETE.                               ,price-(SELECT AVG(price) FROM titles) AS difference
                                       ,price-(SELECT AVG(price) FROM titles) AS difference
                                   FROM titles
                                   FROM titles
                                   WHERE type='popular_comp'
                                   WHERE type='popular_comp'
                                  GO
                                  GO




                              En Transact-SQL, puede sustituir una subconsulta donde utilice una expresión.
 Sugerencia                   La subconsulta debe producir un valor escalar o una lista de valores de una sola
 Señale que las
 subconsultas que devuelven
                              columna. Las subconsultas que devuelven una lista de valores sustituyen a una
 una lista de valores         expresión en una cláusula WHERE que contiene la palabra clave IN.
 sustituyen a una expresión
                              Si se utiliza como expresión, tenga en cuenta que una subconsulta:
 en una cláusula WHERE
 que contiene la palabra         Se evalúa y trata como una expresión. Con frecuencia, el optimizador de
 clave IN.                       consultas evalúa una expresión como equivalente a una combinación que
                                 conecta con una tabla que tiene una fila.
                                 Se ejecuta una vez para la instrucción entera.

Ejemplo                       En este ejemplo se devuelve el precio de un popular libro de informática, el
                              promedio del precio de todos los libros y la diferencia entre el precio del libro y
                              el promedio del precio de todos los libros.
                              USE pubs
                              SELECT title, price
                                    ,(SELECT AVG(price) FROM titles) AS average
                                    ,price-(SELECT AVG(price) FROM titles) AS difference
                               FROM titles
                               WHERE type='popular_comp'
                              GO
Trabajo con Subconsultas                                                                                 6


      Uso de una subconsulta para correlacionar datos
 Objetivos de la
 diapositiva
 Describir cómo usar una
 subconsulta para                        Evaluación de una subconsulta correlacionada
 correlacionar datos.
                                         Simulación de una cláusula JOIN
 Explicación previa
 Es posible utilizar una                 Simulación de una cláusula HAVING
 subconsulta correlacionada
 como una expresión
 dinámica que cambia en
 cada fila de una consulta
 externa.




                              Puede utilizar una subconsulta correlacionada como una expresión dinámica
                              que cambia en cada fila de una consulta externa.
                              El procesador de consultas realiza la subconsulta para cada fila de la consulta
                              externa, una fila a la vez, que a su vez se evalúa como una expresión para esa
                              fila y se pasa a la consulta externa. La subconsulta correlacionada es, de hecho,
                              una COMBINACIÓN entre la subconsulta ejecutada dinámicamente y la fila de
                              la consulta externa.
                              Normalmente, puede escribir una consulta de varias maneras y aun así obtener
                              los mismos resultados. Las subconsultas correlacionadas dividen consultas
                              complejas en dos o más consultas simples relacionadas.

                              Sugerencia Las subconsultas correlacionadas se pueden reconocer fácilmente.
                              La columna de una tabla dentro de la subconsulta se compara con la columna de
                              una tabla externa a la subconsulta.
Trabajo con Subconsultas                                                                                     7


Evaluación de una subconsulta correlacionada
 Objetivos de la                      La consulta externa pasa un
                                       La consulta externa pasa un
 diapositiva                          valor de columna a la
                                       valor de columna a la
 Describir cómo se procesan           consulta interna
                                       consulta interna                     La consulta interna utiliza los
 las subconsultas correlacio-                                                La consulta interna utiliza los
                                    USE northwind
                                    USE northwind                      valores que pasa la consulta
                                                                        valores que pasa la consulta
 nadas.                             SELECT orderid, customerid         externa
                                    SELECT orderid, customerid          externa
 Explicación previa                  FROM orders AS or1
                                     FROM orders AS or1
                                     WHERE 20 < (SELECT quantity
                                     WHERE 20 < (SELECT quantity
 Cuando crea una
                                                 FROM [order details] AS od
                                                  FROM [order details] AS od
 subconsulta correlacionada,                     WHERE or1.orderid = od.orderid
                                                                                         Ejemplo 1
                                                                                          Ejemplo 1
                                                  WHERE or1.orderid = od.orderid
 las subconsultas internas                         AND od.productid = 23)
                                                   AND od.productid = 23)
 se evalúan repetidamente,          GO
                                    GO
 una vez por cada fila de
 la consulta externa.                La consulta interna devuelve
                                      La consulta interna devuelve         Este proceso se repite para la
                                                                            Este proceso se repite para la
                                     un valor a la consulta externa
                                      un valor a la consulta externa       fila siguiente de la consulta
                                                                            fila siguiente de la consulta
                                                                           externa
                                                                            externa


                                                                                  Volver al paso 1
                                                                                  Volver al paso 1



                                Cuando crea una subconsulta correlacionada, las subconsultas internas se
 Sugerencia                     evalúan repetidamente, una vez por cada fila de la consulta externa:
 Compare las subconsultas
 correlacionadas con las           SQL Server ejecuta la consulta interna por cada fila que selecciona la
 subconsultas anidadas.            consulta externa.
                                   SQL Server compara los resultados de la subconsulta con los resultados
                                   externos a ella.

Ejemplo 1                       En este ejemplo se devuelve una lista de clientes que han pedido más de 20
                                unidades del producto número 23.
                                USE northwind
                                SELECT orderid, customerid
                                 FROM orders AS or1
                                 WHERE 20 < (SELECT quantity
                                             FROM [order details] AS od
                                             WHERE or1.orderid = od.orderid
                                              AND od.productid = 23)
                                GO

Resultado                       Orderid                                  customerid
                                10337                                    FRANK
                                10348                                    WANDK
                                10396                                    FRANK
                                10402                                    ERNSH
                                10462                                    CONSH
                                .
                                .
                                .
                                (11 filas afectadas)
Trabajo con Subconsultas                                                                              8


                           Las subconsultas correlacionadas devuelven un único valor o una lista de
                           valores por cada fila especificada en la cláusula FROM de la consulta externa.
                           Los pasos siguientes describen cómo se evalúa la subconsulta correlacionada
                           del ejemplo 1:
                           1. La consulta externa pasa un valor de columna a la consulta interna.
                              El valor de columna que la consulta externa pasa a la consulta interna es
                              orderid. La consulta externa pasa el primer orderid de la tabla orders a la
                              consulta interna.
                           2. La consulta interna utiliza los valores que pasa la consulta externa.
                              Cada orderid de la tabla orders se evalúa para determinar si existe un
                              orderid idéntico en la tabla order details. Si el primer orderid coincide
                              con un orderid de la tabla order details y ese orderid ha adquirido el
                              producto número 23, la consulta interna devuelve ese orderid a la consulta
                              externa.
                           3. La consulta interna devuelve un valor a la consulta externa.
                              La cláusula WHERE de la consulta externa evalúa posteriormente el
                              orderid que adquirió el producto número 23 para determinar si la cantidad
                              pedida es mayor de 20.
                           4. Este proceso se repite para la fila siguiente de la consulta externa.
                              La consulta externa pasa el segundo orderid de la tabla orders a la consulta
                              interna y SQL Server repite el proceso de evaluación para esa fila.

Ejemplo 2                  En este ejemplo se devuelve una lista de productos y el pedido mayor realizado
                           hasta la fecha de cada producto de la tabla order details. Observe que esta
                           subconsulta correlacionada hace referencia a la misma tabla que la consulta
                           externa; generalmente, el optimizador tratará esto como una autocombinación.
                           USE northwind
                           SELECT DISTINCT productid, quantity
                            FROM [order details] AS ord1
                            WHERE quantity = ( SELECT MAX(quantity)
                                                FROM [order details] AS ord2
                                                WHERE ord1.productid = ord2.productid)
                           GO

Resultado                  productid                                  quantity
                           50                                         40
                           67                                         40
                           4                                          50
                           9                                          50
                           11                                         50
                           .
                           .
                           .
                           (77 filas afectadas)
Trabajo con Subconsultas                                                                                     9


Simulación de una cláusula JOIN
 Objetivos de la
 diapositiva
 Describir cómo usar una                    Las subconsultas correlacionadas pueden producir el
 subconsulta correlacio-                    mismo resultado que una cláusula JOIN
 nada para simular una
 combinación.                               Las combinaciones permiten al optimizador de
 Explicación previa                         consultas determinar la manera de correlacionar los
 Puede utilizar una sub-                    datos de la forma más eficiente
 consulta correlacionada
 para producir los mismos                                                                       Ejemplo 1
                                                                                                Ejemplo 1
                                        USE pubs
                                        USE pubs
 resultados que una
                                        SELECT DISTINCT t1.type
                                        SELECT DISTINCT t1.type
 combinación.
                                         FROM titles AS t1
                                         FROM titles AS t1
                                         WHERE t1.type IN
                                         WHERE t1.type IN
                                           (SELECT t2.type
                                           (SELECT t2.type
                                             FROM titles AS t2
                                             FROM titles AS t2
                                             WHERE t1.pub_id <> t2.pub_id)
                                             WHERE t1.pub_id <> t2.pub_id)
                                        GO
                                        GO



                                 Puede utilizar una subconsulta correlacionada para producir los mismos
 Sugerencia                      resultados que una combinación, por ejemplo, seleccionar datos de una
 La clave para comprender la
 sintaxis de las subconsultas
                                 tabla a la que se hizo referencia en la consulta externa.
 correlacionadas es entender
 el uso de los alias de tabla.   Nota Normalmente, las subconsultas correlacionadas se pueden escribir
 Los alias de tabla muestran     como combinaciones. El uso de combinaciones en lugar de subconsultas
 las tablas que están            correlacionadas permite al optimizador de consultas determinar la manera
 correlacionadas.                de correlacionar los datos de la forma más eficiente.

Ejemplo 1                        En este ejemplo se utiliza una subconsulta correlacionada para buscar los
                                 tipos de libros publicados por más de un editor. Para evitar ambigüedades, se
                                 necesitan alias para distinguir las dos funciones diferentes en las que aparece la
                                 tabla titles.
                                 USE pubs
                                 SELECT DISTINCT t1.type
                                  FROM titles AS t1
                                  WHERE t1.type IN
                                    (SELECT t2.type
                                      FROM titles AS t2
                                      WHERE t1.pub_id <> t2.pub_id)
                                 GO

Resultado                        Type
                                 business
                                 psychology

                                 (2 filas afectadas)
Trabajo con Subconsultas                                                                                 10


Ejemplo 2                       En este ejemplo se devuelven los mismos resultados que en el ejemplo 1
                                mediante el uso de una autocombinación en lugar de una subconsulta
                                correlacionada.
                                USE pubs
                                SELECT DISTINCT t1.type
                                 FROM titles AS t1
                                 INNER JOIN titles AS t2
                                  ON t1.type = t2.type
                                 WHERE t1.pub_id <> t2.pub_id
                                GO


 Sugerencia
 Utilice el Analizador de
 consultas SQL para ejecutar
 ambos ejemplos de combi-
 nación y mostrar los distin-
 tos planes de ejecución.
Trabajo con Subconsultas                                                                                    11


Simulación de una cláusula HAVING
 Objetivos de la
 diapositiva                               Subconsulta con el mismo resultado que una cláusula
 Describir cómo simular una
 cláusula HAVING.                          HAVING
 Explicación previa                   USE pubs
                                      USE pubs                                                  Ejemplo 1
                                                                                                Ejemplo 1
 Puede utilizar una sub-              SELECT t1.type,
                                      SELECT t1.type,   t1.title, t1.price
                                                        t1.title, t1.price
                                       FROM titles AS
                                       FROM titles AS   t1
                                                        t1
 consulta correlacionada               WHERE t1.price   > ( SELECT AVG(t2.price) FROM titles AS t2
                                       WHERE t1.price   > ( SELECT AVG(t2.price) FROM titles AS t2
 para producir los mismos                                    WHERE t1.type = t2.type )
                                                             WHERE t1.type = t2.type )
 resultados que una consulta          GO
                                      GO
 que utiliza la cláusula
 HAVING.                                   Uso de una cláusula HAVING sin una subconsulta
                                      USE pubs
                                      USE pubs                                                  Ejemplo 2
                                                                                                Ejemplo 2
                                      SELECT t1.type, t1.title, t1.price
                                      SELECT t1.type, t1.title, t1.price
                                       FROM titles AS t1
                                       FROM titles AS t1
                                       INNER JOIN titles AS t2 ON t1.type = t2.type
                                       INNER JOIN titles AS t2 ON t1.type = t2.type
                                       GROUP BY t1.type, t1.title, t1.price
                                       GROUP BY t1.type, t1.title, t1.price
                                        HAVING t1.price > AVG(t2.price)
                                         HAVING t1.price > AVG(t2.price)
                                      GO
                                      GO




                               Puede utilizar una subconsulta correlacionada para producir los mismos
                               resultados que una consulta que utiliza la cláusula HAVING.
Ejemplo 1                      En este ejemplo se buscan todos los títulos con un precio mayor que el precio
                               promedio para libros del mismo tipo. Por cada valor posible de t1, SQL Server
                               evalúa la subconsulta e incluye la fila en los resultados si el precio de dicha fila
                               es mayor que el promedio calculado. No es necesario agrupar explícitamente
                               por tipo, puesto que las filas cuyo precio promedio se calcula están restringidas
                               por la cláusula WHERE de la subconsulta.
                               USE pubs
 Sugerencia                    SELECT t1.type, t1.title, t1.price
 Utilice el Analizador de
                                FROM titles AS t1
 consultas SQL para ejecutar
 ambos ejemplos y               WHERE t1.price > ( SELECT AVG(t2.price)
 comprobar que producen                             FROM titles AS t2
 los mismos resultados.                             WHERE t1.type = t2.type )
                               GO

                               Resulttype                        title
                               Business                          The Busy Executive’s Database Guide
                               Business                          Straight Talk About Computers
                               mod_cook                          Silicon Valley Gastronomic Treats
                               popular_comp                      But Is It User Friendly?
                               Psychology                        Computer Phobic AND Non-Phobic
                                                                 Individuals: Behavior Variations
                               Psychology                        Prolonged Data Deprivation: Four Case
                                                                 Studies
                               trad_cook                         Onions, Leeks, and Garlic: Cooking
                                                                 Secrets of the Mediterranean

                               (7 filas afectadas)
Trabajo con Subconsultas                                                                         12


Ejemplo 2                  Este ejemplo produce el mismo conjunto de resultados que el ejemplo 1, pero
                           utiliza una autocombinación con las cláusulas GROUP BY y HAVING.
                           USE pubs
                           SELECT t1.type, t1.title, t1.price
                            FROM titles AS t1
                            INNER JOIN titles AS t2
                             ON t1.type = t2.type
                            GROUP BY t1.type, t1.title, t1.price
                             HAVING t1.price > AVG(t2.price)
                           GO


                           Nota Puede escribir subconsultas correlacionadas que produzcan los mismos
                           resultados que una cláusula JOIN o HAVING, pero es posible que el
                           procesador de consultas no las implemente de la misma manera.
Trabajo con Subconsultas                                                                               13


Uso de las cláusulas EXISTS y NOT EXISTS
 Objetivos de la
 diapositiva
 Describir cómo se utilizan
 los operadores EXISTS                   Uso con subconsultas correlacionadas
 y NOT EXISTS con las                    Determinar si hay datos en una lista de valores
 subconsultas
 correlacionadas.                        Proceso de SQL Server
 Explicación previa                          La consulta externa prueba la existencia de las filas
 Los operadores EXISTS y
 NOT EXISTS se pueden                        La consulta interna devuelve TRUE o FALSE
 utilizar para determinar si                 No se produce ningún dato
 hay datos en una lista de                                                             Ejemplo 1
                                     USE northwind                                     Ejemplo 1
 valores.                            USE northwind
                                     SELECT lastname, employeeid
                                     SELECT lastname, employeeid
                                      FROM employees AS e
                                      FROM employees AS e
                                      WHERE EXISTS (SELECT * FROM orders AS o
                                      WHERE EXISTS (SELECT * FROM orders AS o
                                                     WHERE e.employeeid = o.employeeid
                                                     WHERE e.employeeid = o.employeeid
                                                      AND o.orderdate = ‘5/9/1997')
                                                      AND o.orderdate = ‘5/9/1997')
                                     GO
                                     GO




                               Los operadores EXISTS y NOT EXISTS se pueden utilizar para determinar si
                               hay datos en una lista de valores.

                               Uso con subconsultas correlacionadas
                               Puede utilizar los operadores EXISTS y NOT EXISTS con subconsultas
                               correlacionadas para restringir el conjunto de resultados de una consulta
                               externa a las filas que cumplen la subconsulta. Los operadores EXISTS y
                               NOT EXISTS devuelven TRUE o FALSE, en función de si las subconsultas
                               devuelven filas o no.

                               Determinar si hay datos en una lista de valores
                               Cuando se introduce una subconsulta con el operador EXISTS, SQL Server
                               comprueba si hay datos que coincidan con la subconsulta. No se recupera
                               realmente ninguna fila. SQL Server termina la recuperación de filas cuando
                               ha comprobado que al menos una fila cumple la condición WHERE en la
                               subconsulta.

                               Proceso de SQL Server
                               Cuando SQL Server procesa subconsultas que utilizan el operador EXISTS o
                               NOT EXISTS:
                                  La consulta externa prueba que existen las filas que devuelve la subconsulta.
                                  La subconsulta devuelve un valor TRUE o FALSE en función de la
                                  condición dada en la consulta.
                                  La subconsulta no produce ningún dato.
Trabajo con Subconsultas                                                                             14


Sintaxis parcial              WHERE [NOT] EXISTS (subconsulta)
Ejemplo 1                     En este ejemplo se utiliza una subconsulta correlacionada con un operador
                              EXISTS en la cláusula WHERE para devolver una lista de empleados que
                              anotaron pedidos el día 5/9/1997.
                              USE northwind
 Sugerencia                   SELECT lastname, employeeid
 Ejecute estos dos ejemplos
                               FROM employees AS e
 con STATISTICS TIME
 establecido en ON para        WHERE EXISTS ( SELECT * FROM orders AS o
 comparar el tiempo de                         WHERE e.employeeid = o.employeeid
 proceso.                                       AND o.orderdate = '5/9/1997' )
                              GO

Resultado                     lastname                                 employeeid
                              Peacock                                  4
                              King                                     7

                              (2 filas afectadas)

Ejemplo 2                     Este ejemplo devuelve el mismo conjunto de resultados del ejemplo 1 e ilustra
                              que podría utilizar una operación de combinación en lugar de una subconsulta
                              correlacionada. Observe que la consulta necesita la palabra clave DISTINCT
                              para devolver únicamente una sola fila por cada empleado.
                              USE northwind
                              SELECT DISTINCT lastname, e.employeeid
                               FROM orders AS o
                               INNER JOIN employees AS e
                                ON o.employeeid = e.employeeid
                               WHERE o.orderdate = '5/9/1997'
                              GO

Resultado                     lastname                                 employeeid
                              Peacock                                  4
                              King                                     7

                              (2 filas afectadas)

Contenu connexe

Tendances

INDICES EN SQL SERVER
INDICES EN SQL SERVERINDICES EN SQL SERVER
INDICES EN SQL SERVER
Darwin Durand
 
Diagramas de estados
Diagramas de estadosDiagramas de estados
Diagramas de estados
still01
 
Una base de datos relacional
Una base de datos relacionalUna base de datos relacional
Una base de datos relacional
Alex Javier
 
63997661 tecnologia-cliente-servidor-con-java
63997661 tecnologia-cliente-servidor-con-java63997661 tecnologia-cliente-servidor-con-java
63997661 tecnologia-cliente-servidor-con-java
Gilberto Garcia Zavaleta
 

Tendances (20)

Vistas
VistasVistas
Vistas
 
INDICES EN SQL SERVER
INDICES EN SQL SERVERINDICES EN SQL SERVER
INDICES EN SQL SERVER
 
Crear base de datos mysql command
Crear base de datos mysql commandCrear base de datos mysql command
Crear base de datos mysql command
 
Diagrama de Flujo de Datos (DFD)
Diagrama de Flujo de Datos (DFD)Diagrama de Flujo de Datos (DFD)
Diagrama de Flujo de Datos (DFD)
 
CONCEPTOS BÁSICOS DE BASE DE DATOS
CONCEPTOS BÁSICOS DE BASE DE DATOSCONCEPTOS BÁSICOS DE BASE DE DATOS
CONCEPTOS BÁSICOS DE BASE DE DATOS
 
Funciones en SQL SERVER
Funciones en SQL SERVERFunciones en SQL SERVER
Funciones en SQL SERVER
 
VISTAS
VISTASVISTAS
VISTAS
 
Diagramas de estados
Diagramas de estadosDiagramas de estados
Diagramas de estados
 
Analisis critico sobre las ventajas competitivas que se obtienen al implement...
Analisis critico sobre las ventajas competitivas que se obtienen al implement...Analisis critico sobre las ventajas competitivas que se obtienen al implement...
Analisis critico sobre las ventajas competitivas que se obtienen al implement...
 
Diagrama de Componentes
Diagrama de ComponentesDiagrama de Componentes
Diagrama de Componentes
 
Subconsultas sql
Subconsultas sqlSubconsultas sql
Subconsultas sql
 
Trabajo 2 transacciones en base de datos
Trabajo 2   transacciones en base de datosTrabajo 2   transacciones en base de datos
Trabajo 2 transacciones en base de datos
 
Sockets y canales
Sockets y canalesSockets y canales
Sockets y canales
 
Una base de datos relacional
Una base de datos relacionalUna base de datos relacional
Una base de datos relacional
 
Fundamentos de BD - Unidad 6 lenguaje sql
Fundamentos de BD - Unidad 6 lenguaje sqlFundamentos de BD - Unidad 6 lenguaje sql
Fundamentos de BD - Unidad 6 lenguaje sql
 
Modelo jerarquico
Modelo jerarquicoModelo jerarquico
Modelo jerarquico
 
63997661 tecnologia-cliente-servidor-con-java
63997661 tecnologia-cliente-servidor-con-java63997661 tecnologia-cliente-servidor-con-java
63997661 tecnologia-cliente-servidor-con-java
 
Bases de datos relacionales
Bases de datos relacionalesBases de datos relacionales
Bases de datos relacionales
 
control de concurrencia
control de concurrenciacontrol de concurrencia
control de concurrencia
 
Uml diagramas-caso-de-uso
Uml diagramas-caso-de-usoUml diagramas-caso-de-uso
Uml diagramas-caso-de-uso
 

Similaire à Subconsultas

Presentación
PresentaciónPresentación
Presentación
yehisita
 
Patrones de diseño - Henry Vallejo
Patrones de diseño - Henry VallejoPatrones de diseño - Henry Vallejo
Patrones de diseño - Henry Vallejo
2008PA2Info3
 
Vistas en mysql
Vistas en mysql Vistas en mysql
Vistas en mysql
Eduardo Ed
 
Vistas en my sql
Vistas en my sqlVistas en my sql
Vistas en my sql
Eduardo Ed
 

Similaire à Subconsultas (20)

Sugerencias para consultas sql
Sugerencias para consultas  sqlSugerencias para consultas  sql
Sugerencias para consultas sql
 
Subconsultas
SubconsultasSubconsultas
Subconsultas
 
Eeeeeeeeeeeeeeeeeeeeeeeeeeeeee
EeeeeeeeeeeeeeeeeeeeeeeeeeeeeeEeeeeeeeeeeeeeeeeeeeeeeeeeeeee
Eeeeeeeeeeeeeeeeeeeeeeeeeeeeee
 
Curso SQL - Leccion 8
Curso SQL - Leccion 8Curso SQL - Leccion 8
Curso SQL - Leccion 8
 
Subconsultasssssssssssss
SubconsultasssssssssssssSubconsultasssssssssssss
Subconsultasssssssssssss
 
Presentación
PresentaciónPresentación
Presentación
 
Patrones de diseño - Henry Vallejo
Patrones de diseño - Henry VallejoPatrones de diseño - Henry Vallejo
Patrones de diseño - Henry Vallejo
 
Vistas en mysql
Vistas en mysql Vistas en mysql
Vistas en mysql
 
Vistas en my sql
Vistas en my sqlVistas en my sql
Vistas en my sql
 
Vistas en mySql
Vistas en mySqlVistas en mySql
Vistas en mySql
 
Vistas
VistasVistas
Vistas
 
Diapositivas de vistas
Diapositivas de vistasDiapositivas de vistas
Diapositivas de vistas
 
Los algoritmos
Los algoritmosLos algoritmos
Los algoritmos
 
Sql subconsultas
Sql subconsultasSql subconsultas
Sql subconsultas
 
Sql subconsultas
Sql subconsultasSql subconsultas
Sql subconsultas
 
Patrones De DiseñO
Patrones De DiseñOPatrones De DiseñO
Patrones De DiseñO
 
Patrones de diseño
Patrones de diseñoPatrones de diseño
Patrones de diseño
 
Evelinmoreno consultas-acces
Evelinmoreno consultas-accesEvelinmoreno consultas-acces
Evelinmoreno consultas-acces
 
Carlos dominguez
Carlos dominguezCarlos dominguez
Carlos dominguez
 
POO
POOPOO
POO
 

Dernier

FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
El Fortí
 
RESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptx
RESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptxRESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptx
RESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptx
pvtablets2023
 
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docxTALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
NadiaMartnez11
 
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
EliaHernndez7
 
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdfNUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
UPTAIDELTACHIRA
 

Dernier (20)

Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024
 
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
 
Supuestos_prácticos_funciones.docx
Supuestos_prácticos_funciones.docxSupuestos_prácticos_funciones.docx
Supuestos_prácticos_funciones.docx
 
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESOPrueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESO
 
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
 
Feliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdfFeliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdf
 
Análisis de los Factores Externos de la Organización.
Análisis de los Factores Externos de la Organización.Análisis de los Factores Externos de la Organización.
Análisis de los Factores Externos de la Organización.
 
SESION DE PERSONAL SOCIAL. La convivencia en familia 22-04-24 -.doc
SESION DE PERSONAL SOCIAL.  La convivencia en familia 22-04-24  -.docSESION DE PERSONAL SOCIAL.  La convivencia en familia 22-04-24  -.doc
SESION DE PERSONAL SOCIAL. La convivencia en familia 22-04-24 -.doc
 
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
 
Infografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdfInfografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdf
 
RESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptx
RESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptxRESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptx
RESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptx
 
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docxTALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
 
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).pptPINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
 
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
 
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSOCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
 
Revista Apuntes de Historia. Mayo 2024.pdf
Revista Apuntes de Historia. Mayo 2024.pdfRevista Apuntes de Historia. Mayo 2024.pdf
Revista Apuntes de Historia. Mayo 2024.pdf
 
LA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptxLA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptx
 
Tema 19. Inmunología y el sistema inmunitario 2024
Tema 19. Inmunología y el sistema inmunitario 2024Tema 19. Inmunología y el sistema inmunitario 2024
Tema 19. Inmunología y el sistema inmunitario 2024
 
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdfNUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
 
Tema 17. Biología de los microorganismos 2024
Tema 17. Biología de los microorganismos 2024Tema 17. Biología de los microorganismos 2024
Tema 17. Biología de los microorganismos 2024
 

Subconsultas

  • 1. Trabajo con Subconsultas Contenido Contenido Introducción 1 Introducción a las subconsultas 2 Uso de una subconsulta como una tabla derivada 4 Uso de una subconsulta como una expresión 5 Uso de una subconsulta para correlacionar datos 6 Uso de las cláusulas EXISTS y NOT EXISTS 13
  • 2. Trabajo con Subconsultas i Notas para el instructor Este módulo presenta técnicas avanzadas de consulta, que incluyen subconsultas anidadas y correlacionadas. En él se describe cuándo y cómo utilizar una subconsulta y el modo de usar subconsultas para dividir y realizar consultas complejas. Al terminar este módulo, los alumnos serán capaces de: Describir cuándo y cómo utilizar subconsultas. Utilizar subconsultas para dividir y realizar consultas complejas.
  • 3. Trabajo con Subconsultas 1 Introducción Objetivos de la diapositiva Exponer un breve resumen de los temas tratados en Introducción a las subconsultas este módulo. Uso de una subconsulta como una tabla derivada Explicación previa En este módulo aprenderá Uso de una subconsulta como una expresión acerca de las técnicas avanzadas de consulta. Uso de una subconsulta para correlacionar datos Uso de las cláusulas EXISTS y NOT EXISTS Este módulo presenta técnicas avanzadas de consulta, lo que incluye las subconsultas anidadas y correlacionadas, y cómo se pueden utilizar para modificar datos. En él se describe cuándo y cómo utilizar una subconsulta y el modo de usar subconsultas para dividir y realizar consultas complejas. Al terminar este módulo, el alumno será capaz de: Describir cuándo y cómo utilizar subconsultas. Utilizar subconsultas para dividir y realizar consultas complejas.
  • 4. Trabajo con Subconsultas 2 Introducción a las subconsultas Objetivos de la diapositiva Comentar si se deben utilizar subconsultas. Por qué utilizar subconsultas Explicación previa Para dividir una consulta compleja en varios pasos Las subconsultas son un lógicos conjunto de instrucciones SELECT. A menudo, las Para responder una consulta que depende de los subconsultas se pueden resultados de otra consulta escribir como Por qué utilizar combinaciones en lugar de combinaciones. subconsultas SQL Server ejecuta combinaciones más rápidas que la subconsultas Cómo utilizar subconsultas Una subconsulta es una instrucción SELECT anidada en una instrucción SELECT, INSERT, UPDATE o DELETE, o en otra subconsulta. A menudo puede escribir las subconsultas como combinaciones y utilizarlas en lugar de una expresión. Una expresión es una combinación de identificadores, valores y operadores que evalúa SQL Server para obtener un resultado. Por qué utilizar subconsultas Las subconsultas se utilizan para dividir una consulta compleja en varios pasos lógicos y, como resultado, resolver un problema con una única instrucción. Las subconsultas son útiles cuando la consulta depende de los resultados de otra consulta. Por qué utilizar combinaciones en lugar de subconsultas A menudo, una consulta que contiene subconsultas se puede escribir como una combinación. En general, el rendimiento de una consulta puede ser similar con una combinación y con una subconsulta. El optimizador de consultas optimiza habitualmente subconsultas mediante el uso del plan de ejecución de ejemplo que utilizaría una combinación semánticamente equivalente. La diferencia consiste en que la subconsulta puede requerir que el optimizador de consultas realice pasos adicionales, como ordenar, lo que puede influir en la estrategia del proceso. Normalmente, utilizar combinaciones permite al optimizador de consultas recuperar datos de forma más eficiente. Si una consulta no requiere varios pasos, puede que no sea necesario utilizar una subconsulta.
  • 5. Trabajo con Subconsultas 3 Sugerencia Cómo utilizar subconsultas Revise cada hecho e Cuando decida utilizar subconsultas, tenga en cuenta los siguientes hechos e instrucción para determinar instrucciones: cuándo usar subconsultas. Las subconsultas se deben incluir entre paréntesis. Se pueden utilizar subconsultas en lugar de una expresión siempre y cuando se devuelva un solo valor o una lista de valores. Se pueden utilizar subconsultas que devuelvan un conjunto de registros de varias columnas en lugar de una tabla o para realizar la misma función que una combinación. No se pueden utilizar subconsultas que recuperen columnas con tipos de datos text e image. Puede tener subconsultas dentro de subconsultas, con una anidación de hasta 32 niveles. El límite varía según la cantidad de memoria disponible y la complejidad de las otras expresiones de la consulta. Las consultas individuales pueden no admitir una anidación de hasta 32 niveles.
  • 6. Trabajo con Subconsultas 4 Uso de una subconsulta como una tabla derivada Objetivos de la diapositiva Describir cómo utilizar una subconsulta como una tabla derivada. Es un conjunto de registros dentro de una consulta que funciona como una tabla Explicación previa Una tabla derivada se crea Ocupa el lugar de la tabla en la cláusula FROM al utilizar una subconsulta en lugar de una tabla en Se optimiza con el resto de la consulta una cláusula FROM: USE northwind USE northwind SELECT T.orderid, T.customerid SELECT T.orderid, T.customerid FROM ( SELECT orderid, customerid FROM ( SELECT orderid, customerid FROM orders ) AS T FROM orders ) AS T GO GO Una tabla derivada se crea al utilizar una subconsulta en lugar de una tabla en una cláusula FROM. Una tabla derivada es un uso especial de una subconsulta en una cláusula FROM a la que hace referencia un alias o nombre especificado por el usuario. El conjunto de resultados de la subconsulta en la cláusula FROM crea una tabla que utiliza la instrucción SELECT externa. Ejemplo En este ejemplo se utiliza una subconsulta para crear una tabla derivada en la parte interna de la consulta que consulta la parte externa. La tabla derivada propiamente dicha es funcionalmente equivalente a la consulta entera, pero aparece separada con propósitos ilustrativos. USE northwind SELECT T.orderid, T.customerid FROM ( SELECT orderid, customerid FROM orders ) AS T GO Cuando se utilice como tabla derivada, tenga en cuenta que una subconsulta: Es un conjunto de registros dentro de una consulta que funciona como una tabla. Ocupa el lugar de la tabla en la cláusula FROM. Se optimiza con el resto de la consulta.
  • 7. Trabajo con Subconsultas 5 Uso de una subconsulta como una expresión Objetivos de la diapositiva Describir cómo usar una subconsulta como Se evalúa y trata como una expresión una expresión. Explicación previa Se ejecuta una vez para la instrucción entera Puede sustituir una subconsulta donde utilice una expresión en las USE pubs USE pubs instrucciones SELECT, SELECT title, price SELECT title, price UPDATE, INSERT y ,( SELECT AVG(price) FROM titles) AS average ,( SELECT AVG(price) FROM titles) AS average DELETE. ,price-(SELECT AVG(price) FROM titles) AS difference ,price-(SELECT AVG(price) FROM titles) AS difference FROM titles FROM titles WHERE type='popular_comp' WHERE type='popular_comp' GO GO En Transact-SQL, puede sustituir una subconsulta donde utilice una expresión. Sugerencia La subconsulta debe producir un valor escalar o una lista de valores de una sola Señale que las subconsultas que devuelven columna. Las subconsultas que devuelven una lista de valores sustituyen a una una lista de valores expresión en una cláusula WHERE que contiene la palabra clave IN. sustituyen a una expresión Si se utiliza como expresión, tenga en cuenta que una subconsulta: en una cláusula WHERE que contiene la palabra Se evalúa y trata como una expresión. Con frecuencia, el optimizador de clave IN. consultas evalúa una expresión como equivalente a una combinación que conecta con una tabla que tiene una fila. Se ejecuta una vez para la instrucción entera. Ejemplo En este ejemplo se devuelve el precio de un popular libro de informática, el promedio del precio de todos los libros y la diferencia entre el precio del libro y el promedio del precio de todos los libros. USE pubs SELECT title, price ,(SELECT AVG(price) FROM titles) AS average ,price-(SELECT AVG(price) FROM titles) AS difference FROM titles WHERE type='popular_comp' GO
  • 8. Trabajo con Subconsultas 6 Uso de una subconsulta para correlacionar datos Objetivos de la diapositiva Describir cómo usar una subconsulta para Evaluación de una subconsulta correlacionada correlacionar datos. Simulación de una cláusula JOIN Explicación previa Es posible utilizar una Simulación de una cláusula HAVING subconsulta correlacionada como una expresión dinámica que cambia en cada fila de una consulta externa. Puede utilizar una subconsulta correlacionada como una expresión dinámica que cambia en cada fila de una consulta externa. El procesador de consultas realiza la subconsulta para cada fila de la consulta externa, una fila a la vez, que a su vez se evalúa como una expresión para esa fila y se pasa a la consulta externa. La subconsulta correlacionada es, de hecho, una COMBINACIÓN entre la subconsulta ejecutada dinámicamente y la fila de la consulta externa. Normalmente, puede escribir una consulta de varias maneras y aun así obtener los mismos resultados. Las subconsultas correlacionadas dividen consultas complejas en dos o más consultas simples relacionadas. Sugerencia Las subconsultas correlacionadas se pueden reconocer fácilmente. La columna de una tabla dentro de la subconsulta se compara con la columna de una tabla externa a la subconsulta.
  • 9. Trabajo con Subconsultas 7 Evaluación de una subconsulta correlacionada Objetivos de la La consulta externa pasa un La consulta externa pasa un diapositiva valor de columna a la valor de columna a la Describir cómo se procesan consulta interna consulta interna La consulta interna utiliza los las subconsultas correlacio- La consulta interna utiliza los USE northwind USE northwind valores que pasa la consulta valores que pasa la consulta nadas. SELECT orderid, customerid externa SELECT orderid, customerid externa Explicación previa FROM orders AS or1 FROM orders AS or1 WHERE 20 < (SELECT quantity WHERE 20 < (SELECT quantity Cuando crea una FROM [order details] AS od FROM [order details] AS od subconsulta correlacionada, WHERE or1.orderid = od.orderid Ejemplo 1 Ejemplo 1 WHERE or1.orderid = od.orderid las subconsultas internas AND od.productid = 23) AND od.productid = 23) se evalúan repetidamente, GO GO una vez por cada fila de la consulta externa. La consulta interna devuelve La consulta interna devuelve Este proceso se repite para la Este proceso se repite para la un valor a la consulta externa un valor a la consulta externa fila siguiente de la consulta fila siguiente de la consulta externa externa Volver al paso 1 Volver al paso 1 Cuando crea una subconsulta correlacionada, las subconsultas internas se Sugerencia evalúan repetidamente, una vez por cada fila de la consulta externa: Compare las subconsultas correlacionadas con las SQL Server ejecuta la consulta interna por cada fila que selecciona la subconsultas anidadas. consulta externa. SQL Server compara los resultados de la subconsulta con los resultados externos a ella. Ejemplo 1 En este ejemplo se devuelve una lista de clientes que han pedido más de 20 unidades del producto número 23. USE northwind SELECT orderid, customerid FROM orders AS or1 WHERE 20 < (SELECT quantity FROM [order details] AS od WHERE or1.orderid = od.orderid AND od.productid = 23) GO Resultado Orderid customerid 10337 FRANK 10348 WANDK 10396 FRANK 10402 ERNSH 10462 CONSH . . . (11 filas afectadas)
  • 10. Trabajo con Subconsultas 8 Las subconsultas correlacionadas devuelven un único valor o una lista de valores por cada fila especificada en la cláusula FROM de la consulta externa. Los pasos siguientes describen cómo se evalúa la subconsulta correlacionada del ejemplo 1: 1. La consulta externa pasa un valor de columna a la consulta interna. El valor de columna que la consulta externa pasa a la consulta interna es orderid. La consulta externa pasa el primer orderid de la tabla orders a la consulta interna. 2. La consulta interna utiliza los valores que pasa la consulta externa. Cada orderid de la tabla orders se evalúa para determinar si existe un orderid idéntico en la tabla order details. Si el primer orderid coincide con un orderid de la tabla order details y ese orderid ha adquirido el producto número 23, la consulta interna devuelve ese orderid a la consulta externa. 3. La consulta interna devuelve un valor a la consulta externa. La cláusula WHERE de la consulta externa evalúa posteriormente el orderid que adquirió el producto número 23 para determinar si la cantidad pedida es mayor de 20. 4. Este proceso se repite para la fila siguiente de la consulta externa. La consulta externa pasa el segundo orderid de la tabla orders a la consulta interna y SQL Server repite el proceso de evaluación para esa fila. Ejemplo 2 En este ejemplo se devuelve una lista de productos y el pedido mayor realizado hasta la fecha de cada producto de la tabla order details. Observe que esta subconsulta correlacionada hace referencia a la misma tabla que la consulta externa; generalmente, el optimizador tratará esto como una autocombinación. USE northwind SELECT DISTINCT productid, quantity FROM [order details] AS ord1 WHERE quantity = ( SELECT MAX(quantity) FROM [order details] AS ord2 WHERE ord1.productid = ord2.productid) GO Resultado productid quantity 50 40 67 40 4 50 9 50 11 50 . . . (77 filas afectadas)
  • 11. Trabajo con Subconsultas 9 Simulación de una cláusula JOIN Objetivos de la diapositiva Describir cómo usar una Las subconsultas correlacionadas pueden producir el subconsulta correlacio- mismo resultado que una cláusula JOIN nada para simular una combinación. Las combinaciones permiten al optimizador de Explicación previa consultas determinar la manera de correlacionar los Puede utilizar una sub- datos de la forma más eficiente consulta correlacionada para producir los mismos Ejemplo 1 Ejemplo 1 USE pubs USE pubs resultados que una SELECT DISTINCT t1.type SELECT DISTINCT t1.type combinación. FROM titles AS t1 FROM titles AS t1 WHERE t1.type IN WHERE t1.type IN (SELECT t2.type (SELECT t2.type FROM titles AS t2 FROM titles AS t2 WHERE t1.pub_id <> t2.pub_id) WHERE t1.pub_id <> t2.pub_id) GO GO Puede utilizar una subconsulta correlacionada para producir los mismos Sugerencia resultados que una combinación, por ejemplo, seleccionar datos de una La clave para comprender la sintaxis de las subconsultas tabla a la que se hizo referencia en la consulta externa. correlacionadas es entender el uso de los alias de tabla. Nota Normalmente, las subconsultas correlacionadas se pueden escribir Los alias de tabla muestran como combinaciones. El uso de combinaciones en lugar de subconsultas las tablas que están correlacionadas permite al optimizador de consultas determinar la manera correlacionadas. de correlacionar los datos de la forma más eficiente. Ejemplo 1 En este ejemplo se utiliza una subconsulta correlacionada para buscar los tipos de libros publicados por más de un editor. Para evitar ambigüedades, se necesitan alias para distinguir las dos funciones diferentes en las que aparece la tabla titles. USE pubs SELECT DISTINCT t1.type FROM titles AS t1 WHERE t1.type IN (SELECT t2.type FROM titles AS t2 WHERE t1.pub_id <> t2.pub_id) GO Resultado Type business psychology (2 filas afectadas)
  • 12. Trabajo con Subconsultas 10 Ejemplo 2 En este ejemplo se devuelven los mismos resultados que en el ejemplo 1 mediante el uso de una autocombinación en lugar de una subconsulta correlacionada. USE pubs SELECT DISTINCT t1.type FROM titles AS t1 INNER JOIN titles AS t2 ON t1.type = t2.type WHERE t1.pub_id <> t2.pub_id GO Sugerencia Utilice el Analizador de consultas SQL para ejecutar ambos ejemplos de combi- nación y mostrar los distin- tos planes de ejecución.
  • 13. Trabajo con Subconsultas 11 Simulación de una cláusula HAVING Objetivos de la diapositiva Subconsulta con el mismo resultado que una cláusula Describir cómo simular una cláusula HAVING. HAVING Explicación previa USE pubs USE pubs Ejemplo 1 Ejemplo 1 Puede utilizar una sub- SELECT t1.type, SELECT t1.type, t1.title, t1.price t1.title, t1.price FROM titles AS FROM titles AS t1 t1 consulta correlacionada WHERE t1.price > ( SELECT AVG(t2.price) FROM titles AS t2 WHERE t1.price > ( SELECT AVG(t2.price) FROM titles AS t2 para producir los mismos WHERE t1.type = t2.type ) WHERE t1.type = t2.type ) resultados que una consulta GO GO que utiliza la cláusula HAVING. Uso de una cláusula HAVING sin una subconsulta USE pubs USE pubs Ejemplo 2 Ejemplo 2 SELECT t1.type, t1.title, t1.price SELECT t1.type, t1.title, t1.price FROM titles AS t1 FROM titles AS t1 INNER JOIN titles AS t2 ON t1.type = t2.type INNER JOIN titles AS t2 ON t1.type = t2.type GROUP BY t1.type, t1.title, t1.price GROUP BY t1.type, t1.title, t1.price HAVING t1.price > AVG(t2.price) HAVING t1.price > AVG(t2.price) GO GO Puede utilizar una subconsulta correlacionada para producir los mismos resultados que una consulta que utiliza la cláusula HAVING. Ejemplo 1 En este ejemplo se buscan todos los títulos con un precio mayor que el precio promedio para libros del mismo tipo. Por cada valor posible de t1, SQL Server evalúa la subconsulta e incluye la fila en los resultados si el precio de dicha fila es mayor que el promedio calculado. No es necesario agrupar explícitamente por tipo, puesto que las filas cuyo precio promedio se calcula están restringidas por la cláusula WHERE de la subconsulta. USE pubs Sugerencia SELECT t1.type, t1.title, t1.price Utilice el Analizador de FROM titles AS t1 consultas SQL para ejecutar ambos ejemplos y WHERE t1.price > ( SELECT AVG(t2.price) comprobar que producen FROM titles AS t2 los mismos resultados. WHERE t1.type = t2.type ) GO Resulttype title Business The Busy Executive’s Database Guide Business Straight Talk About Computers mod_cook Silicon Valley Gastronomic Treats popular_comp But Is It User Friendly? Psychology Computer Phobic AND Non-Phobic Individuals: Behavior Variations Psychology Prolonged Data Deprivation: Four Case Studies trad_cook Onions, Leeks, and Garlic: Cooking Secrets of the Mediterranean (7 filas afectadas)
  • 14. Trabajo con Subconsultas 12 Ejemplo 2 Este ejemplo produce el mismo conjunto de resultados que el ejemplo 1, pero utiliza una autocombinación con las cláusulas GROUP BY y HAVING. USE pubs SELECT t1.type, t1.title, t1.price FROM titles AS t1 INNER JOIN titles AS t2 ON t1.type = t2.type GROUP BY t1.type, t1.title, t1.price HAVING t1.price > AVG(t2.price) GO Nota Puede escribir subconsultas correlacionadas que produzcan los mismos resultados que una cláusula JOIN o HAVING, pero es posible que el procesador de consultas no las implemente de la misma manera.
  • 15. Trabajo con Subconsultas 13 Uso de las cláusulas EXISTS y NOT EXISTS Objetivos de la diapositiva Describir cómo se utilizan los operadores EXISTS Uso con subconsultas correlacionadas y NOT EXISTS con las Determinar si hay datos en una lista de valores subconsultas correlacionadas. Proceso de SQL Server Explicación previa La consulta externa prueba la existencia de las filas Los operadores EXISTS y NOT EXISTS se pueden La consulta interna devuelve TRUE o FALSE utilizar para determinar si No se produce ningún dato hay datos en una lista de Ejemplo 1 USE northwind Ejemplo 1 valores. USE northwind SELECT lastname, employeeid SELECT lastname, employeeid FROM employees AS e FROM employees AS e WHERE EXISTS (SELECT * FROM orders AS o WHERE EXISTS (SELECT * FROM orders AS o WHERE e.employeeid = o.employeeid WHERE e.employeeid = o.employeeid AND o.orderdate = ‘5/9/1997') AND o.orderdate = ‘5/9/1997') GO GO Los operadores EXISTS y NOT EXISTS se pueden utilizar para determinar si hay datos en una lista de valores. Uso con subconsultas correlacionadas Puede utilizar los operadores EXISTS y NOT EXISTS con subconsultas correlacionadas para restringir el conjunto de resultados de una consulta externa a las filas que cumplen la subconsulta. Los operadores EXISTS y NOT EXISTS devuelven TRUE o FALSE, en función de si las subconsultas devuelven filas o no. Determinar si hay datos en una lista de valores Cuando se introduce una subconsulta con el operador EXISTS, SQL Server comprueba si hay datos que coincidan con la subconsulta. No se recupera realmente ninguna fila. SQL Server termina la recuperación de filas cuando ha comprobado que al menos una fila cumple la condición WHERE en la subconsulta. Proceso de SQL Server Cuando SQL Server procesa subconsultas que utilizan el operador EXISTS o NOT EXISTS: La consulta externa prueba que existen las filas que devuelve la subconsulta. La subconsulta devuelve un valor TRUE o FALSE en función de la condición dada en la consulta. La subconsulta no produce ningún dato.
  • 16. Trabajo con Subconsultas 14 Sintaxis parcial WHERE [NOT] EXISTS (subconsulta) Ejemplo 1 En este ejemplo se utiliza una subconsulta correlacionada con un operador EXISTS en la cláusula WHERE para devolver una lista de empleados que anotaron pedidos el día 5/9/1997. USE northwind Sugerencia SELECT lastname, employeeid Ejecute estos dos ejemplos FROM employees AS e con STATISTICS TIME establecido en ON para WHERE EXISTS ( SELECT * FROM orders AS o comparar el tiempo de WHERE e.employeeid = o.employeeid proceso. AND o.orderdate = '5/9/1997' ) GO Resultado lastname employeeid Peacock 4 King 7 (2 filas afectadas) Ejemplo 2 Este ejemplo devuelve el mismo conjunto de resultados del ejemplo 1 e ilustra que podría utilizar una operación de combinación en lugar de una subconsulta correlacionada. Observe que la consulta necesita la palabra clave DISTINCT para devolver únicamente una sola fila por cada empleado. USE northwind SELECT DISTINCT lastname, e.employeeid FROM orders AS o INNER JOIN employees AS e ON o.employeeid = e.employeeid WHERE o.orderdate = '5/9/1997' GO Resultado lastname employeeid Peacock 4 King 7 (2 filas afectadas)