SlideShare una empresa de Scribd logo
1 de 42
Descargar para leer sin conexión
Facultad Politécnica Base de Datos II 1
Facultad Politécnica Base de Datos II 2
Cláusula GROUP BY y HAVING Declaración de
SELECT : Sintaxis
 Las funciones de grupo operan sobre conjuntos de filas para dar un
resultado por cada grupo
 Las funciones de grupo pueden utilizarse tanto en la sentencia SELECT
como en la sentencia HAVING.
 GROUP BY divide filas en los grupos más pequeños.
 HAVING restringe el resultado (condición)
SELECT column, group_function
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_condition]
[ORDER BY column];
Facultad Politécnica Base de Datos II 3
Funciones de Grupo
AVG (DISTINCT | ALL|n) Valor promedio de n, ignorando valores nulos
COUNT (DISTINCT |ALL| expr|*) Nº de filas. Con * cuenta todas, incluyendo
nulos
MAX (DISTINCT | ALL| expr) Máximo valor de la expresión
MIN (DISTINCT | ALL | expr) Mínimo valor de la expresión
STDDEV (DISTINCT | ALL|n) Desviación estándar (ignora nulos)
SUM (DISTINCT | ALL|n) Suma valores. Ignora nulos
VARIANCE (DISTINCT | ALL|n) Varianza. Ignora nulos
Facultad Politécnica Base de Datos II 4
Funciones de GRUPO
• MAX y MIN pueden utilizarse para cualquier tipo de dato.
SQL> SELECT MIN(apellido), MAX(apellido)
2 FROM b_personas
3 WHERE ES_CLIENTE = 'S';
SQL> SELECT SUM(MONTO_TOTAL), AVG(MONTO_TOTAL),
2 MIN(MONTO_TOTAL), MAX(MONTO_TOTAL)
3 FROM B_VENTAS
4* WHERE ID_CLIENTE = 2;
• Se puede usar AVG y SUM con columnas que guardan datos numéricos
exclusivamente.
Facultad Politécnica Base de Datos II 5
Función COUNT : Ejemplos
• COUNT (*) retorna el número de filas en una
tabla.
SQL> SELECT COUNT(*)
2 FROM b_posicion_actual
3 WHERE id_area = 12;
SQL> SELECT COUNT(RUC)
2 FROM b_personas
3 WHERE ES_CLIENTE = 'S';
• COUNT(expr) retorna el número de filas no-nulas.
Facultad Politécnica Base de Datos II 6
La cláusula GROUP BY
Sintaxis
• Divide filas en una tabla en los grupos más pequeños
usando la cláusula GROUP BY.
• La misma lista de columnas que se utilizan en la
cláusula SELECT, deben ser utilizadas en la cláusula
GROUP BY
• Defina el orden predefinido usando ORDER BY.
SELECT column, group_function
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[ORDER BY column];
Facultad Politécnica Base de Datos II 7
Sin la cláusula GROUP BY
ID APELLIDO ID_LOCALIDAD
--- -------------- ------------
5 BRIZUELA CUEVAS 12
6 ACHUCARRO 12
7 12
La localidad 12 se despliega
tres veces porque está
asignado a 3 clientes
SQL> SELECT id, apellido, id_localidad
2 FROM b_personas
3 WHERE id_localidad = 12
4 AND es_cliente= 'S';
Facultad Politécnica Base de Datos II 8
Con la cláusula GROUP BY
Group By: despliega una línea de
datos para cada grupo recuperado
por la cláusula WHERE, y
COUNT (*). En este caso
corresponde al número de clientes
de la localidad 12.
SQL> SELECT id_localidad, count(*) Cantidad
2 FROM b_personas
3 WHERE id_localidad = 12
4 AND es_cliente= 'S'
5 GROUP BY id_localidad;
ID_LOCALIDAD CANTIDAD
------------ --------
12 3
Facultad Politécnica Base de Datos II 9
GROUP BY : Ejemplos
• Despliegue los diferentes tipos de personas y la cantidad
por cada tipo
SQL> SELECT tipo_persona, COUNT(*) Cantidad
2 FROM b_personas
3 GROUP BY tipo_persona;
SQL> SELECT p.cod_categoria, COUNT(p.cedula)
2 FROM B_POSICION_ACTUAL p
3 WHERE fecha_fin IS NULL
4 GROUP BY p.Cod_Categoria;
• Determine todas las categorías salariales ocupadas, la
cantidad de empleados que poseen dichas categorías
Facultad Politécnica Base de Datos II 10
SQL> SELECT p.cod_categoria CAT, COUNT(p.cedula) Cantid
2 FROM B_POSICION_ACTUAL p
3 WHERE fecha_fin IS NULL
4 GROUP BY p.Cod_Categoria
5 HAVING COUNT(p.cedula) > 1;
Desplegando Grupos específicos usando
la cláusula HAVING
CAT CANTID
--- --------
42 2
43 2
48 2
49 2
56 3
66 2
La cláusula HAVING
condiciona los
grupos
Sólo se despliegan
aquellas
categorías que
tienen más de 1
empleado
Facultad Politécnica Base de Datos II 11
La cláusula HAVING: Sintaxis
Use la cláusula HAVING para restringir grupos.
 Paso 1: Se agrupan filas.
 Paso 2: Se aplica la función de grupo.
 Paso 3: Se despliegan los grupos que cumplen
con la condición del HAVING.
SELECT column, group_function
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_condition]
[ORDER BY column];
Facultad Politécnica Base de Datos II 12
Errores que no deben cometerse:
Todas las columnas citadas en el SELECT que
sean parte de la función agregada DEBEN
estar en la cláusula GROUP BY, pues de lo
contrario, dará un mensaje de error
La cláusula WHERE no puede utilizarse para
condicionar grupos.
Facultad Politécnica Base de Datos II 13
SUBQUERIES
Facultad Politécnica Base de Datos II 14
• Una Subconsulta (subquery) es una sentencia SELECT
‘embebida’ en otra sentencia SQL.
• Son muy útiles cuando se trata de seleccionar filas de una tabla
con una condición que depende de la tabla en sí.
• Se puede usar subqueries en SQL con las cláusulas:
 WHERE (QUERY ANIDADO)
 HAVING
 FROM (INLINE VIEWS)
 FROM (para seleccionar las filas en un sentencia CREATE
o INSERT)
LAS SUBCONSULTAS
Facultad Politécnica Base de Datos II 15
Formato del Sub
query
SELECT Syntax
SELECT...
FROM...
WHERE... Sintaxis de otro SELECT
(SELECT...
FROM...
WHERE...)
;
Query
Principal
Subquery
Facultad Politécnica Base de Datos II 16
Ejemplo de la subconsulta: Seleccionar los empleados
que tienen el mismo jefe que “Ferreira”
B_EMPLEADOS B_EMPLEADOS
Servidor
APELLIDO CEDULA_JEFE
Ferreira 952160
Moreno 952160
Gonzalez 952160
Caballero 952160
Balmaceda 952160
CEDULA_JEFE
952160
Facultad Politécnica Base de Datos II 17
Ejemplo de la subconsulta
SQL> SELECT NOMBRE, APELLIDO, CEDULA_JEFE
FROM B_EMPLEADOS
WHERE CEDULA_JEFE = (SELECT CEDULA_JEFE FROM
B_EMPLEADOS
WHERE UPPER(APELLIDO)= 'FERREIRA');
Seleccionar los empleados que tienen el mismo jefe que
“Ferreira”
Facultad Politécnica Base de Datos II 18
SINTAXIS DE LAS SUB CONSULTAS
• El subquery se ejecuta una vez antes del Query
principal.
• El resultado del subquery es usado por el
Query exterior principal.
SELECT lista de columnas
FROM tabla
WHERE expresión Operador
(SELECT lista de columnas
FROM tabla);
Facultad Politécnica Base de Datos II 19
Indicaciones para los subqueries:
 La subconsulta debe aparecer entre paréntesis
 Se pueden utilizar subconsultas con operadores
de comparasión de una sola fila ( >, =, >=, <,
<>, <= ) y de MÚLTIPLES FILAS ( IN, NOT
IN).
 La subconsulta debe aparecer en el lado derecho
del operador
 NO PUEDEN TENER la cláusula ORDER BY.
Facultad Politécnica Base de Datos II 20
¿Cómo se procesan las consultas
anidadas?
Query anidado Query Principal
1. La declaración SELECT anidada se ejecuta primero.
2. El resultado se pasa en la condición de pregunta
principal.
SELECT NOMBRE, APELLIDO,
CEDULA_JEFE
FROM B_EMPLEADOS
WHERE CEDULA_JEFE =
(SELECT CEDULA_JEFE
FROM
B_EMPLEADOS
WHERE UPPER(APELLIDO)=
'FERREIRA')
Retorna cedula_jefe= 952160
Facultad Politécnica Base de Datos II 21
Consultas de una sola fila
Escriba la declaración
de SQL para desplegar
el nombre y apellido
del empleado.
Ponga ambas
declaraciones
y deje que el SQL
determine el valor de
comparación
SELECT CEDULA_JEFE FROM
B_EMPLEADOS
WHERE UPPER(APELLIDO)=
'FERREIRA'
SELECT NOMBRE, APELLIDO,
CEDULA_JEFE
FROM B_EMPLEADOS
WHERE CEDULA_JEFE =
Escriba la consulta
para averiguar el jefe
de Ferreira
SELECT NOMBRE, APELLIDO,
CEDULA_JEFE
FROM B_EMPLEADOS
WHERE CEDULA_JEFE =
(SELECT CEDULA_JEFE FROM
B_EMPLEADOS
WHERE UPPER(APELLIDO)=
'FERREIRA')
Facultad Politécnica Base de Datos II 22
SQL> SELECT nombre, costo
2 FROM b_articulos
3 WHERE costo < (SELECT AVG(costo)
4 FROM b_articulos)
5 ORDER by costo DESC;
Ejemplo de la utilización de funciones
de grupo en la subconsulta
Seleccionar el nombre y costo de los artículos cuyo
costo está por debajo del promedio.
Facultad Politécnica Base de Datos II 23
Utilización de funciones de grupo en
una subconsulta
NOMBRE COSTO
Porta utensilios Cheff 59848
Mantel Cadence 140x250 52273
Almohada Plumi 50x70 Altenburg 52273
Florero 31x15cm 30227
Figura decorativa Buho 25758
Toalla Felpa Hilo Egipcio 18864
Bandeja redonda 12" 18864
Servido
r
AVG(COSTO)
72145,90625
Artículos cuyo costo está por debajo del promedio
Subquery escalar
Un subquery escalar es aquel que retorna
exactamente una columna de una fila
De allí que el subquery escalar puede
utilizarse en expresiones tales como
 DECODE y CASE
 Todas las cláusulas de SELECT, con excepción
de GROUP BY
Ejemplo de uso de un subquery escalar en el
CASE:
select nombre_cta,
(CASE
WHEN id_tipo = (SELECT id FROM b_tipo_cuenta
WHERE nombre_categoria
=('ACTIVO'))
THEN 'ACTIVO'
ELSE
'Otra clasificación'
END) Clasificación
FROM b_cuentas;
Facultad Politécnica Base de Datos II 26
Errores con Subqueries
 Si se escribe un subquery que devuelve más de una fila y se usa un
operador de comparación de fila, la sentencia dará error.
SQL> SELECT nombre, apellido
FROM b_personas
WHERE id_localidad =
(SELECT id FROM b_localidad
WHERE UPPER(nombre) LIKE 'CAA%');
ERROR en línea 4:
ORA-01427: la subconsulta de una sola fila
devuelve más de una fila
 Para corregir el error, cambie al operador de la
comparación a IN, un operador de la fila múltiple.
Facultad Politécnica Base de Datos II 27
Ejemplo de subconsultas que
retornan múltiples filas
 Un subquery de filas múltiples devuelve más de 1
fila.
 Usted debe usar a un operador de la fila múltiple
en la cláusula WHERE, por ejemplo el operador IN.
SQL> SELECT nombre, apellido, id_localidad
FROM b_personas
WHERE id_localidad IN
(SELECT id FROM b_localidad
WHERE UPPER(nombre) LIKE 'CAA%');
Facultad Politécnica Base de Datos II 28
Utilización de cláusula HAVING en
una SUBCONSULTA
• También se puede utilizar una subconsulta en la
cláusula HAVING
• Siempre se ejecuta primeramente la SUBCONSULTA y
retorna el resultado a la cláusula HAVING de la
consulta principal
SQL> SELECT CEDULA_VENDEDOR, AVG(MONTO_TOTAL)COSTO
FROM B_VENTAS
GROUP BY CEDULA_VENDEDOR
HAVING AVG(MONTO_TOTAL) <
(SELECT AVG(MONTO_TOTAL) FROM B_VENTAS);
Facultad Politécnica Base de Datos II 29
Subqueries con múltiples
columnas
Se pueden comparar más de una columna, para ello la sintaxis
es la siguiente:
SELECT columna, columna, ...
FROM tabla
WHERE (columna, columna, ...) IN
(SELECT columna, columna, ...
FROM tabla
WHERE condición)
Consultas correlacionadas
 Un subquery correlacionado es aquel que contiene una
referencia a una tabla que aparece el query exterior
(query principal). La sintaxis es la siguiente:
SELECT columna1, columna2, ...
FROM tabla1 alias_tab1
WHERE columna1 <operador>
(SELECT columna1
FROM tabla2
WHERE expresion1 =
alias_tab1.expresion2);
Facultad Politécnica Base de Datos II 31
Uso del operador EXISTS en consultas
correlacionadas
 El operador EXISTS verifica la existencia de filas en el
conjunto resultante del subquery
 Si se encuentra la fila, la búsqueda ya no continúa y se
retorna TRUE.
 Ejemplo: Seleccionar todos los empleados que tienen al
menos un empleado que depende de él
SELECT CEDULA, NOMBRE FROM
B_EMPLEADOS E
WHERE EXISTS (SELECT 'X'
FROM B_EMPLEADOS
WHERE CEDULA_JEFE = E.CEDULA);
Facultad Politécnica Base de Datos II 32
EXISTS vs IN
SELECT CEDULA, NOMBRE FROM
B_EMPLEADOS E
WHERE EXISTS (SELECT 'X'
FROM B_EMPLEADOS
WHERE CEDULA_JEFE = E.CEDULA);
Tomando el mismo ejemplo: Seleccionar todos los empleados que tienen al
menos un empleado que depende de él (Es decir, que son jefes):
SELECT CEDULA, NOMBRE FROM
B_EMPLEADOS E
WHERE CEDULA IN (SELECT CEDULA_JEFE
FROM B_EMPLEADOS);
Si bien generan el mismo resultado, se procesan de modo diferente. EXISTS
puede ser más eficiente si el Subquery tien muchos datos.
Facultad Politécnica Base de Datos II 33
NOT EXISTS vs NOT IN
SELECT CEDULA, NOMBRE FROM
B_EMPLEADOS E
WHERE NOT EXISTS (SELECT 'X'
FROM B_EMPLEADOS
WHERE CEDULA_JEFE = E.CEDULA);
Aunque pareciera que son equivalents puede que no generen el mismo
resultado.
Ej: Ver todos los empleados que no son jefes.
SELECT CEDULA, NOMBRE FROM
B_EMPLEADOS E
WHERE CEDULA NOT IN (SELECT CEDULA_JEFE
FROM B_EMPLEADOS);
Verifique el resultado, debido a la presencia de valores NULL en el subquery!
Facultad Politécnica Base de Datos II 34
INLINEVIEWS (Vistas Inlines)
 Un sub query en la cláusula FROM es llamada vista inline, ya
que el sub query representa virtualmente una vista.
SELECT lista_de_campos
FROM <subconsulta>;
SELECT CLIENTE, MONTO_VENTAS
FROM
(SELECT ID_CLIENTE CLIENTE, SUM(MONTO_TOTAL)
MONTO_VENTAS
FROM B_VENTAS
GROUP BY ID_CLIENTE) V
/
Facultad Politécnica Base de Datos II 35
Uso de la cláusula WITH
 Mediante la cláusula WITH, puede definir un bloque de consulta
antes de utilizarlo en una consulta. La cláusula WITH (conocida
formalmente como subquery_factoring_clause) le permite
reutilizar el mismo bloque de consulta en una sentencia SELECT
cuando se produce más de una vez dentro de una consulta
compleja.
 Esto resulta particularmente útil cuando una consulta tiene
muchas referencias al mismo bloque de consulta y hay presentes
uniones y agregaciones.
Ejemplo:Ver el id, nombre y cantidad del artículo más vendido
Facultad Politécnica Base de Datos II 36
Ejemplo sin la cláusula WITH
SELECT v.id_articulo, a.nombre, SUM(v.cantidad)
cantidad
FROM b_detalle_ventas v JOIN b_articulos a
ON a.id = v.id_articulo
GROUP BY v.id_articulo, a.nombre
HAVING SUM(v.cantidad) =
(SELECT MAX(v.cantidad) maximo
FROM
(SELECT v.id_articulo, a.nombre, SUM(v.cantidad)
cantidad
FROM b_detalle_ventas v JOIN b_articulos a
ON a.id = v.id_articulo
GROUP BY v.id_articulo, a.nombre) v);
Facultad Politécnica Base de Datos II 37
Ejemplo con el uso de la cláusula
WITH
WITH sum_ven AS
(SELECT v.id_articulo, a.nombre, SUM(v.cantidad)
cantidad
FROM b_detalle_ventas v JOIN b_articulos a
ON a.id = v.id_articulo
GROUP BY v.id_articulo, a.nombre)
SELECT v.id_articulo, v.nombre, v.cantidad
FROM sum_ven v
WHERE v.cantidad =
(SELECT MAX(v.cantidad) maximo
FROM sum_ven v);
Facultad Politécnica Base de Datos II 38
QUERIES JERÁRQUICOS
Si la tabla contiene datos organizados
jerárquicamente, es posible recuperar los datos en
orden jerárquico utilizando la cláusula
jerárquica:
START WITH <condición>
CONNECT BY <condición>
Facultad Politécnica Base de Datos II 39
La cláusula jerárquica
 Permite listar los datos reflejando la ramificación de
los datos cuando éstos están estructurados en
orden jerárquico
 El primer elemento de una jerarquía se llama nodo
raíz. Las ramificaciones son nodos, y el último
elemento de una ramificación es la hoja.
 La cláusula START WITH especifica la fila raíz de la
jerarquía
 La cláusula CONNECT BY es la que permite fijar la
relación de dependencia entre las filas ‘padres’ y las
filas ‘hijas’ dentro de la jerarquía
 PRIOR se refiere al sentido del recorrido
Ejemplo de Estructura de árbol en la
tabla b_cuentas
Codigo_cta = 1000000 ACTIVO (padre)
1100000 Activo Corriente 1200000 Activo Fijo 1300000 Inventario de
Mercaderías
1110000
Caja
1120000
Bancos
1130000
Cuentas por cobrar
Recuerde:
 El recorrido del árbol (Top Down o Bottom Up)
depende de la cláusula PRIOR:
Ver la cuenta de ACTIVO (1000000) y las que dependen de ella
SELECT codigo_cta,nombre_cta
FROM b_cuentas
start with codigo_cta = 1000000
connect BY PRIOR codigo_cta =
cta_superior;
Ver las cuentas superiores a la cuenta 1130000:
SELECT codigo_cta,nombre_cta
FROM b_cuentas
start with codigo_cta = 1130000
connect BY codigo_cta = PRIOR
cta_superior;
 Para mostrar la jerarquía en los datos
recuperados:
SELECT LPAD(' ',2*(LEVEL-1))||
TO_CHAR(codigo_cta,'0000000') codigo_cta,
nombre_cta
FROM b_cuentas
start with codigo_cta = 1000000
connect BY PRIOR codigo_cta = cta_superior;
CODIGO_CTA NOMBRE_CTA
-------------------- ----------------------------------------
1000000 ACTIVO
1100000 ACTIVO CORRIENTE
1110000 CAJA
1110100 CAJA CHICA
1120000 BANCOS
1120100 Cta. Cte. 386881 Banco ITAU
1120200 Cta.Cte. 504 Banco Nacional de Fomento
1130000 Cuentas por cobrar CLIENTES
1130100 Cadena Hiperseis
1130200 Supermercado STOCK
1130300 Supermercado Gran Vía
1200000 ACTIVO FIJO
1210000 Rodados
1220000 Inmuebles
1300000 INVENTARIO MERCADERIAS
1310000 MERCADERIAS

Más contenido relacionado

La actualidad más candente

Sql basico parte_i_
Sql basico parte_i_Sql basico parte_i_
Sql basico parte_i_Luis Jherry
 
Comandos mysql
Comandos mysqlComandos mysql
Comandos mysqlpolar
 
Combinacion de consultas y consultas multitablas
Combinacion de consultas y consultas multitablasCombinacion de consultas y consultas multitablas
Combinacion de consultas y consultas multitablasclaudia contreras
 
manejo de sentencias de manipulacion
manejo de sentencias de manipulacionmanejo de sentencias de manipulacion
manejo de sentencias de manipulacionSergio Perez
 
SQL-DDL
SQL-DDLSQL-DDL
SQL-DDLbdatos
 
Cuadro de sentencias con descripcion y ejemplo
Cuadro de sentencias con descripcion y ejemploCuadro de sentencias con descripcion y ejemplo
Cuadro de sentencias con descripcion y ejemploWilliam Sánchez
 
Bases de Datos Cap VI:SQL: SQL-Definición de datos
Bases de Datos Cap VI:SQL: SQL-Definición de datosBases de Datos Cap VI:SQL: SQL-Definición de datos
Bases de Datos Cap VI:SQL: SQL-Definición de datosVideoconferencias UTPL
 
Consultas sql 2014
Consultas sql 2014Consultas sql 2014
Consultas sql 2014Henry Cambal
 
Cuadro combinado filtrado microsoft access - todoexpertos.com
Cuadro combinado filtrado   microsoft access - todoexpertos.comCuadro combinado filtrado   microsoft access - todoexpertos.com
Cuadro combinado filtrado microsoft access - todoexpertos.comssuser3a82fb
 
SQL: DDL, DML y SQL
SQL: DDL, DML y SQLSQL: DDL, DML y SQL
SQL: DDL, DML y SQLCarmen Soler
 
Bdii 10 vistas_new
Bdii 10 vistas_newBdii 10 vistas_new
Bdii 10 vistas_newRody Paredes
 
Sql basico parte_i_
Sql basico parte_i_Sql basico parte_i_
Sql basico parte_i_Luis Jherry
 
Diccionario basico de programacion visual basic
Diccionario basico de programacion visual basicDiccionario basico de programacion visual basic
Diccionario basico de programacion visual basicIvan Ramirez Iglesias
 

La actualidad más candente (20)

Sql basico parte_i_
Sql basico parte_i_Sql basico parte_i_
Sql basico parte_i_
 
Comandos mysql
Comandos mysqlComandos mysql
Comandos mysql
 
Combinacion de consultas y consultas multitablas
Combinacion de consultas y consultas multitablasCombinacion de consultas y consultas multitablas
Combinacion de consultas y consultas multitablas
 
manejo de sentencias de manipulacion
manejo de sentencias de manipulacionmanejo de sentencias de manipulacion
manejo de sentencias de manipulacion
 
Sentencia select
Sentencia selectSentencia select
Sentencia select
 
SQL-DDL
SQL-DDLSQL-DDL
SQL-DDL
 
Cuadro de sentencias con descripcion y ejemplo
Cuadro de sentencias con descripcion y ejemploCuadro de sentencias con descripcion y ejemplo
Cuadro de sentencias con descripcion y ejemplo
 
Sentencia select
Sentencia selectSentencia select
Sentencia select
 
Bases de Datos Cap VI:SQL: SQL-Definición de datos
Bases de Datos Cap VI:SQL: SQL-Definición de datosBases de Datos Cap VI:SQL: SQL-Definición de datos
Bases de Datos Cap VI:SQL: SQL-Definición de datos
 
Filtros
FiltrosFiltros
Filtros
 
Sql básico - compendio
Sql básico  - compendioSql básico  - compendio
Sql básico - compendio
 
Alumno valoracion 1.2 de programacion
Alumno valoracion 1.2 de programacionAlumno valoracion 1.2 de programacion
Alumno valoracion 1.2 de programacion
 
Aprenda SQL Server
Aprenda SQL ServerAprenda SQL Server
Aprenda SQL Server
 
Consultas sql 2014
Consultas sql 2014Consultas sql 2014
Consultas sql 2014
 
Autorelleno
AutorellenoAutorelleno
Autorelleno
 
Cuadro combinado filtrado microsoft access - todoexpertos.com
Cuadro combinado filtrado   microsoft access - todoexpertos.comCuadro combinado filtrado   microsoft access - todoexpertos.com
Cuadro combinado filtrado microsoft access - todoexpertos.com
 
SQL: DDL, DML y SQL
SQL: DDL, DML y SQLSQL: DDL, DML y SQL
SQL: DDL, DML y SQL
 
Bdii 10 vistas_new
Bdii 10 vistas_newBdii 10 vistas_new
Bdii 10 vistas_new
 
Sql basico parte_i_
Sql basico parte_i_Sql basico parte_i_
Sql basico parte_i_
 
Diccionario basico de programacion visual basic
Diccionario basico de programacion visual basicDiccionario basico de programacion visual basic
Diccionario basico de programacion visual basic
 

Similar a Bdii 06 func_grupo_y_subconsultas

Similar a Bdii 06 func_grupo_y_subconsultas (20)

Plop
PlopPlop
Plop
 
Sub consultas
Sub consultasSub consultas
Sub consultas
 
8 Guía_Fundamentos de Base de Datos (2).docx
8 Guía_Fundamentos de Base de Datos (2).docx8 Guía_Fundamentos de Base de Datos (2).docx
8 Guía_Fundamentos de Base de Datos (2).docx
 
BD_L8_EXP_ROZIC_CAP9_SQL
BD_L8_EXP_ROZIC_CAP9_SQLBD_L8_EXP_ROZIC_CAP9_SQL
BD_L8_EXP_ROZIC_CAP9_SQL
 
Teoria sql
Teoria sqlTeoria sql
Teoria sql
 
Consultas condicionales en sq server
Consultas condicionales en sq serverConsultas condicionales en sq server
Consultas condicionales en sq server
 
Funciones sql
Funciones sqlFunciones sql
Funciones sql
 
Comandos mysql
Comandos mysqlComandos mysql
Comandos mysql
 
Guía 05. Consultas resumen con MySQL - José J Sánchez H
Guía 05. Consultas resumen con MySQL - José J Sánchez HGuía 05. Consultas resumen con MySQL - José J Sánchez H
Guía 05. Consultas resumen con MySQL - José J Sánchez H
 
Comandos en consola de mysql desde el portal
Comandos en consola de mysql desde el portalComandos en consola de mysql desde el portal
Comandos en consola de mysql desde el portal
 
comandos-mysql.pdf
comandos-mysql.pdfcomandos-mysql.pdf
comandos-mysql.pdf
 
Sql
SqlSql
Sql
 
MANEJO DE SENTENCIAS DE RECUPERACIÓN
MANEJO DE SENTENCIAS DE RECUPERACIÓNMANEJO DE SENTENCIAS DE RECUPERACIÓN
MANEJO DE SENTENCIAS DE RECUPERACIÓN
 
MANEJO DE SENTENCIAS DE RECUPERACIÓN
MANEJO DE SENTENCIAS DE RECUPERACIÓNMANEJO DE SENTENCIAS DE RECUPERACIÓN
MANEJO DE SENTENCIAS DE RECUPERACIÓN
 
Indices y Vistas.pptx
Indices y Vistas.pptxIndices y Vistas.pptx
Indices y Vistas.pptx
 
Anon manual sql
Anon   manual sqlAnon   manual sql
Anon manual sql
 
Expo
ExpoExpo
Expo
 
Curso SQL - Leccion 6
Curso SQL - Leccion 6Curso SQL - Leccion 6
Curso SQL - Leccion 6
 
2.1.1 consultas en sql
2.1.1 consultas en sql2.1.1 consultas en sql
2.1.1 consultas en sql
 
Consultas sql
Consultas sqlConsultas sql
Consultas sql
 

Más de Rody Paredes

Bdii 26 distribuidas
Bdii 26 distribuidasBdii 26 distribuidas
Bdii 26 distribuidasRody Paredes
 
Bd2 ejer02 joins y funciones_solucion
Bd2 ejer02 joins y funciones_solucionBd2 ejer02 joins y funciones_solucion
Bd2 ejer02 joins y funciones_solucionRody Paredes
 
Factura automática
Factura automáticaFactura automática
Factura automáticaRody Paredes
 

Más de Rody Paredes (6)

Bdii 26 distribuidas
Bdii 26 distribuidasBdii 26 distribuidas
Bdii 26 distribuidas
 
Bdii 09 ddl_new
Bdii 09 ddl_newBdii 09 ddl_new
Bdii 09 ddl_new
 
Bdii 04 sql
Bdii 04 sqlBdii 04 sql
Bdii 04 sql
 
Bd2 ejer02 joins y funciones_solucion
Bd2 ejer02 joins y funciones_solucionBd2 ejer02 joins y funciones_solucion
Bd2 ejer02 joins y funciones_solucion
 
Macros
MacrosMacros
Macros
 
Factura automática
Factura automáticaFactura automática
Factura automática
 

Último

Posiciones en el IDH global de EUA (1950-2024).pdf
Posiciones en el IDH global de EUA (1950-2024).pdfPosiciones en el IDH global de EUA (1950-2024).pdf
Posiciones en el IDH global de EUA (1950-2024).pdfJC Díaz Herrera
 
Las mujeres más ricas del mundo (2024).pdf
Las mujeres más ricas del mundo (2024).pdfLas mujeres más ricas del mundo (2024).pdf
Las mujeres más ricas del mundo (2024).pdfJC Díaz Herrera
 
presentacion de conjuntos para primaria.ppt
presentacion de conjuntos para primaria.pptpresentacion de conjuntos para primaria.ppt
presentacion de conjuntos para primaria.pptMelina Alama Visitacion
 
Las marcas automotrices con más ventas de vehículos (2024).pdf
Las marcas automotrices con más ventas de vehículos (2024).pdfLas marcas automotrices con más ventas de vehículos (2024).pdf
Las marcas automotrices con más ventas de vehículos (2024).pdfJC Díaz Herrera
 
Panorama Sociodemográfico de México 2020: GUANAJUATO
Panorama Sociodemográfico de México 2020: GUANAJUATOPanorama Sociodemográfico de México 2020: GUANAJUATO
Panorama Sociodemográfico de México 2020: GUANAJUATOJuan Carlos Fonseca Mata
 
INFORME DE EVALUACIÓN DE LOS REQUERIMIENTOS.pdf
INFORME DE EVALUACIÓN DE LOS REQUERIMIENTOS.pdfINFORME DE EVALUACIÓN DE LOS REQUERIMIENTOS.pdf
INFORME DE EVALUACIÓN DE LOS REQUERIMIENTOS.pdfMiguelGomez900779
 
Reservas de divisas y oro en México en sexenio de AMLO (2018-2024).pdf
Reservas de divisas y oro en México en sexenio de AMLO (2018-2024).pdfReservas de divisas y oro en México en sexenio de AMLO (2018-2024).pdf
Reservas de divisas y oro en México en sexenio de AMLO (2018-2024).pdfJC Díaz Herrera
 
llllllllllllllllllllllllllllllllllllllllllllllllllllllllll
llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll
llllllllllllllllllllllllllllllllllllllllllllllllllllllllllJulietaCarbajalOsis
 
INTRODUCCION-A-LOS-ALGORITMOS-BASICOS.pptx
INTRODUCCION-A-LOS-ALGORITMOS-BASICOS.pptxINTRODUCCION-A-LOS-ALGORITMOS-BASICOS.pptx
INTRODUCCION-A-LOS-ALGORITMOS-BASICOS.pptxJamesHerberthBacaTel
 
MÍNIMO COMÚN MÚLTIPLO, MÁXIMO COMÚN DIVISOR.pptx
MÍNIMO COMÚN MÚLTIPLO, MÁXIMO COMÚN DIVISOR.pptxMÍNIMO COMÚN MÚLTIPLO, MÁXIMO COMÚN DIVISOR.pptx
MÍNIMO COMÚN MÚLTIPLO, MÁXIMO COMÚN DIVISOR.pptxCristianCastro978067
 
CALENDARIZACIÓN ACTUALIZADA DEL 2024 alt.pdf
CALENDARIZACIÓN ACTUALIZADA DEL 2024 alt.pdfCALENDARIZACIÓN ACTUALIZADA DEL 2024 alt.pdf
CALENDARIZACIÓN ACTUALIZADA DEL 2024 alt.pdfPOULANDERSONDELGADOA2
 
Análisis de datos en acción: Optimizando el crecimiento de Cyclistic
Análisis de datos en acción: Optimizando el crecimiento de CyclisticAnálisis de datos en acción: Optimizando el crecimiento de Cyclistic
Análisis de datos en acción: Optimizando el crecimiento de CyclisticJamithGarcia1
 
AA CUADRO DE TEORIA DEL CASO. (1) (1).docx
AA CUADRO DE TEORIA DEL CASO. (1) (1).docxAA CUADRO DE TEORIA DEL CASO. (1) (1).docx
AA CUADRO DE TEORIA DEL CASO. (1) (1).docxLuisAngelYomonaYomon
 
Industria musical de EUA vs Industria musical Corea del Sur (2024).pdf
Industria musical de EUA vs Industria musical Corea del Sur (2024).pdfIndustria musical de EUA vs Industria musical Corea del Sur (2024).pdf
Industria musical de EUA vs Industria musical Corea del Sur (2024).pdfJC Díaz Herrera
 
PANTEÓN DE Paris en historia de la arquitectura
PANTEÓN DE Paris en historia de la arquitecturaPANTEÓN DE Paris en historia de la arquitectura
PANTEÓN DE Paris en historia de la arquitecturaRosaHurtado26
 
Qué es un Histograma estadístico teoria y problema
Qué es un Histograma estadístico teoria y problemaQué es un Histograma estadístico teoria y problema
Qué es un Histograma estadístico teoria y problemaJoellyAlejandraRodrg
 
Los más ricos administradores de fondo de cobertura (1968-2024).pdf
Los más ricos administradores de fondo de cobertura (1968-2024).pdfLos más ricos administradores de fondo de cobertura (1968-2024).pdf
Los más ricos administradores de fondo de cobertura (1968-2024).pdfJC Díaz Herrera
 
Las familias más ricas del sionismo en el siglo XXI.pdf
Las familias más ricas del sionismo en el siglo XXI.pdfLas familias más ricas del sionismo en el siglo XXI.pdf
Las familias más ricas del sionismo en el siglo XXI.pdfJC Díaz Herrera
 
Los idiomas más hablados en el mundo (2024).pdf
Los idiomas más hablados en el mundo  (2024).pdfLos idiomas más hablados en el mundo  (2024).pdf
Los idiomas más hablados en el mundo (2024).pdfJC Díaz Herrera
 
Cesar Vilchis Vieyra Cesar Vilchis Vieyra
Cesar Vilchis Vieyra  Cesar Vilchis VieyraCesar Vilchis Vieyra  Cesar Vilchis Vieyra
Cesar Vilchis Vieyra Cesar Vilchis Vieyraestudiantes2010
 

Último (20)

Posiciones en el IDH global de EUA (1950-2024).pdf
Posiciones en el IDH global de EUA (1950-2024).pdfPosiciones en el IDH global de EUA (1950-2024).pdf
Posiciones en el IDH global de EUA (1950-2024).pdf
 
Las mujeres más ricas del mundo (2024).pdf
Las mujeres más ricas del mundo (2024).pdfLas mujeres más ricas del mundo (2024).pdf
Las mujeres más ricas del mundo (2024).pdf
 
presentacion de conjuntos para primaria.ppt
presentacion de conjuntos para primaria.pptpresentacion de conjuntos para primaria.ppt
presentacion de conjuntos para primaria.ppt
 
Las marcas automotrices con más ventas de vehículos (2024).pdf
Las marcas automotrices con más ventas de vehículos (2024).pdfLas marcas automotrices con más ventas de vehículos (2024).pdf
Las marcas automotrices con más ventas de vehículos (2024).pdf
 
Panorama Sociodemográfico de México 2020: GUANAJUATO
Panorama Sociodemográfico de México 2020: GUANAJUATOPanorama Sociodemográfico de México 2020: GUANAJUATO
Panorama Sociodemográfico de México 2020: GUANAJUATO
 
INFORME DE EVALUACIÓN DE LOS REQUERIMIENTOS.pdf
INFORME DE EVALUACIÓN DE LOS REQUERIMIENTOS.pdfINFORME DE EVALUACIÓN DE LOS REQUERIMIENTOS.pdf
INFORME DE EVALUACIÓN DE LOS REQUERIMIENTOS.pdf
 
Reservas de divisas y oro en México en sexenio de AMLO (2018-2024).pdf
Reservas de divisas y oro en México en sexenio de AMLO (2018-2024).pdfReservas de divisas y oro en México en sexenio de AMLO (2018-2024).pdf
Reservas de divisas y oro en México en sexenio de AMLO (2018-2024).pdf
 
llllllllllllllllllllllllllllllllllllllllllllllllllllllllll
llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll
llllllllllllllllllllllllllllllllllllllllllllllllllllllllll
 
INTRODUCCION-A-LOS-ALGORITMOS-BASICOS.pptx
INTRODUCCION-A-LOS-ALGORITMOS-BASICOS.pptxINTRODUCCION-A-LOS-ALGORITMOS-BASICOS.pptx
INTRODUCCION-A-LOS-ALGORITMOS-BASICOS.pptx
 
MÍNIMO COMÚN MÚLTIPLO, MÁXIMO COMÚN DIVISOR.pptx
MÍNIMO COMÚN MÚLTIPLO, MÁXIMO COMÚN DIVISOR.pptxMÍNIMO COMÚN MÚLTIPLO, MÁXIMO COMÚN DIVISOR.pptx
MÍNIMO COMÚN MÚLTIPLO, MÁXIMO COMÚN DIVISOR.pptx
 
CALENDARIZACIÓN ACTUALIZADA DEL 2024 alt.pdf
CALENDARIZACIÓN ACTUALIZADA DEL 2024 alt.pdfCALENDARIZACIÓN ACTUALIZADA DEL 2024 alt.pdf
CALENDARIZACIÓN ACTUALIZADA DEL 2024 alt.pdf
 
Análisis de datos en acción: Optimizando el crecimiento de Cyclistic
Análisis de datos en acción: Optimizando el crecimiento de CyclisticAnálisis de datos en acción: Optimizando el crecimiento de Cyclistic
Análisis de datos en acción: Optimizando el crecimiento de Cyclistic
 
AA CUADRO DE TEORIA DEL CASO. (1) (1).docx
AA CUADRO DE TEORIA DEL CASO. (1) (1).docxAA CUADRO DE TEORIA DEL CASO. (1) (1).docx
AA CUADRO DE TEORIA DEL CASO. (1) (1).docx
 
Industria musical de EUA vs Industria musical Corea del Sur (2024).pdf
Industria musical de EUA vs Industria musical Corea del Sur (2024).pdfIndustria musical de EUA vs Industria musical Corea del Sur (2024).pdf
Industria musical de EUA vs Industria musical Corea del Sur (2024).pdf
 
PANTEÓN DE Paris en historia de la arquitectura
PANTEÓN DE Paris en historia de la arquitecturaPANTEÓN DE Paris en historia de la arquitectura
PANTEÓN DE Paris en historia de la arquitectura
 
Qué es un Histograma estadístico teoria y problema
Qué es un Histograma estadístico teoria y problemaQué es un Histograma estadístico teoria y problema
Qué es un Histograma estadístico teoria y problema
 
Los más ricos administradores de fondo de cobertura (1968-2024).pdf
Los más ricos administradores de fondo de cobertura (1968-2024).pdfLos más ricos administradores de fondo de cobertura (1968-2024).pdf
Los más ricos administradores de fondo de cobertura (1968-2024).pdf
 
Las familias más ricas del sionismo en el siglo XXI.pdf
Las familias más ricas del sionismo en el siglo XXI.pdfLas familias más ricas del sionismo en el siglo XXI.pdf
Las familias más ricas del sionismo en el siglo XXI.pdf
 
Los idiomas más hablados en el mundo (2024).pdf
Los idiomas más hablados en el mundo  (2024).pdfLos idiomas más hablados en el mundo  (2024).pdf
Los idiomas más hablados en el mundo (2024).pdf
 
Cesar Vilchis Vieyra Cesar Vilchis Vieyra
Cesar Vilchis Vieyra  Cesar Vilchis VieyraCesar Vilchis Vieyra  Cesar Vilchis Vieyra
Cesar Vilchis Vieyra Cesar Vilchis Vieyra
 

Bdii 06 func_grupo_y_subconsultas

  • 2. Facultad Politécnica Base de Datos II 2 Cláusula GROUP BY y HAVING Declaración de SELECT : Sintaxis  Las funciones de grupo operan sobre conjuntos de filas para dar un resultado por cada grupo  Las funciones de grupo pueden utilizarse tanto en la sentencia SELECT como en la sentencia HAVING.  GROUP BY divide filas en los grupos más pequeños.  HAVING restringe el resultado (condición) SELECT column, group_function FROM table [WHERE condition] [GROUP BY group_by_expression] [HAVING group_condition] [ORDER BY column];
  • 3. Facultad Politécnica Base de Datos II 3 Funciones de Grupo AVG (DISTINCT | ALL|n) Valor promedio de n, ignorando valores nulos COUNT (DISTINCT |ALL| expr|*) Nº de filas. Con * cuenta todas, incluyendo nulos MAX (DISTINCT | ALL| expr) Máximo valor de la expresión MIN (DISTINCT | ALL | expr) Mínimo valor de la expresión STDDEV (DISTINCT | ALL|n) Desviación estándar (ignora nulos) SUM (DISTINCT | ALL|n) Suma valores. Ignora nulos VARIANCE (DISTINCT | ALL|n) Varianza. Ignora nulos
  • 4. Facultad Politécnica Base de Datos II 4 Funciones de GRUPO • MAX y MIN pueden utilizarse para cualquier tipo de dato. SQL> SELECT MIN(apellido), MAX(apellido) 2 FROM b_personas 3 WHERE ES_CLIENTE = 'S'; SQL> SELECT SUM(MONTO_TOTAL), AVG(MONTO_TOTAL), 2 MIN(MONTO_TOTAL), MAX(MONTO_TOTAL) 3 FROM B_VENTAS 4* WHERE ID_CLIENTE = 2; • Se puede usar AVG y SUM con columnas que guardan datos numéricos exclusivamente.
  • 5. Facultad Politécnica Base de Datos II 5 Función COUNT : Ejemplos • COUNT (*) retorna el número de filas en una tabla. SQL> SELECT COUNT(*) 2 FROM b_posicion_actual 3 WHERE id_area = 12; SQL> SELECT COUNT(RUC) 2 FROM b_personas 3 WHERE ES_CLIENTE = 'S'; • COUNT(expr) retorna el número de filas no-nulas.
  • 6. Facultad Politécnica Base de Datos II 6 La cláusula GROUP BY Sintaxis • Divide filas en una tabla en los grupos más pequeños usando la cláusula GROUP BY. • La misma lista de columnas que se utilizan en la cláusula SELECT, deben ser utilizadas en la cláusula GROUP BY • Defina el orden predefinido usando ORDER BY. SELECT column, group_function FROM table [WHERE condition] [GROUP BY group_by_expression] [ORDER BY column];
  • 7. Facultad Politécnica Base de Datos II 7 Sin la cláusula GROUP BY ID APELLIDO ID_LOCALIDAD --- -------------- ------------ 5 BRIZUELA CUEVAS 12 6 ACHUCARRO 12 7 12 La localidad 12 se despliega tres veces porque está asignado a 3 clientes SQL> SELECT id, apellido, id_localidad 2 FROM b_personas 3 WHERE id_localidad = 12 4 AND es_cliente= 'S';
  • 8. Facultad Politécnica Base de Datos II 8 Con la cláusula GROUP BY Group By: despliega una línea de datos para cada grupo recuperado por la cláusula WHERE, y COUNT (*). En este caso corresponde al número de clientes de la localidad 12. SQL> SELECT id_localidad, count(*) Cantidad 2 FROM b_personas 3 WHERE id_localidad = 12 4 AND es_cliente= 'S' 5 GROUP BY id_localidad; ID_LOCALIDAD CANTIDAD ------------ -------- 12 3
  • 9. Facultad Politécnica Base de Datos II 9 GROUP BY : Ejemplos • Despliegue los diferentes tipos de personas y la cantidad por cada tipo SQL> SELECT tipo_persona, COUNT(*) Cantidad 2 FROM b_personas 3 GROUP BY tipo_persona; SQL> SELECT p.cod_categoria, COUNT(p.cedula) 2 FROM B_POSICION_ACTUAL p 3 WHERE fecha_fin IS NULL 4 GROUP BY p.Cod_Categoria; • Determine todas las categorías salariales ocupadas, la cantidad de empleados que poseen dichas categorías
  • 10. Facultad Politécnica Base de Datos II 10 SQL> SELECT p.cod_categoria CAT, COUNT(p.cedula) Cantid 2 FROM B_POSICION_ACTUAL p 3 WHERE fecha_fin IS NULL 4 GROUP BY p.Cod_Categoria 5 HAVING COUNT(p.cedula) > 1; Desplegando Grupos específicos usando la cláusula HAVING CAT CANTID --- -------- 42 2 43 2 48 2 49 2 56 3 66 2 La cláusula HAVING condiciona los grupos Sólo se despliegan aquellas categorías que tienen más de 1 empleado
  • 11. Facultad Politécnica Base de Datos II 11 La cláusula HAVING: Sintaxis Use la cláusula HAVING para restringir grupos.  Paso 1: Se agrupan filas.  Paso 2: Se aplica la función de grupo.  Paso 3: Se despliegan los grupos que cumplen con la condición del HAVING. SELECT column, group_function FROM table [WHERE condition] [GROUP BY group_by_expression] [HAVING group_condition] [ORDER BY column];
  • 12. Facultad Politécnica Base de Datos II 12 Errores que no deben cometerse: Todas las columnas citadas en el SELECT que sean parte de la función agregada DEBEN estar en la cláusula GROUP BY, pues de lo contrario, dará un mensaje de error La cláusula WHERE no puede utilizarse para condicionar grupos.
  • 13. Facultad Politécnica Base de Datos II 13 SUBQUERIES
  • 14. Facultad Politécnica Base de Datos II 14 • Una Subconsulta (subquery) es una sentencia SELECT ‘embebida’ en otra sentencia SQL. • Son muy útiles cuando se trata de seleccionar filas de una tabla con una condición que depende de la tabla en sí. • Se puede usar subqueries en SQL con las cláusulas:  WHERE (QUERY ANIDADO)  HAVING  FROM (INLINE VIEWS)  FROM (para seleccionar las filas en un sentencia CREATE o INSERT) LAS SUBCONSULTAS
  • 15. Facultad Politécnica Base de Datos II 15 Formato del Sub query SELECT Syntax SELECT... FROM... WHERE... Sintaxis de otro SELECT (SELECT... FROM... WHERE...) ; Query Principal Subquery
  • 16. Facultad Politécnica Base de Datos II 16 Ejemplo de la subconsulta: Seleccionar los empleados que tienen el mismo jefe que “Ferreira” B_EMPLEADOS B_EMPLEADOS Servidor APELLIDO CEDULA_JEFE Ferreira 952160 Moreno 952160 Gonzalez 952160 Caballero 952160 Balmaceda 952160 CEDULA_JEFE 952160
  • 17. Facultad Politécnica Base de Datos II 17 Ejemplo de la subconsulta SQL> SELECT NOMBRE, APELLIDO, CEDULA_JEFE FROM B_EMPLEADOS WHERE CEDULA_JEFE = (SELECT CEDULA_JEFE FROM B_EMPLEADOS WHERE UPPER(APELLIDO)= 'FERREIRA'); Seleccionar los empleados que tienen el mismo jefe que “Ferreira”
  • 18. Facultad Politécnica Base de Datos II 18 SINTAXIS DE LAS SUB CONSULTAS • El subquery se ejecuta una vez antes del Query principal. • El resultado del subquery es usado por el Query exterior principal. SELECT lista de columnas FROM tabla WHERE expresión Operador (SELECT lista de columnas FROM tabla);
  • 19. Facultad Politécnica Base de Datos II 19 Indicaciones para los subqueries:  La subconsulta debe aparecer entre paréntesis  Se pueden utilizar subconsultas con operadores de comparasión de una sola fila ( >, =, >=, <, <>, <= ) y de MÚLTIPLES FILAS ( IN, NOT IN).  La subconsulta debe aparecer en el lado derecho del operador  NO PUEDEN TENER la cláusula ORDER BY.
  • 20. Facultad Politécnica Base de Datos II 20 ¿Cómo se procesan las consultas anidadas? Query anidado Query Principal 1. La declaración SELECT anidada se ejecuta primero. 2. El resultado se pasa en la condición de pregunta principal. SELECT NOMBRE, APELLIDO, CEDULA_JEFE FROM B_EMPLEADOS WHERE CEDULA_JEFE = (SELECT CEDULA_JEFE FROM B_EMPLEADOS WHERE UPPER(APELLIDO)= 'FERREIRA') Retorna cedula_jefe= 952160
  • 21. Facultad Politécnica Base de Datos II 21 Consultas de una sola fila Escriba la declaración de SQL para desplegar el nombre y apellido del empleado. Ponga ambas declaraciones y deje que el SQL determine el valor de comparación SELECT CEDULA_JEFE FROM B_EMPLEADOS WHERE UPPER(APELLIDO)= 'FERREIRA' SELECT NOMBRE, APELLIDO, CEDULA_JEFE FROM B_EMPLEADOS WHERE CEDULA_JEFE = Escriba la consulta para averiguar el jefe de Ferreira SELECT NOMBRE, APELLIDO, CEDULA_JEFE FROM B_EMPLEADOS WHERE CEDULA_JEFE = (SELECT CEDULA_JEFE FROM B_EMPLEADOS WHERE UPPER(APELLIDO)= 'FERREIRA')
  • 22. Facultad Politécnica Base de Datos II 22 SQL> SELECT nombre, costo 2 FROM b_articulos 3 WHERE costo < (SELECT AVG(costo) 4 FROM b_articulos) 5 ORDER by costo DESC; Ejemplo de la utilización de funciones de grupo en la subconsulta Seleccionar el nombre y costo de los artículos cuyo costo está por debajo del promedio.
  • 23. Facultad Politécnica Base de Datos II 23 Utilización de funciones de grupo en una subconsulta NOMBRE COSTO Porta utensilios Cheff 59848 Mantel Cadence 140x250 52273 Almohada Plumi 50x70 Altenburg 52273 Florero 31x15cm 30227 Figura decorativa Buho 25758 Toalla Felpa Hilo Egipcio 18864 Bandeja redonda 12" 18864 Servido r AVG(COSTO) 72145,90625 Artículos cuyo costo está por debajo del promedio
  • 24. Subquery escalar Un subquery escalar es aquel que retorna exactamente una columna de una fila De allí que el subquery escalar puede utilizarse en expresiones tales como  DECODE y CASE  Todas las cláusulas de SELECT, con excepción de GROUP BY
  • 25. Ejemplo de uso de un subquery escalar en el CASE: select nombre_cta, (CASE WHEN id_tipo = (SELECT id FROM b_tipo_cuenta WHERE nombre_categoria =('ACTIVO')) THEN 'ACTIVO' ELSE 'Otra clasificación' END) Clasificación FROM b_cuentas;
  • 26. Facultad Politécnica Base de Datos II 26 Errores con Subqueries  Si se escribe un subquery que devuelve más de una fila y se usa un operador de comparación de fila, la sentencia dará error. SQL> SELECT nombre, apellido FROM b_personas WHERE id_localidad = (SELECT id FROM b_localidad WHERE UPPER(nombre) LIKE 'CAA%'); ERROR en línea 4: ORA-01427: la subconsulta de una sola fila devuelve más de una fila  Para corregir el error, cambie al operador de la comparación a IN, un operador de la fila múltiple.
  • 27. Facultad Politécnica Base de Datos II 27 Ejemplo de subconsultas que retornan múltiples filas  Un subquery de filas múltiples devuelve más de 1 fila.  Usted debe usar a un operador de la fila múltiple en la cláusula WHERE, por ejemplo el operador IN. SQL> SELECT nombre, apellido, id_localidad FROM b_personas WHERE id_localidad IN (SELECT id FROM b_localidad WHERE UPPER(nombre) LIKE 'CAA%');
  • 28. Facultad Politécnica Base de Datos II 28 Utilización de cláusula HAVING en una SUBCONSULTA • También se puede utilizar una subconsulta en la cláusula HAVING • Siempre se ejecuta primeramente la SUBCONSULTA y retorna el resultado a la cláusula HAVING de la consulta principal SQL> SELECT CEDULA_VENDEDOR, AVG(MONTO_TOTAL)COSTO FROM B_VENTAS GROUP BY CEDULA_VENDEDOR HAVING AVG(MONTO_TOTAL) < (SELECT AVG(MONTO_TOTAL) FROM B_VENTAS);
  • 29. Facultad Politécnica Base de Datos II 29 Subqueries con múltiples columnas Se pueden comparar más de una columna, para ello la sintaxis es la siguiente: SELECT columna, columna, ... FROM tabla WHERE (columna, columna, ...) IN (SELECT columna, columna, ... FROM tabla WHERE condición)
  • 30. Consultas correlacionadas  Un subquery correlacionado es aquel que contiene una referencia a una tabla que aparece el query exterior (query principal). La sintaxis es la siguiente: SELECT columna1, columna2, ... FROM tabla1 alias_tab1 WHERE columna1 <operador> (SELECT columna1 FROM tabla2 WHERE expresion1 = alias_tab1.expresion2);
  • 31. Facultad Politécnica Base de Datos II 31 Uso del operador EXISTS en consultas correlacionadas  El operador EXISTS verifica la existencia de filas en el conjunto resultante del subquery  Si se encuentra la fila, la búsqueda ya no continúa y se retorna TRUE.  Ejemplo: Seleccionar todos los empleados que tienen al menos un empleado que depende de él SELECT CEDULA, NOMBRE FROM B_EMPLEADOS E WHERE EXISTS (SELECT 'X' FROM B_EMPLEADOS WHERE CEDULA_JEFE = E.CEDULA);
  • 32. Facultad Politécnica Base de Datos II 32 EXISTS vs IN SELECT CEDULA, NOMBRE FROM B_EMPLEADOS E WHERE EXISTS (SELECT 'X' FROM B_EMPLEADOS WHERE CEDULA_JEFE = E.CEDULA); Tomando el mismo ejemplo: Seleccionar todos los empleados que tienen al menos un empleado que depende de él (Es decir, que son jefes): SELECT CEDULA, NOMBRE FROM B_EMPLEADOS E WHERE CEDULA IN (SELECT CEDULA_JEFE FROM B_EMPLEADOS); Si bien generan el mismo resultado, se procesan de modo diferente. EXISTS puede ser más eficiente si el Subquery tien muchos datos.
  • 33. Facultad Politécnica Base de Datos II 33 NOT EXISTS vs NOT IN SELECT CEDULA, NOMBRE FROM B_EMPLEADOS E WHERE NOT EXISTS (SELECT 'X' FROM B_EMPLEADOS WHERE CEDULA_JEFE = E.CEDULA); Aunque pareciera que son equivalents puede que no generen el mismo resultado. Ej: Ver todos los empleados que no son jefes. SELECT CEDULA, NOMBRE FROM B_EMPLEADOS E WHERE CEDULA NOT IN (SELECT CEDULA_JEFE FROM B_EMPLEADOS); Verifique el resultado, debido a la presencia de valores NULL en el subquery!
  • 34. Facultad Politécnica Base de Datos II 34 INLINEVIEWS (Vistas Inlines)  Un sub query en la cláusula FROM es llamada vista inline, ya que el sub query representa virtualmente una vista. SELECT lista_de_campos FROM <subconsulta>; SELECT CLIENTE, MONTO_VENTAS FROM (SELECT ID_CLIENTE CLIENTE, SUM(MONTO_TOTAL) MONTO_VENTAS FROM B_VENTAS GROUP BY ID_CLIENTE) V /
  • 35. Facultad Politécnica Base de Datos II 35 Uso de la cláusula WITH  Mediante la cláusula WITH, puede definir un bloque de consulta antes de utilizarlo en una consulta. La cláusula WITH (conocida formalmente como subquery_factoring_clause) le permite reutilizar el mismo bloque de consulta en una sentencia SELECT cuando se produce más de una vez dentro de una consulta compleja.  Esto resulta particularmente útil cuando una consulta tiene muchas referencias al mismo bloque de consulta y hay presentes uniones y agregaciones. Ejemplo:Ver el id, nombre y cantidad del artículo más vendido
  • 36. Facultad Politécnica Base de Datos II 36 Ejemplo sin la cláusula WITH SELECT v.id_articulo, a.nombre, SUM(v.cantidad) cantidad FROM b_detalle_ventas v JOIN b_articulos a ON a.id = v.id_articulo GROUP BY v.id_articulo, a.nombre HAVING SUM(v.cantidad) = (SELECT MAX(v.cantidad) maximo FROM (SELECT v.id_articulo, a.nombre, SUM(v.cantidad) cantidad FROM b_detalle_ventas v JOIN b_articulos a ON a.id = v.id_articulo GROUP BY v.id_articulo, a.nombre) v);
  • 37. Facultad Politécnica Base de Datos II 37 Ejemplo con el uso de la cláusula WITH WITH sum_ven AS (SELECT v.id_articulo, a.nombre, SUM(v.cantidad) cantidad FROM b_detalle_ventas v JOIN b_articulos a ON a.id = v.id_articulo GROUP BY v.id_articulo, a.nombre) SELECT v.id_articulo, v.nombre, v.cantidad FROM sum_ven v WHERE v.cantidad = (SELECT MAX(v.cantidad) maximo FROM sum_ven v);
  • 38. Facultad Politécnica Base de Datos II 38 QUERIES JERÁRQUICOS Si la tabla contiene datos organizados jerárquicamente, es posible recuperar los datos en orden jerárquico utilizando la cláusula jerárquica: START WITH <condición> CONNECT BY <condición>
  • 39. Facultad Politécnica Base de Datos II 39 La cláusula jerárquica  Permite listar los datos reflejando la ramificación de los datos cuando éstos están estructurados en orden jerárquico  El primer elemento de una jerarquía se llama nodo raíz. Las ramificaciones son nodos, y el último elemento de una ramificación es la hoja.  La cláusula START WITH especifica la fila raíz de la jerarquía  La cláusula CONNECT BY es la que permite fijar la relación de dependencia entre las filas ‘padres’ y las filas ‘hijas’ dentro de la jerarquía  PRIOR se refiere al sentido del recorrido
  • 40. Ejemplo de Estructura de árbol en la tabla b_cuentas Codigo_cta = 1000000 ACTIVO (padre) 1100000 Activo Corriente 1200000 Activo Fijo 1300000 Inventario de Mercaderías 1110000 Caja 1120000 Bancos 1130000 Cuentas por cobrar
  • 41. Recuerde:  El recorrido del árbol (Top Down o Bottom Up) depende de la cláusula PRIOR: Ver la cuenta de ACTIVO (1000000) y las que dependen de ella SELECT codigo_cta,nombre_cta FROM b_cuentas start with codigo_cta = 1000000 connect BY PRIOR codigo_cta = cta_superior; Ver las cuentas superiores a la cuenta 1130000: SELECT codigo_cta,nombre_cta FROM b_cuentas start with codigo_cta = 1130000 connect BY codigo_cta = PRIOR cta_superior;
  • 42.  Para mostrar la jerarquía en los datos recuperados: SELECT LPAD(' ',2*(LEVEL-1))|| TO_CHAR(codigo_cta,'0000000') codigo_cta, nombre_cta FROM b_cuentas start with codigo_cta = 1000000 connect BY PRIOR codigo_cta = cta_superior; CODIGO_CTA NOMBRE_CTA -------------------- ---------------------------------------- 1000000 ACTIVO 1100000 ACTIVO CORRIENTE 1110000 CAJA 1110100 CAJA CHICA 1120000 BANCOS 1120100 Cta. Cte. 386881 Banco ITAU 1120200 Cta.Cte. 504 Banco Nacional de Fomento 1130000 Cuentas por cobrar CLIENTES 1130100 Cadena Hiperseis 1130200 Supermercado STOCK 1130300 Supermercado Gran V├¡a 1200000 ACTIVO FIJO 1210000 Rodados 1220000 Inmuebles 1300000 INVENTARIO MERCADERIAS 1310000 MERCADERIAS