La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

DML Transact SQL Sesión VI Trabajando con subconsultas.

Presentaciones similares


Presentación del tema: "DML Transact SQL Sesión VI Trabajando con subconsultas."— Transcripción de la presentación:

1 DML Transact SQL Sesión VI Trabajando con subconsultas

2 Introducción El hecho de poder realizar consultas que permitan el acceso a la vez de varias tablas implica el crecimiento de la complejidad, un ocasiones el filtrado de información depende de el resultado de otra consulta, es por ello que en esta sección el usuario manejará las subconsultas.

3 Uso de alias para los nombres de las tablas. Una subconsulta es una sentencia SELECT que aparece dentro de otra sentencia SELECT que se puede llamar consulta principal. Se puede encontrar en la lista de selección, en la cláusula WHERE o en la cláusula HAVING de la consulta principal

4 Uso de alias para los nombres de las tablas. Una subconsulta tiene la misma sintaxis que una sentencia SELECT normal exceptuando que aparece encerrada entre paréntesis, no puede contener la cláusula ORDER BY si no se incluye la cláusula TOP n, ni puede ser la UNION de varias sentencias SELECT.

5 Uso de alias para los nombres de las tablas. Se puede disponer de hasta 32 niveles de anidamiento, aunque el límite varía dependiendo de la memoria disponible y de la complejidad del resto de las expresiones de la consulta.

6 Uso de alias para los nombres de las tablas. Cuando se ejecuta una consulta que contiene una subconsulta, la subconsulta se ejecuta por cada fila de la consulta principal. Se aconseja no utilizar campos calculados en las subconsultas, ralentizan la consulta. Las consultas que utilizan subconsultas suelen ser más fáciles de interpretar por el usuario.

7 Usando subconsultas.

8 A menudo, es necesario, dentro del cuerpo de una subconsulta, hacer referencia al valor de una columna en la fila actual de la consulta principal, ese nombre de columna se denomina referencia externa

9 Usando subconsultas. Ejemplo: Select *, (select min(price) from titles t where t.pub_id = p.pub_id ) as price from publishers p

10 Usando subconsultas. En este ejemplo la consulta principal es SELECT... FROM publishers p La subconsulta es (select min(price) from titles t where t.pub_id = p.pub_id ) as price. En esta subconsulta tenemos una referencia externa ( price ) es un campo de la tabla titles

11 Usando subconsultas. ¿Qué pasa cuando se ejecuta la consulta principal?  se toma el primer publisher y se calcula la subconsulta  se toma el segundo publisher y se calcula la subconsulta...  Al final se obtiene una lista con el los datos de Publisher y el precio más bajo

12 Usando subconsultas. Anidar subconsultas Select * from titles where pub_id in (Select pub_id from publishers where pub_id in ( Select pub_id from employee))

13 Usando subconsultas. Subconsulta en la lista de selección Cuando la subconsulta aparece en la lista de selección de la consulta principal, en este caso la subconsulta, no puede devolver varias filas ni varias columnas, de lo contrario se da un mensaje de error.

14 Usando subconsultas. Muchos SQLs no permiten que una subconsulta aparezca en la lista de selección de la consulta principal pero eso no es ningún problema ya que normalmente se puede obtener lo mismo utilizando como origen de datos las tablas

15 Usando subconsultas. El ejemplo anterior se puede obtener de la siguiente forma: Select distinct t.* from titles t, publishers p, employee e where t.pub_id = p.pub_id and e.pub_id = p.pub_id

16 Usando subconsultas. En la cláusula FROM En la cláusula FROM se puede encontrar una sentencia SELECT encerrada entre paréntesis pero más que subconsulta sería una consulta ya que no se ejecuta para cada fila de la tabla origen sino que se ejecuta una sola vez al principio

17 Usando subconsultas. Subconsulta en las cláusulas WHERE y HAVING Ejemplo: Select fname + ' '+ lname employee from employee where job_id = (Select job_id from jobs where job_desc='Publisher')

18 Usando subconsultas. En una cláusula WHERE / HAVING se tiene siempre una condición y la subconsulta actúa de operando dentro de esa condición.

19 Condiciones de Selección

20 En Transact-SQL se tienen tres condiciones:  el test de comparación con subconsulta  el test de pertenencia a un conjunto  el test de existencia

21 Condiciones de Selección El test de comparación con subconsulta. Es el equivalente al test de comparación simple. Se utiliza para comparar un valor de la fila que se está examinado con un único valor producido por la subconsulta. La subconsulta debe devolver una única columna, sino se produce un error.

22 Condiciones de Selección Por ejemplo, si supone que cada editor se encuentra en una sola ciudad, y desea encontrar el nombre de los autores que viven en la ciudad en la que se encuentra Algodata Infosystems, puede escribir una instrucción con una subconsulta presentada con el operador de comparación simple =.

23 Condiciones de Selección SELECT au_lname, au_fname FROM authors WHERE city = (SELECT city FROM publishers WHERE pub_name = 'Algodata Infosystems')

24 Condiciones de Selección Test de pertenencia a conjunto (IN). Examina si el valor de la expresión es uno de los valores incluidos en la lista de valores producida por la subconsulta. La subconsulta debe generar una única columna y las filas que sean. Si la subconsulta no produce ninguna fila, el test da falso.

25 Condiciones de Selección En esta consulta se buscan los nombres de los editores que han publicado libros de empresa. SELECT pub_name FROM publishers WHERE pub_id IN (SELECT pub_id FROM titles WHERE type = 'business' )

26 Condiciones de Selección Esta consulta busca los nombres de los editores que no han publicado libros de empresa. SELECT pub_name FROM publishers WHERE pub_id NOT IN (SELECT pub_id FROM titles WHERE type = 'business')

27 Condiciones de Selección La consulta es exactamente la misma que la de las subconsultas con IN, excepto en que NOT IN se sustituye por IN.

28 Condiciones de Selección El test de existencia EXISTS. Examina si la subconsulta produce alguna fila de resultados. Si la subconsulta contiene filas, el test adopta el valor verdadero, si la subconsulta no contiene ninguna fila, el test toma el valor falso, nunca puede tomar el valor nulo. Con este test la subconsulta puede tener varias columnas, no importa ya que el test se fija no en los valores devueltos sino en si hay o no fila en la tabla resultado de la subconsulta.

29 Condiciones de Selección Una subconsulta presentada con EXISTS tiene la siguiente sintaxis: WHERE [NOT] EXISTS (subquery)

30 Condiciones de Selección En esta consulta se busca el nombre de todos los editores que publican libros de empresa. SELECT pub_name FROM publishers WHERE EXISTS (SELECT * FROM titles WHERE pub_id = publishers.pub_id AND type = 'business')

31 Condiciones de Selección La lista de selección de una subconsulta presentada por EXISTS casi siempre consta de un asterisco (*). No hay razón para enumerar los nombres de las columnas porque simplemente se está comprobando la existencia de filas que cumplan las condiciones especificadas en la subconsulta.

32 Condiciones de Selección Estas dos consultas buscan títulos de libros publicados por algún editor que se encuentre en una ciudad que comience con la letra B.

33 Condiciones de Selección SELECT title FROM titles WHERE pub_id IN (SELECT pub_id FROM publishers WHERE city LIKE 'B%')

34 Condiciones de Selección SELECT title FROM titles WHERE EXISTS (SELECT * FROM publishers WHERE pub_id = titles.pub_id AND city LIKE 'B%')

35 Condiciones de Selección NOT EXISTS funciona igual que EXISTS, salvo por el hecho de que la cláusula WHERE en la que se utiliza se cumple si la subconsulta no devuelve ninguna fila.

36 Condiciones de Selección En esta consulta se buscan los títulos de los que no ha habido ninguna venta. USE pubs SELECT title FROM titles WHERE NOT EXISTS (SELECT title_id FROM sales WHERE title_id = titles.title_id)

37 Condiciones de Selección NOTA. Cuando se trabaja con tablas muy voluminosas el test EXISTS suele dar mejor rendimiento que el test IN.

38 Condiciones de Selección A lo largo de este curso se han tomado los elementos necesarios para la obtención de información, el uso de las subconsultas es otra posibilidad que el participante ha desarrollado con ellas puede filtrar. Ahora puede realizar el instrumento correspondiente a la sesión y agregarlo a la carpeta de evidencias.


Descargar ppt "DML Transact SQL Sesión VI Trabajando con subconsultas."

Presentaciones similares


Anuncios Google