SlideShare una empresa de Scribd logo
1 de 24
– Curso de

SQL Aplicado

Del Diccionario de Datos de Oracle
1. De las tablas de: Todos los Usuarios y todas las tablas, mostrar:
a.Nombre de usuario.
b.Fecha en que fue creado el usuario
c.Cantidad de tablas por usuario.
En este query usted deberá ordenar descendente por:
a.nombre de usuario.

select usuarios.username
Usuario,
usuarios.created
Creado_el,
count(tablas.table_name) Cantidad_tablas_usuario
from all_users usuarios
inner join all_tables tablas
on usuarios.username = tablas.owner
group by usuarios.username,
usuarios.created
order by usuarios.username desc;

2. De la tablas de: Todas las tablas, Todos los índices, todos los campos del índice se necesita:
[Todas las Tablas]

Nombe de la tabla
Table Space Name
[Todos los índices]
Index Name
Index Type
Status
[Todos los campos del índice] Column Name
Column Position

select tablas.table_name
Nombre_tabla,
tablas.tablespace_name
Table_Space,
indices.index_name
Nombre_indice,
indices.index_type
Tipo_de_indice,
indices.status
Estatus_del_indice,
columnas_indice.column_name
Columna_en_indice,
columnas_indice.column_position Posicion_columna_indice
from all_tables
tablas
inner join all_indexes
indices
on tablas.table_name = indices.table_name
inner join all_ind_columns columnas_indice
on tablas.table_name = columnas_indice.table_name
and indices.table_name = columnas_indice.table_name;

3. De las tablas de: Todos los Constrainst y todos los campos de los constraints:
[Todos los Constraints]

Constraint Name
Constraint Type

[Todos los campos del Constraint] Constraint Name

select constraints.constraint_name
constraints.constraint_type
columnas_constraints.constraint_name
from all_constraints constraints

Nombre_constraint,
Tipo_constraint,
Nombre_constraint_campos
– Curso de

SQL Aplicado

inner join all_cons_columns columnas_constraints
on constraints.constraint_name = columnas_constraints.constraint_name

4. Con el uso de outer join cree una consulta que retorne todas las tablas que no tienen
constraints.
a. De todas las tablas y todos los comentarios de tablas:
[Todas las Tablas]
Nombe de la tabla
Table Space Name
[Todos los comentarios de tablas] Comments
(all_tables, all_tab_comments)
select tablas.table_name
Nombre_tabla,
tablas.tablespace_name
Table_space,
comentarios_tabla.comments Comentarios_tabla
from all_tables tablas
left outer join all_tab_comments comentarios_tabla
on tablas.table_name = comentarios_tabla.table_name

b. Con right outer join de todas las tablas y todos los comentarios de tablas muestre los campos que se le solicitan y en este
caso de aquellas tablas que no tienen comentario:
[Todas las Tablas]
Nombe de la tabla
Table Space Name
[Todos los comentarios de tablas] Comments
(all_tables, all_tab_comments)
select tablas.table_name
Nombre_tabla,
tablas.tablespace_name
Table_space,
comentarios_tabla.comments Comentarios_tabla
from all_tables tablas
right outer join all_tab_comments comentarios_tabla
on tablas.table_name = comentarios_tabla.table_name
where comentarios_tabla.comments is null

c. De una unión de todas las tablas y todos los índices, demuestre:
a.Nombre de la tabla.
b.Cantidad de Indices.
select tablas.table_name
Nombre_tabla,
count(indices.index_name) Cantidad_indices
from all_indexes indices
inner join all_tables tablas
on indices.table_name = tablas.table_name
group by tablas.table_name

5. Del query 1: "De las tablas de: Todos los Usuarios y todas las tablas" con un filtro que retorne
las tablas creadas a partir del 15 de diciembre del 2013.
select usuarios.username
Usuario,
usuarios.created
Creado_el,
count(tablas.table_name) Cantidad_tablas_usuario
from all_users usuarios
inner join all_tables tablas
– Curso de

SQL Aplicado

on
inner join
on
where
and
group by

usuarios.username = tablas.owner
all_objects objetos
tablas.table_name = objetos.object_name
objetos.object_type = 'TABLE'
objetos.created
> to_date('15122013','ddmmyyyy')
usuarios.username,
usuarios.created
order by usuarios.username desc;

6. De todos los campos de las tablas, todos los campos de constraints y todos los constraints:
[Todos los campos]

owner,
table_name,
column_id,
column_name,
data_type,
data_length,
data_precision,
data_scale,
nullable,
data_default

[Todos los campos de constraints] constraint_name {emplee left outer join sobre table_name y column_name, es decir
que no importa que no tenga columnas con constraint}
[Todos los constraints]
constraint_type, {emplee left outer join sobre constraint_name de all_cons_columns y
all_constraints es decir que no importa que no exista constraint}
search_condition,
index_name

select campos.owner,
campos.table_name,
campos.column_id,
campos.column_name,
campos.data_type,
campos.data_length,
campos.data_precision,
campos.data_scale,
campos.nullable,
campos.data_default,
campos_constraints.constraint_name,
constraints.constraint_type,
constraints.search_condition,
constraints.index_name
from all_tab_columns campos
left outer join all_cons_columns campos_constraints
on campos.table_name
= campos_constraints.table_name
and campos.column_name
= campos_constraints.column_name
left outer join all_constraints constraints
on campos_constraints.constraint_name = constraints.constraint_name
order by campos.column_id

7. Del query 6 "De todos los campos de las tablas, todos los campos de constraints y todos los
constraints" todos aquellos campos que constraints que contengan la letra 'P'

select campos.owner,
– Curso de

SQL Aplicado

campos.table_name,
campos.column_id,
campos.column_name,
campos.data_type,
campos.data_length,
campos.data_precision,
campos.data_scale,
campos.nullable,
campos.data_default,
campos_constraints.constraint_name,
constraints.constraint_type,
constraints.search_condition,
constraints.index_name
from all_tab_columns campos
left outer join all_cons_columns campos_constraints
on campos.table_name
= campos_constraints.table_name
and campos.column_name
= campos_constraints.column_name
left outer join all_constraints constraints
on campos_constraints.constraint_name = constraints.constraint_name
where campos_constraints.column_name
like '%P%'
order by campos.column_id

8. De la tabla de todos los objetos (all_objects) aquellos registros en donde el campo
object_type = 'TABLE'

select objetos.*
from all_objects objetos
where objetos.object_type = 'TABLE';

9. De la tabla de todos los objetos desplegar object_type con un conteo por el valor de ese
campo agrupado por ese campo y ordenado por ese mismo campo.
select objetos.object_type
Tipo_de_Objeto,
count(objetos.object_name) Cantidad_objeto
from all_objects objetos
group by objetos.object_type
order by objetos.object_type;

10. Del query anterior 9: "De la tabla de todos los objetos desplegar object_type con un
conteo..." en donde la fecha created es mayor que el 10 de diciembre del 2013.
select objetos.object_type
Tipo_de_Objeto,
count(objetos.object_name) Cantidad_objeto
from all_objects objetos
where objetos.created > to_date('10122013','ddmmyyyy')
group by objetos.object_type
order by objetos.object_type

11. De la tabla de todos los constraints, desplegar aquellas tablas que tienen más de dos (2)
constraint {se espera el uso de count, group by y having}
select constraints.table_name
nombre_tabla,
count(constraints.constraint_name) cantidad_constraints
from all_constraints constraints
group by constraints.table_name
having count(constraints.constraint_name) > 2
– Curso de

SQL Aplicado

12. De la tabla de todas las vistas (all_views) aquellas vistas cuyo nombre contienen la palabra
CLIE o la palabra FACT o la palabra TIPO {se espera el uso de like y or}.
select
from
where
or
or

vistas.view_name
all_views vistas
vistas.view_name like '%CLIE%'
vistas.view_name like '%FACT%'
vistas.view_name like '%TIPO%';

13. De la tabla de todas las secuencias (all_sequences) aquellas cuyo minvalue están en los
valores 20, 100, 1000 y 500. {Se espera el uso de IN}
select secuencias.*
from all_sequences secuencias
where secuencias.min_value in (20,100, 1000,500)

14. De la tabla de todos los objetos el campo object_type sus distintos valores cuando el
object_type no contiene en su nombre las letras: EDI, SEQ, SCHE, PROC. {Se espera el uso de
distinct y not like}.
select
from
where
and
and
and

distinct object_type
all_objects
object_type not like
object_type not like
object_type not like
object_type not like

'%EDI%'
'%SEQ%'
'%SCHE%'
'%PROC%'

15. De todos los objetos, el nombre del objeto, la fecha de creación, para los objetos tipo Vista y
cuya fecha de creación está entre el primero y el quince de diciembre del 2013. {Se espera el uso
de to_date() y betwen}
select objetos.object_name Nombre_objeto,
objetos.created
Creado_el
from all_objects objetos
where objetos.object_type = 'VIEW'
and objetos.created
between to_date('01122013','ddmmyyyy') and
to_date('15122013','ddmmyyyy')

16. De la tabla de todos los objetos: el tipo de objeto, la fecha de creación y un conteo por día.
Cuando los objetos han sido creados entre el 02 y el 29 de diciembre del 2013, ordenada la
información por tipo de objeto y fecha.
select objetos.object_type
Tipo_objeto,
trunc(objetos.created)
Creado_el,
count(objetos.object_name) Cantidad_objetos
from all_objects objetos
where objetos.created
between to_date('02122013','ddmmyyyy') and
to_date('29122013','ddmmyyyy')
group by objetos.object_type,
trunc(objetos.created)
order by objetos.object_type,
trunc(objetos.created)
– Curso de

SQL Aplicado

17. De la tabla de todas las tablas el nombre de ellas cuyas primeras tres letras no son TBL. {Se
espera el uso de substr y != o <>}.
select tablas.table_name Nombre_tabla
from all_tables tablas
where substr(tablas.table_name, 1,3) != 'TBL'

18. Del query anterior 17, cuyas primeras tres letras no estén entre: TBL, TCG,TES.
select tablas.table_name Nombre_tabla
from all_tables tablas
where substr(tablas.table_name, 1,3) not in ('TBL', 'TCG','TES')

19. De la tabla de todos los campos por tabla, aquellas tablas que tienen más de 20 campos.
select campos_tablas.table_name
Nombre_tabla,
count(campos_tablas.column_name) Cantidad_campos
from all_tab_columns campos_tablas
group by campos_tablas.table_name
having count(campos_tablas.column_name) > 20

20. De la tabla de todos los índices los distintos valores del campo index_type.
select distinct indices.index_type tipo_indice
from all_indexes indices

21. De la tabla de todos los objetos, el nombre y tipo de objeto cuyo año de creación es 2010.
select objetos.object_type tipo_objeto,
objetos.object_name nombre_objeto
from all_objects objetos
where to_char(objetos.created,'yyyy') = '2010';

22. De la tabla de todos los constraints aquellos cuyo tipo es: P.
select constraints.constraint_name
from all_constraints constraints
where constraints.constraint_type = 'P';

23. De la tabla de todos los constraints aquellos cuyo tipo es P, el propietario es igual al usuario
que está realizando el query y el estatus es distinto de ENABLED.
select
from
where
and
and

constraints.constraint_name
all_constraints constraints
constraints.constraint_type = 'P'
constraints.owner
= user
constraints.status
= 'ENABLED'

24. De todas las tablas el nombre de ellas con la primer letra en mayúsculas.
select initcap(tablas.table_name)

nombre_tabla
– Curso de

SQL Aplicado

from all_tables tablas

25. De todos los objetos de la base de datos, aquellos cuyo campo last_ddl_time es mayor a la
fecha 10/12/2013.
select objetos.object_name Nombre_del_objeto
from all_objects objetos
where objetos.last_ddl_time > to_date('10122013','ddmmyyyy')

De tablas del curso

26. Tabla de clientes con su estatus, desplegando identificador de cliente, nombre completo en
un solo campo, identificador de estatus del cliente y leyenda del estatus del cliente.

select cliente.id_cliente,
cliente.primer_nombre||' '||cliente.segundo_nombre||' '||cliente.tercer_nombre||'
'||cliente.primer_apellido||' '||cliente.segundo_apellido Nombre_completo,
cliente.id_estatus,
estatus.leyenda_estatus Estatus_Cliente
from tbl_maestra_cliente cliente
inner join tbl_maestra_estatus estatus
on cliente.id_estatus = estatus.id_estatus

27. De clientes, su identificador, identificador de tipo de cliente y leyenda de tipo de cliente.
select cliente.id_cliente,
cliente.id_tipo_cliente,
tipo_cliente.leyenda_tipo_cliente Tipo_cliente
from tbl_maestra_cliente
cliente
inner join tbl_maestra_tipo_cliente tipo_cliente
on cliente.id_tipo_cliente = tipo_cliente.id_tipo_cliente

28. De clientes, su identificador, nombres separado todo, identificador de serie de factura y
serie asociada al cliente.

select cliente.id_cliente,
cliente.id_serie_factura,
series.serie Serie_factura
from tbl_maestra_cliente
cliente
inner join tbl_maestra_serie_factura series
on cliente.id_serie_factura = series.id_serie_factura
– Curso de

SQL Aplicado

29. De cliente, su identificador, su nombre completo todo junto, su identificador de estatus,
leyenda de estatus, identificador de tipo de cliente, leyenda de tipo de cliente, identificador de
serie de factura asociado al cliente, serie de factura asociado.

select cliente.id_cliente,
cliente.primer_nombre||' '||cliente.segundo_nombre||' '||cliente.tercer_nombre||'
'||cliente.primer_apellido||' '||cliente.segundo_apellido Nombre_completo,
cliente.id_estatus,
estatus.leyenda_estatus Estatus_Cliente,
cliente.id_tipo_cliente,
tipo_cliente.leyenda_tipo_cliente Tipo_cliente,
cliente.id_serie_factura,
series.serie Serie_factura
from tbl_maestra_cliente cliente
inner join tbl_maestra_estatus estatus
on cliente.id_estatus = estatus.id_estatus
inner join tbl_maestra_tipo_cliente tipo_cliente
on cliente.id_tipo_cliente = tipo_cliente.id_tipo_cliente
inner join tbl_maestra_serie_factura series
on cliente.id_serie_factura = series.id_serie_factura

30. De cliente y datos de facturación, identificador de cliente, nombres del cliente de la maestra,
nombres separado todo, nit, para ese cliente si posee datos distintos de factura, demostrar
nombres facturables, nit y dirección.
select cliente.id_cliente,
cliente.primer_nombre,
cliente.segundo_nombre,
cliente.tercer_nombre,
cliente.primer_apellido,
cliente.segundo_apellido,
cliente.nit,
datos_factura.primer_nombre
Primer_nombre_factura,
datos_factura.segundo_nombre
Segundo_nombre_factura ,
datos_factura.tercer_nombre
Tercer_nombre_factura,
datos_factura.primer_apellido
Primer_apellido_factura,
datos_factura.segundo_apellido segundo_apellido_factura,
datos_factura.nit
nit_factura,
datos_factura.direccion
direccion_factura
from tbl_maestra_cliente cliente
left outer join tbl_cliente_factura datos_factura
on cliente.id_cliente = datos_factura.id_cliente

31. Del cliente y sus facturas, id de cliente, nombre del cliente todo junto, datos completos de la
tabla de factura, asociando el estatus de la factura y demostrando la leyenda del estatus de la
factura.
select cliente.id_cliente,
cliente.primer_nombre||' '||cliente.segundo_nombre||' '||cliente.tercer_nombre||'
'||cliente.primer_apellido||' '||cliente.segundo_apellido Nombre_completo,
factura.*,
estatus_factura.leyenda_estatus Estatus_factura
from tbl_maestra_cliente cliente
inner join tbl_maestra_facturas factura
on cliente.id_cliente = factura.id_cliente
inner join tbl_maestra_estatus estatus_factura
on factura.id_estatus = estatus_factura.id_estatus

32. De facturas y su estatus, identificador de factura, fechas relacionadas a la factura y su
estatus.
– Curso de

SQL Aplicado

select facturas.id_factura,
facturas.fecha_creacion,
facturas.fecha_emision,
facturas.fecha_vencimiento,
facturas.fecha_inicia_ciclo,
facturas.fecha_finaliza_ciclo,
facturas.id_estatus,
estatus.leyenda_estatus estatus_factura
from tbl_maestra_facturas facturas
inner join tbl_maestra_estatus estatus
on facturas.id_estatus = estatus.id_estatus

33. Del cliente y su cuenta corriente, identificador del cliente, nombre todo separado y todos los
datos de la cuenta corriente.
select cliente.id_cliente,
cliente.primer_nombre,
cliente.segundo_nombre,
cliente.tercer_nombre,
cliente.primer_apellido,
cliente.segundo_apellido,
cuenta_corriente.*
from tbl_maestra_cliente cliente
inner join tbl_cuenta_corriente cuenta_corriente
on cliente.id_cliente = cuenta_corriente.id_cliente

34. De la factura y sus pagos, identificador de la factura y todos los datos de los pagos.
select facturas.id_factura,
pagos.*
from tbl_maestra_facturas
facturas
left outer join tbl_maestra_pagos_factura pagos
on facturas.id_cliente = pagos.id_cliente
and facturas.id_factura = pagos.id_factura

35. De los pagos y su estatus, demostrando identificador de pago, identificador de factura,
monto del pago, identificador del estatus del pago y leyenda del estatus del pago.
select pagos.id_pago,
pagos.id_estatus,
pagos.id_factura,
pagos.monto_pago,
pagos.id_estatus,
estatus.leyenda_estatus estatus_pago
from tbl_maestra_pagos_factura pagos
inner join tbl_maestra_estatus
estatus
on pagos.id_estatus = estatus.id_estatus

36. De los ajustes y su estatus, demostrando identificador de ajuste, identificador de factura,
monto del ajuste, identificador del estatus del ajuste y leyenda del estatus del ajuste.
select ajustes.id_ajuste,
ajustes.id_estatus,
ajustes.id_factura,
ajustes.monto_pago,
ajustes.id_estatus,
estatus.leyenda_estatus estatus_pago
from tbl_maestra_ajustes_factura ajustes
inner join tbl_maestra_estatus
estatus
on ajustes.id_estatus = estatus.id_estatus
– Curso de

SQL Aplicado

37. De la factura, sus pagos y sus ajustes, con estatus de pagos y ajustes, demostrando datos
importantes según usted considere.
select facturas.id_factura,
facturas.id_cliente,
facturas.fecha_vencimiento,
pagos.*,
ajustes.*
from tbl_maestra_facturas
facturas
left outer join tbl_maestra_pagos_factura pagos
on facturas.id_cliente = pagos.id_cliente
and facturas.id_factura = pagos.id_factura
left outer join tbl_maestra_ajustes_factura ajustes
on facturas.id_cliente = ajustes.id_cliente
and facturas.id_factura = ajustes.id_factura

38. Del cliente y su cuenta corriente, cantidad de facturas, promedio facturado, total facturado.
select cliente.id_cliente,
count(cuenta_corriente.id_factura)
Cantidad_facturas,
avg(cuenta_corriente.total_facturado) Promedio_facturado,
sum(cuenta_corriente.total_facturado) Total_facturado
from tbl_maestra_cliente cliente
inner join tbl_cuenta_corriente cuenta_corriente
on cliente.id_cliente = cuenta_corriente.id_cliente
group by cliente.id_cliente

39. Del cliente y su cuenta corriente, monto más alto facturado, monto más bajo facturado.
select cliente.id_cliente,
min(cuenta_corriente.total_facturado) Monto_mas_bajo_facturado,
max(cuenta_corriente.total_facturado) Monto_mas_alto_facturado
from tbl_maestra_cliente cliente
inner join tbl_cuenta_corriente cuenta_corriente
on cliente.id_cliente = cuenta_corriente.id_cliente
group by cliente.id_cliente

40. Del pago datos que usted crea importantes, su tipo de pago, su origen y su operador.
select pagos.id_pago,
pagos.id_factura,
pagos.id_cliente,
pagos.fecha_pago,
pagos.monto_pago,
pagos.id_origen_pago,
origen.leyenda_origen,
pagos.id_operador_pago,
operador.descripcion_operador
from tbl_maestra_pagos_factura pagos
inner join tbl_origen_pago
origen
on pagos.id_origen_pago = origen.id_origen_pago
inner join tbl_operador_pago
operador
on pagos.id_operador_pago = operador.id_operador_pago

41. Del ajuste datos que usted crea importantes, su tipo de ajuste, su origen y su operador.
select ajustes.id_ajuste,
ajustes.id_factura,
ajustes.id_cliente,
ajustes.fecha_ajuste,
ajustes.monto_pago,
ajustes.id_origen_pago,
origen.leyenda_origen,
ajustes.id_operador_pago,
– Curso de
from
inner join
on
inner join
on

SQL Aplicado

operador.descripcion_operador
tbl_maestra_ajustes_factura ajustes
tbl_origen_ajuste
origen
ajustes.id_origen_pago = origen.id_origen_ajuste
tbl_operador_ajuste
operador
ajustes.id_operador_pago = operador.id_operador_ajuste

42. Del cliente y sus facturas, datos que usted considere importantes, más días transcurridos
desde la fecha de vencimiento de la factura y el día en que usted corre el query.
select cliente.id_cliente,
cliente.primer_nombre||' '||cliente.segundo_nombre||' '||cliente.tercer_nombre||'
'||cliente.primer_apellido||' '||cliente.segundo_apellido Nombre_completo,
factura.id_factura,
factura.fecha_emision,
factura.total_facturado,
factura.fecha_vencimiento,
trunc(sysdate-factura.fecha_vencimiento) Dias_vencida
from tbl_maestra_cliente cliente
inner join tbl_maestra_facturas factura
on cliente.id_cliente = factura.id_cliente

43. Del cliente y sus facturas, datos importantes de aquellas facturas que tienen entre 31 y 61
días de vencimiento.
select cliente.id_cliente,
cliente.primer_nombre||' '||cliente.segundo_nombre||' '||cliente.tercer_nombre||'
'||cliente.primer_apellido||' '||cliente.segundo_apellido Nombre_completo,
factura.id_factura,
factura.fecha_emision,
factura.total_facturado,
factura.fecha_vencimiento,
trunc(sysdate-factura.fecha_vencimiento) Dias_vencida
from tbl_maestra_cliente cliente
inner join tbl_maestra_facturas factura
on cliente.id_cliente = factura.id_cliente
where trunc(sysdate-factura.fecha_vencimiento) between 31 and 61

44. Del cliente, sus facturas y su cuenta corriente, datos importantes de aquellas facturas que
tienen entre 31 y 61 días de vencimiento y su saldo es mayor a cero.
select cliente.id_cliente,
cliente.primer_nombre||' '||cliente.segundo_nombre||' '||cliente.tercer_nombre||'
'||cliente.primer_apellido||' '||cliente.segundo_apellido Nombre_completo,
factura.id_factura,
factura.fecha_emision,
factura.total_facturado,
factura.fecha_vencimiento,
trunc(sysdate-factura.fecha_vencimiento) Dias_vencida,
cuenta_corriente.saldo_factura
from tbl_maestra_cliente cliente
inner join tbl_maestra_facturas factura
on cliente.id_cliente = factura.id_cliente
inner join tbl_cuenta_corriente cuenta_corriente
on cuenta_corriente.id_cliente = cliente.id_cliente
and cuenta_corriente.id_cliente = factura.id_cliente
and cuenta_corriente.id_factura = factura.id_factura
where trunc(sysdate-factura.fecha_vencimiento) between 31 and 61
and cuenta_corriente.saldo_factura
> 0

45. Del cliente y sus facturas, datos importantes y cantidad de facturas con más de un día
vencidas.
– Curso de

SQL Aplicado

select cliente.id_cliente,
cliente.primer_nombre||' '||cliente.segundo_nombre||' '||cliente.tercer_nombre||'
'||cliente.primer_apellido||' '||cliente.segundo_apellido Nombre_completo,
factura.id_factura,
factura.fecha_emision,
factura.total_facturado,
factura.fecha_vencimiento,
trunc(sysdate-factura.fecha_vencimiento) Dias_vencida
from tbl_maestra_cliente cliente
inner join tbl_maestra_facturas factura
on cliente.id_cliente = factura.id_cliente
where trunc(sysdate-factura.fecha_vencimiento) > 1

46. Del cliente y sus facturas, demostrando la fecha más baja y alta de emisión de facturas.
select cliente.id_cliente,
cliente.primer_nombre||' '||cliente.segundo_nombre||' '||cliente.tercer_nombre||'
'||cliente.primer_apellido||' '||cliente.segundo_apellido Nombre_completo,
min(factura.fecha_emision) Fecha_mas_baja_emision,
max(factura.fecha_emision) Fecha_mas_alta_emision
from tbl_maestra_cliente cliente
inner join tbl_maestra_facturas factura
on cliente.id_cliente = factura.id_cliente
group by cliente.id_cliente,
cliente.primer_nombre||' '||cliente.segundo_nombre||' '||cliente.tercer_nombre||'
'||cliente.primer_apellido||' '||cliente.segundo_apellido

47. Del cliente, sus facturas y su cuenta corriente, identificador del cliente, nombre completo
junto, monto facturado total, monto pagado total, monto ajustado total, monto de saldo total y
cantidad de días vencidas más alto.
select cliente.id_cliente,
cliente.primer_nombre||' '||cliente.segundo_nombre||' '||cliente.tercer_nombre||'
'||cliente.primer_apellido||' '||cliente.segundo_apellido Nombre_completo,
sum(factura.total_facturado)
facturado_total,
sum(cuenta_corriente.total_pagado)
pagado_total,
sum(cuenta_corriente.total_ajustado)
ajustado_total,
sum(cuenta_corriente.saldo_factura)
saldo_total,
max(trunc(sysdate-factura.fecha_vencimiento)) Dias_vencido_mas_alto
from tbl_maestra_cliente cliente
inner join tbl_maestra_facturas factura
on cliente.id_cliente = factura.id_cliente
inner join tbl_cuenta_corriente cuenta_corriente
on cuenta_corriente.id_cliente = cliente.id_cliente
and cuenta_corriente.id_cliente = factura.id_cliente
and cuenta_corriente.id_factura = factura.id_factura
group by cliente.id_cliente,
cliente.primer_nombre||' '||cliente.segundo_nombre||' '||cliente.tercer_nombre||'
'||cliente.primer_apellido||' '||cliente.segundo_apellido

48. De los pagos y su origen con un filtro que permita indicar un origen en específico.
select pagos.id_pago,
pagos.id_factura,
pagos.id_cliente,
pagos.fecha_pago,
pagos.monto_pago,
pagos.id_origen_pago,
origen.leyenda_origen
from tbl_maestra_pagos_factura pagos
inner join tbl_origen_pago
origen
on pagos.id_origen_pago = origen.id_origen_pago
where pagos.id_origen_pago = 1
– Curso de

SQL Aplicado

49. De los pagos, su estatus, su origen y su operador, demostrar para un operador (filtro) en
específico, datos del pago, su estatus, su origen y su operador.
select pagos.id_pago,
pagos.id_factura,
pagos.id_cliente,
pagos.fecha_pago,
pagos.monto_pago,
pagos.id_origen_pago,
origen.leyenda_origen,
pagos.id_operador_pago,
operador.descripcion_operador,
pagos.id_estatus,
estatus.leyenda_estatus estatus_pago
from tbl_maestra_pagos_factura pagos
inner join tbl_origen_pago
origen
on pagos.id_origen_pago = origen.id_origen_pago
inner join tbl_operador_pago
operador
on pagos.id_operador_pago = operador.id_operador_pago
inner join tbl_maestra_estatus
estatus
on pagos.id_estatus
= estatus.id_estatus
where pagos.id_operador_pago = 2

50. De los pagos y su estatus, cantidad de pagos por leyenda de estatus.
select count(pagos.id_estatus) Cantidad_pagos,
estatus.leyenda_estatus estatus_pago
from tbl_maestra_pagos_factura pagos
inner join tbl_maestra_estatus
estatus
on pagos.id_estatus = estatus.id_estatus
group by estatus.leyenda_estatus

Queries miscelaneos
51. Sabiendo que la primer fecha en que se emitiría una factura en el Sistema con tablas
TBL_ es: 21/11/2000, construya un query que indique la cantidad de meses (en enteros) entre hoy
y esa fecha.
select trunc(months_between(sysdate, to_date('21112000','ddmmyyyy'))) Meses_Facturar
from dual;

52. Sabiendo que la fecha de Inicio de ciclo de facturación es 21 de cada mes, la de fin de
ciclo es un mes más que la de inicio, la de emisión es la de fin de ciclo y la de vencimiento es un
mes más que la de emisión, construya un query que retorne esas fechas.

select :fecha_facturacion,
add_months(:fecha_facturacion,1) Fecha_fin_ciclo,
add_months(:fecha_facturacion,1) Fecha_emision,
add_months(:fecha_facturacion,2) Fecha_emision
from dual

53. Basado en la tabla tbl_fechas_ciclos y teniendo la fecha de Activo de un cliente en
01/06/2013, construya un query que retorne todos los campos de esa tabla para su facturación
próxima.
– Curso de

SQL Aplicado

select ciclos.id_ciclo,
ciclos.fecha_inicia_ciclo,
ciclos.fecha_finaliza_ciclo,
ciclos.fecha_emision,
ciclos.fecha_vencimiento
from tbl_fechas_ciclos ciclos
where :fecha_activo between ciclos.fecha_inicia_ciclo and ciclos.fecha_finaliza_ciclo

54. Con la misma lógica del query anterior, una la tabla de clientes con la tabla de Fechas
para los ciclos y demuestre de clientes el ID y de la tabla de fechas, todos sus campos.
select ciclos.id_ciclo,
ciclos.fecha_inicia_ciclo,
ciclos.fecha_finaliza_ciclo,
ciclos.fecha_emision,
ciclos.fecha_vencimiento
from tbl_maestra_cliente cliente
inner join tbl_fechas_ciclos
ciclos
on cliente.id_ciclo = ciclos.id_ciclo
where cliente.fecha_activo between ciclos.fecha_inicia_ciclo and ciclos.fecha_finaliza_ciclo

55. De la unión de user_sys_privs y all_users demuestre todos los datos de ambas tablas
sin importar si hay datos en una en relación a la otra.
select
from
full outer join
on

*
user_sys_privs privilegios
all_users
usuarios
privilegios.username = usuarios.username

56. De la cadena '*MIN=57789964*PID=205*RES=SUC*' cree un query que obtenga el
valor de PID.
select :cadena,
instr(:cadena, :cadena_buscar),
substr(:cadena, instr(:cadena, :cadena_buscar), length(:cadena)) pid_res,
instr(substr(:cadena, instr(:cadena, :cadena_buscar), length(:cadena)), '*') res,
substr(:cadena, instr(:cadena, :cadena_buscar), instr(substr(:cadena, instr(:cadena,
:cadena_buscar), length(:cadena)), '*')-1) pid
from dual

57. De tbl_maestra_cliente y tbl_cliente_factura los datos que usted crea útiles para
mostrar en un reporte los clientes que tienen datos distintos para facturar, tome en cuenta que si
no hay datos para facturar, siempre debe de mostrar los datos de la maestra de clientes.
select cliente.id_cliente,
cliente.primer_nombre,
cliente.segundo_nombre,
cliente.tercer_nombre,
cliente.primer_apellido,
cliente.segundo_apellido,
cliente.nit,
cliente.direccion,
datos_factura.primer_nombre
primer_nombre_factura,
datos_factura.segundo_nombre
segundo_nombre_factura,
datos_factura.tercer_nombre
tercer_nombre_factura,
datos_factura.primer_apellido primer_apellido_factura,
datos_factura.segundo_apellido segundo_apellido_factura,
datos_factura.nit
nit_factura,
datos_factura.direccion
direccion_factura
from tbl_maestra_cliente cliente
left outer join tbl_cliente_factura datos_factura
– Curso de

SQL Aplicado

on cliente.id_cliente = datos_factura.id_cliente

58. Del diccionario de datos se necesita que cree un query que permita hacer el create de
cualquier tabla, incluyendo, campos, tipo, ancho, valor default, constraints.
select campos.column_name,
campos.data_type,
campos.data_length,
campos.data_precision,
campos.data_scale,
campos.nullable,
campos.data_default data_default,
campos_constraints.constraint_name,
constraints.constraint_type,
constraints.search_condition,
constraints.r_constraint_name,
referencia_constraint.table_name,
referencia_constraint.column_name
from all_tab_columns campos
left outer join all_cons_columns campos_constraints
on campos.table_name = campos_constraints.table_name
and campos.column_name = campos_constraints.column_name
left outer join all_constraints constraints
on campos_constraints.constraint_name = constraints.constraint_name
left outer join all_cons_columns referencia_constraint
on constraints.r_constraint_name = referencia_constraint.constraint_name
where campos.table_name = :table_name
order by campos.column_id

59. Cree un query que muestre el primer día del año según la fecha del Sistema, también el primer
día del mes.
select trunc(sysdate, 'yyyy') primer_dia_anio,
trunc(sysdate, 'mm')
primer_dia_mes
from dual

60. Diseñe un query que demuestre el primer día del mes y el último día del mes.
select trunc(sysdate, 'mm')
primer_dia_mes,
add_months(trunc(sysdate, 'mm'),1)-1 ultimo_dia_mes
from dual

61. Diseñe un query que demuestre la fecha así: 'Viernes 3 enero 2014'.
select to_char(sysdate, 'day dd month yyyy','nls_date_language=spanish')
from dual

62. Construya un query que busque todos los pagos validos de tbl_maestra_pagos.
select pagos.*
from tbl_maestra_pagos_factura pagos
where pagos.id_estatus = 8

63. De la cadena '*MIN=57789964*PID=205*RES=SUC*' se necesita que los * sean
reemplazados por %.
– Curso de

SQL Aplicado

select replace(:cadena, '*', '%')
from dual
64. Selecciones los datos de la tabla all_tab_privs_recd cuando el campo grantee = user.

64. Selecciones los datos de la tabla all_tab_privs_recd cuando el campo grantee = user.
Select * from all_tab_privs_recd where grantee = user

65. Cree un select con union de los datos de table_privilege_map y system_privilege_map.
select privilege,
name
from table_privilege_map
union
select privilege,
name
from system_privilege_map

66. Diseñe un query que muestre el usuario que más objetos ha creado en la base de datos.
select usuario,
cantidad
from (
select objetos.owner usuario,
count(object_name) cantidad
from all_objects objetos
group by objetos.owner
order by cantidad desc
) objetos_creados
where rownum = 1

67. Construya un query que una tbl_maestra_cliente con tbl_maestra_ciclos y que
muestre datos significativos.
select cliente.id_cliente,
cliente.primer_nombre,
cliente.primer_apellido,
cliente.fecha_activo,
ciclos.id_ciclo,
ciclos.leyenda_ciclo
from tbl_maestra_cliente cliente
inner join tbl_maestra_ciclos ciclos
on cliente.id_ciclo = ciclos.id_ciclo
order by cliente.id_cliente

68. Diseñe un query que una tbl_maestra_ciclos y tbl_fechas_ciclos y muestre datos
significativos.
select ciclos.id_ciclo,
ciclos.leyenda_ciclo,
fechas_ciclo.*
from tbl_maestra_ciclos ciclos
inner join tbl_fechas_ciclos fechas_ciclo
on ciclos.id_ciclo = fechas_ciclo.id_ciclo

69. Construya un query que permita obtener los ajustes válidos a un período de tiempo.
Esto de tbl_maestra_ajustes_factura.
– Curso de
select
from
where
and

SQL Aplicado

*
tbl_maestra_ajustes_factura ajustes
ajustes.id_estatus = :id_estatus_valido
(ajustes.fecha_ajuste >= :fecha_inicio and ajustes.fecha_ajuste <= :fecha_fin)

70. Construya un query que permita obtener los pagos válidos a un período de tiempo.
Esto de tbl_maestra_pagos_factura.
select
from
where
and

*
tbl_maestra_pagos_factura pagos
pagos.id_estatus = :id_estatus_valido
(pagos.fecha_pago >= :fecha_inicio and pagos.fecha_pago <= :fecha_fin)

71. Muestre todas aquellas tablas que tienen un campo llamado OBJECT_ID.
select *
from all_tab_columns
where column_name = 'OBJECT_ID'

72. Muestre la fecha menor y mayor de tbl_fechas_ciclos
select min(fechas_ciclo.fecha_inicia_ciclo) Menor,
max(fechas_ciclo.fecha_inicia_ciclo) Mayor
from tbl_fechas_ciclos fechas_ciclo

73. Cree un query que permita idienticar si la pareja de fecha_inicia_ciclo y
fecha_finaliza_ciclo están repetidas en tbl_fechas_ciclos
select fechas_ciclo.fecha_inicia_ciclo,
fechas_ciclo.fecha_inicia_ciclo,
count(fechas_ciclo.id_ciclo) cantidad
from tbl_fechas_ciclos fechas_ciclo
group by fechas_ciclo.fecha_inicia_ciclo,
fechas_ciclo.fecha_inicia_ciclo
having count(fechas_ciclo.id_ciclo) > 1

74. Diseñe un query que unido con el cliente las fechas de facturación, cuando el cliente
esta de Alta pero sin Actividad, muestre los días entre la fecha de activo y la fecha de fin de
factura.
select cliente.id_cliente,
cliente.fecha_activo,
fechas_ciclo.fecha_finaliza_ciclo,
trunc(fechas_ciclo.fecha_finaliza_ciclo-cliente.fecha_activo) dias_facturar
from tbl_maestra_cliente cliente
inner join tbl_fechas_ciclos
fechas_ciclo
on cliente.id_ciclo = fechas_ciclo.id_ciclo
where cliente.id_estatus
= 1
and cliente.fecha_activo between fechas_ciclo.fecha_inicia_ciclo and
fechas_ciclo.fecha_finaliza_ciclo

75. Construya un query que retorne la fecha del sistema en donde está instalada la base
de datos.
– Curso de

SQL Aplicado

select sysdate
from dual

De una cadena de valores ficticia de un CDR

76. Que sin importar cuál de las cadenas, retorne todos los datos de la cadena pasada,
basado en la tabla de valores de la cadena arriba indicando.
select substr(:cadena,
substr(:cadena,
substr(:cadena,
substr(:cadena,
substr(:cadena,
substr(:cadena,
substr(:cadena,
substr(:cadena,
substr(:cadena,
substr(:cadena,
substr(:cadena,
from dual

1,2)
3,9)
12,4)
16,8)
24,4)
28,13)
41,13)
54,14)
68,4)
72,4)
76,4)

Tipo_registro,
Archivo_id,
Codigo_uso,
Fecha,
Hora,
MIN,
Origen,
Destino,
Hora_Inicio,
Hora_Fin,
Duracion

77. De cualquiera de las cadenas retorne MIN, Codigo Uso, Hora Inicio, Hora Fin y
duración.
select substr(:cadena,
substr(:cadena,
substr(:cadena,
substr(:cadena,
substr(:cadena,
from dual

28,13)
12,4)
68,4)
72,4)
76,4)

MIN,
Codigo_uso,
Hora_Inicio,
Hora_Fin,
Duracion

78. De cualquiera de las cadenas retorne MIN, Codigo Uso, Hora Inicio, Hora Fin y
duración en minutos.
select substr(:cadena, 28,13) MIN,
substr(:cadena, 12,4) Codigo_uso,
substr(:cadena, 68,4) Hora_Inicio,
substr(:cadena, 72,4) Hora_Fin,
(substr(:cadena, 76,4)/60) Duracion_minutos
from dual

79. De cualquiera de las cadenas retorne MIN, Codigo Uso, Hora Inicio, Hora Fin y
duración en minutos redondeado al minuto superior.
select substr(:cadena, 28,13) MIN,
substr(:cadena, 12,4) Codigo_uso,
substr(:cadena, 68,4) Hora_Inicio,
substr(:cadena, 72,4) Hora_Fin,
ceil(substr(:cadena, 76,4)/60) Duracion_minutos_redondeado
from dual
– Curso de

SQL Aplicado

80. De cualquiera de las cadenas retorne MIN, Codigo Uso, Hora Inicio, Hora Fin y
duración en minutos redondeado al minuto Inferior.
select substr(:cadena, 28,13) MIN,
substr(:cadena, 12,4) Codigo_uso,
substr(:cadena, 68,4) Hora_Inicio,
substr(:cadena, 72,4) Hora_Fin,
floor(substr(:cadena, 76,4)/60) Duracion_minutos_redondeado
from dual

81. De cualquiera de las cadenas retorne MIN, Codigo Uso, Origen, Destino, Hora Inicio,
Hora fin y duración en minutos redondeado al minuto superior.
select substr(:cadena, 28,13) MIN,
substr(:cadena, 12,4) Codigo_uso,
substr(:cadena, 41,13) Origen,
substr(:cadena, 54,14) Destino,
substr(:cadena, 68,4) Hora_Inicio,
substr(:cadena, 72,4) Hora_Fin,
ceil(substr(:cadena, 76,4)/60) Duracion_redondeado
from dual

82. De cualquiera de las cadenas retorne MIN, Codigo Uso, Origen quitando de la
izquierda la cadena 00502, Destino quitando de la izquierda de la cadena 00502, Hora Inicio, Hora
fin y duración en minutos redondeado al minuto superior.
Solución 1: Incorrecta:
select substr(:cadena, 28,13)
substr(:cadena, 12,4)
ltrim(substr(:cadena, 41,13),'00502')
ltrim(substr(:cadena, 54,14),'00502')
substr(:cadena, 68,4)
substr(:cadena, 72,4)
ceil(substr(:cadena, 76,4)/60)
from dual
Solución correcta:

MIN,
Codigo_uso,
Origen,
Destino,
Hora_Inicio,
Hora_Fin,
Duracion_redondeado

select substr(:cadena, 28,13)
MIN,
substr(:cadena, 12,4)
Codigo_uso,
decode(substr(:cadena, 41,5), '00502',
substr(:cadena, 46,9),
substr(:cadena, 41,13)) Origen,
decode(substr(:cadena, 54,5),'00502',
substr(:cadena, 59,9),
substr(:cadena, 54,14)) Destino,
substr(:cadena, 68,4)
Hora_Inicio,
substr(:cadena, 72,4)
Hora_Fin,
ceil(substr(:cadena, 76,4)/60)
Duracion_redondeado
from dual

83. De cualquiera de las cadenas retorne MIN, Codigo Uso, Origen y país basado en
códigos proveídos arriba, Destino y país basado en códigos proveídos arriba, Hora Inicio, Hora fin
y duración en minutos redondeado al minuto superior.
select substr(:cadena, 28,13) MIN,
substr(:cadena, 12,4) Codigo_uso,
case
when substr(:cadena, 41,5) = '00502' then 'GUATEMALA'
when substr(:cadena, 41,3) = '001'
then 'ESTADOS UNIDOS'
else
'NO DEFINIDO'
– Curso de

SQL Aplicado

end as Pais_origen,
substr(:cadena, 41,13) Origen,
case
when substr(:cadena, 54,5) = '00502' then 'GUATEMALA'
when substr(:cadena, 54,3) = '001'
then 'ESTADOS UNIDOS'
else
'NO DEFINIDO'
end as Pais_destino,
substr(:cadena, 54,14) Destino,
substr(:cadena, 68,4) Hora_Inicio,
substr(:cadena, 72,4) Hora_Fin,
ceil(substr(:cadena, 76,4)/60) Duracion_redondeado
from dual

84. De cualquiera de las cadenas retorne MIN, Código Uso, descripción de uso según
tabla de Códigos de uso, Hora Inicio, Hora Fin y duración en minutos.
select substr(:cadena, 28,13) MIN,
substr(:cadena, 12,4) Codigo_uso,
decode(substr(:cadena, 12,4),
'8001',
'9090',
'9091',
'9100',
'No Definido'
) Descripcion_uso,
substr(:cadena, 68,4)
Hora_Inicio,
substr(:cadena, 72,4)
Hora_Fin,
substr(:cadena, 76,4)/60 Duracion_minutos
from dual

'Llamada
'Llamada
'Consuta
'Llamada

entrante',
Local',
Buzón de Voz',
Internacional',

85. De cualquiera de las cadenas retorne Tipo de Registro, Descripción de Tipo de
Registro, MIN, Código Uso, Hora Inicio, Hora Fin y duración.
select substr(:cadena, 1,3)
Tipo_registro,
decode(substr(:cadena, 1,2),
'H1', 'Encabezado',
'T1', 'Fin de Archivo de CDRs',
'D1', 'Línea de Detalle de CDR',
'No definido'
)
Descripcion_tipo_registro,
substr(:cadena, 28,13) MIN,
substr(:cadena, 12,4) Codigo_uso,
substr(:cadena, 41,13) Origen,
substr(:cadena, 54,14) Destino,
substr(:cadena, 68,4) Hora_Inicio,
substr(:cadena, 72,4) Hora_Fin,
substr(:cadena, 76,4) Duracion
from dual

86. De cualquiera de las cadenas retorne MIN, Codigo Uso, Fecha, Hora Inicio, Hora Fin y
duración, convierta en fecha Hora Inicio, agregue la fecha para ello, este valor será llamado
Fecha_hora_incio, haga lo mismo con Hora Fin.
select substr(:cadena, 28,13) MIN,
substr(:cadena, 12,4) Codigo_uso,
substr(:cadena, 41,13) Origen,
substr(:cadena, 54,14) Destino,
substr(:cadena, 68,4) Hora_Inicio,
substr(:cadena, 72,4) Hora_Fin,
substr(:cadena, 76,4) Duracion_redondeado,
to_date(substr(:cadena, 16,8)||substr(:cadena, 68,4), 'ddmmyyyyhh24mi') Fecha_hora_inicio,
to_date(substr(:cadena, 16,8)||substr(:cadena, 72,4), 'ddmmyyyyhh24mi') Fecha_hora_fin
from dual
– Curso de

SQL Aplicado

87. De cualquiera de las cadenas retorne MIN, Codigo Uso, Fecha, Hora Inicio, Hora Fin y
duración, convierta en fecha Hora Inicio, agregue la fecha para ello, este valor será llamado
Fecha_hora_incio, haga lo mismo con Hora Fin, calcule la duración en base a Fecha_hora_inicio y
Fecha_hora_fin.
select substr(:cadena, 28,13) MIN,
substr(:cadena, 12,4) Codigo_uso,
substr(:cadena, 41,13) Origen,
substr(:cadena, 54,14) Destino,
substr(:cadena, 68,4) Hora_Inicio,
substr(:cadena, 72,4) Hora_Fin,
substr(:cadena, 76,4) Duracion_redondeado,
to_date(substr(:cadena, 16,8)||substr(:cadena, 68,4), 'ddmmyyyyhh24mi') Fecha_hora_inicio,
to_date(substr(:cadena, 16,8)||substr(:cadena, 72,4), 'ddmmyyyyhh24mi') Fecha_hora_fin,
to_date(substr(:cadena, 16,8)||substr(:cadena, 72,4), 'ddmmyyyyhh24mi') - to_date(substr(:cadena,
16,8)||substr(:cadena, 68,4), 'ddmmyyyyhh24mi') Duracion
from dual

88. De cualquiera de las cadenas retorne MIN quitando de la izquierda de la cadena los
valores '00502', Codigo Uso, Hora Inicio, Hora Fin y duración.
select decode(substr(:cadena, 28,5),
'00502', substr(:cadena, 33,8),
substr(:cadena, 28,13)
) MIN,
substr(:cadena,
substr(:cadena,
substr(:cadena,
substr(:cadena,
substr(:cadena,
substr(:cadena,
from dual

12,4)
Codigo_uso,
41,13) Origen,
54,14) Destino,
68,4)
Hora_Inicio,
72,4)
Hora_Fin,
76,4)
Duracion_redondeado

89. De cualquiera de las cadenas retorne MIN, fecha, hora_inicio, hora_fin, duración,
origen y destino, convirtiendo a número Min, Origen y Destino.
select substr(:cadena, 28,13)
MIN,
substr(:cadena, 12,4)
Codigo_uso,
to_number(substr(:cadena, 41,13)) Origen,
to_number(substr(:cadena, 54,14)) Destino,
substr(:cadena, 68,4)
Hora_Inicio,
substr(:cadena, 72,4)
Hora_Fin,
substr(:cadena, 76,4)
Duracion_redondeado
from dual

90. De cualquiera de las cadenas retorne MIN, fecha agregando el valor Hora , hora_inicio,
hora_fin, duración, origen y destino, convirtiendo a número Min, Origen y Destino.
select substr(:cadena, 28,13)
MIN,
substr(:cadena, 16,8)||' '||substr(:cadena, 68,4)||' '||substr(:cadena, 72,4)
Fecha_hora_inicio_fin,
substr(:cadena, 12,4)
Codigo_uso,
to_number(substr(:cadena, 41,13)) Origen,
to_number(substr(:cadena, 54,14)) Destino,
substr(:cadena, 68,4)
Hora_Inicio,
substr(:cadena, 72,4)
Hora_Fin,
substr(:cadena, 76,4)
Duracion_redondeado
from dual
– Curso de

SQL Aplicado

91. De cualquiera de las cadenas retorne MIN, fecha agregando el valor Hora convierta este
dato en fecha se llamará Fecha_hora_cdr, hora_inicio, hora_fin, duración, origen y destino,
convirtiendo a número Min, Origen y Destino.
select substr(:cadena, 28,13)
MIN,
substr(:cadena, 16,8)||' '||substr(:cadena, 24,4) Fecha_hora_cdr,
substr(:cadena, 12,4)
Codigo_uso,
to_number(substr(:cadena, 41,13)) Origen,
to_number(substr(:cadena, 54,14)) Destino,
substr(:cadena, 68,4)
Hora_Inicio,
substr(:cadena, 72,4)
Hora_Fin,
substr(:cadena, 76,4)
Duracion
from dual

92. De cualquiera de las cadenas retorne MIN, fecha agregando el valor Hora convierta este
dato en fecha se llamará Fecha_hora_cdr, origen ancho de origen, destino y ancho de destino.
select substr(:cadena, 28,13)
MIN,
substr(:cadena, 16,8)||' '||substr(:cadena, 24,4) Fecha_hora_cdr,
substr(:cadena, 12,4)
Codigo_uso,
substr(:cadena, 41,13) Origen,
length(substr(:cadena, 41,13)) ancho_origen,
substr(:cadena, 54,14) Destino,
length(substr(:cadena, 54,14)) ancho_destino
from dual

93. De cualquiera de las cadenas retorne si el tipo registro es encabezado: Tipo_registro,
Archivo_id, Codigo_uso, Fecha.
select decode(substr(:cadena, 1,2),
'H1',substr(:cadena, 1,2)||' '||substr(:cadena, 3,9)||'
'||substr(:cadena, 12,4), substr(:cadena, 16,8),
null
) Si_es_encabezado
from dual

94. De cualquiera de las cadenas retorne si el tipo registro es detalle: Fecha, Hora, Hora
Inicio, Hora Fin, MIN, Origen y Destino.
select decode(substr(:cadena, 1,2),
'D1',substr(:cadena, 16,8)||' '||substr(:cadena, 24,4)||'
'||substr(:cadena, 68,4)||' '||substr(:cadena, 72,4)||' '||substr(:cadena, 28,13)||' '||substr(:cadena,
41,13)||' '||substr(:cadena, 54,14),
null
) Si_es_encabezado
from dual
– Curso de

SQL Aplicado

95. Imaginando que hay una tabla así: tbl_cdr_original (Tipo_registro, Archivo_id,
Codigo_uso, Fecha_cdr, Hora_cdr, telefono, telefono_Origen, telefono_Destino, Hora_Inicio,
Hora_Fin, Dureacion), entonces con un query genera la instrucción insert para guardar cada
campo sin importar la cadena.
select 'tbl_cdr_original (Tipo_registro, Archivo_id, Codigo_uso, Fecha_cdr, Hora_cdr, telefono,
telefono_Origen, telefono_Destino, Hora_Inicio, Hora_Fin, Dureacion) values(' ||
substr(:cadena, 1,2)||','||substr(:cadena, 3,9)||','||substr(:cadena, 12,4)||','||substr(:cadena,
16,8)||','||substr(:cadena, 24,4)||','||substr(:cadena, 28,13)||','||substr(:cadena,
41,13)||','||substr(:cadena, 54,14)||','||substr(:cadena, 68,4)||','||substr(:cadena,
72,4)||','||substr(:cadena, 76,4)||');' Sentencia_Insercion
from dual

96. Imaginando que hay una tabla así: tbl_cdr_original (Tipo_registro, Archivo_id,
Codigo_uso, Fecha_cdr, Hora_cdr, telefono, telefono_Origen, telefono_Destino, Hora_Inicio, Hora_Fin,
Dureacion), entonces con un query genera la instrucción insert para guardar cada campo sin importar la
cadena, cuando el Tipo_registo es D1.
select decode(substr(:cadena, 1,2), 'D1',
'tbl_cdr_original (Tipo_registro, Archivo_id, Codigo_uso,
Fecha_cdr, Hora_cdr, telefono, telefono_Origen, telefono_Destino, Hora_Inicio, Hora_Fin, Dureacion)
values(' ||substr(:cadena, 1,2)||','||substr(:cadena, 3,9)||','||substr(:cadena,
12,4)||','||substr(:cadena, 16,8)||','||substr(:cadena, 24,4)||','||substr(:cadena,
28,13)||','||substr(:cadena, 41,13)||','||substr(:cadena, 54,14)||','||substr(:cadena,
68,4)||','||substr(:cadena, 72,4)||','||substr(:cadena, 76,4)||');',
NULL
)Sentencia_Insercion
from dual

97. Si el tipo de registro es detalle, retorne: Min convertido a número, origen convertido
a número, destino convertido a número.
select decode(substr(:cadena, 1,2), 'D1',
to_number(substr(:cadena, 28,13))||'
'||to_number(substr(:cadena, 41,13))||' '||to_number(substr(:cadena, 54,14)),
NULL
)valores
from dual

98. Si el tipo de registro es detalle, retorne: Min convertido a número, origen convertido
a número, destino convertido a número, fecha con hora agregado, convertido a fecha, Hora Inicio
con fecha agregado convertido a fecha, Hora fin con fecha agregado convertido a fecha .
select decode(substr(:cadena, 1,2), 'D1',
to_number(substr(:cadena, 28,13))||'
'||to_number(substr(:cadena, 41,13))||' '||to_number(substr(:cadena, 54,14))||'
'||to_date(substr(:cadena, 16,8)||substr(:cadena, 24,4), 'ddmmyyyyhh24mi')||' '||to_date(substr(:cadena,
16,8)||substr(:cadena, 68,4), 'ddmmyyyyhh24mi')||' '||to_date(substr(:cadena, 16,8)||substr(:cadena,
72,4), 'ddmmyyyyhh24mi'),
NULL
)Sentencia_Insercion
from dual

99. Si el tipo de registro es Encabezado o fin de archivo que demuestre el archivo id.
select decode(substr(:cadena, 1,2), 'H1',
substr(:cadena, 3,9),
– Curso de

SQL Aplicado

'T1',
substr(:cadena, 3,9),
NULL
) Archivo_id
from dual

100. Un query que retorne la leyenda 'He realizado 101 Queries... :-)'.
select 'He realizado 101 Queries... :-)'
from dual

101. Un query que retorne la leyenda 'Ahora si son 101'.
select 'Ahora si son 101'
from dual

Más contenido relacionado

La actualidad más candente (13)

Importar pdf
Importar pdfImportar pdf
Importar pdf
 
Base de Datos(Funciones, Vistas,Procedimientos Almacenados,Triggers)
Base de Datos(Funciones, Vistas,Procedimientos Almacenados,Triggers)Base de Datos(Funciones, Vistas,Procedimientos Almacenados,Triggers)
Base de Datos(Funciones, Vistas,Procedimientos Almacenados,Triggers)
 
Consultas
ConsultasConsultas
Consultas
 
Leo
LeoLeo
Leo
 
TECNOLOGIA
TECNOLOGIATECNOLOGIA
TECNOLOGIA
 
Consultas
ConsultasConsultas
Consultas
 
tutorial access 2007
tutorial access 2007tutorial access 2007
tutorial access 2007
 
90 Php. Otras Consultas
90 Php. Otras Consultas90 Php. Otras Consultas
90 Php. Otras Consultas
 
Trucos en excel avanzado
Trucos en excel avanzadoTrucos en excel avanzado
Trucos en excel avanzado
 
Manual para bases de datos
Manual para bases de datosManual para bases de datos
Manual para bases de datos
 
Tipos de consultas
Tipos de consultasTipos de consultas
Tipos de consultas
 
Práctica SQL en MYSQL
Práctica SQL en MYSQLPráctica SQL en MYSQL
Práctica SQL en MYSQL
 
Consultas
ConsultasConsultas
Consultas
 

Similar a 101 queries sql aplicado - respuestas

Comandos y funciones sql postgres
Comandos y funciones sql postgresComandos y funciones sql postgres
Comandos y funciones sql postgresHIPOLITO GRULLON
 
Sesión02 - Creación de objetos (Oracle)
Sesión02 - Creación de objetos (Oracle)Sesión02 - Creación de objetos (Oracle)
Sesión02 - Creación de objetos (Oracle)José Toro
 
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 portaleavila5
 
Labo3 de base_de_datos
Labo3 de base_de_datosLabo3 de base_de_datos
Labo3 de base_de_datosalvarocbv14
 
Como utilizar sql en visual basic 6
Como utilizar sql en visual basic 6Como utilizar sql en visual basic 6
Como utilizar sql en visual basic 6Narcisa Fuentes
 
Base de-datos-ii
Base de-datos-iiBase de-datos-ii
Base de-datos-iiLuis Carmen
 
Sql desde cero
Sql desde ceroSql desde cero
Sql desde ceroshochino
 
Como utilizar sql en visual basic 6
Como utilizar sql en visual basic 6Como utilizar sql en visual basic 6
Como utilizar sql en visual basic 6Narcisa Fuentes
 
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 My Sql
Bases De Datos My SqlBases De Datos My Sql
Bases De Datos My SqlArnulfo Gomez
 
SQL Visual Basic 6.0
SQL Visual Basic 6.0SQL Visual Basic 6.0
SQL Visual Basic 6.0odairfunez
 
Estructura de Datos
Estructura de DatosEstructura de Datos
Estructura de Datosluna_72
 

Similar a 101 queries sql aplicado - respuestas (20)

Comandos y funciones sql postgres
Comandos y funciones sql postgresComandos y funciones sql postgres
Comandos y funciones sql postgres
 
Sesión02 - Creación de objetos (Oracle)
Sesión02 - Creación de objetos (Oracle)Sesión02 - Creación de objetos (Oracle)
Sesión02 - Creación de objetos (Oracle)
 
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
 
Labo3 de base_de_datos
Labo3 de base_de_datosLabo3 de base_de_datos
Labo3 de base_de_datos
 
Comandos mysql
Comandos mysqlComandos mysql
Comandos mysql
 
CREACION DE TABLAS
CREACION DE TABLASCREACION DE TABLAS
CREACION DE TABLAS
 
Manual sql
Manual sqlManual sql
Manual sql
 
Como utilizar sql en visual basic 6
Como utilizar sql en visual basic 6Como utilizar sql en visual basic 6
Como utilizar sql en visual basic 6
 
Base de-datos-ii
Base de-datos-iiBase de-datos-ii
Base de-datos-ii
 
Sql desde cero
Sql desde ceroSql desde cero
Sql desde cero
 
Tablas y tipos de datos
Tablas y tipos de datosTablas y tipos de datos
Tablas y tipos de datos
 
Sql
SqlSql
Sql
 
Como utilizar sql en visual basic 6
Como utilizar sql en visual basic 6Como utilizar sql en visual basic 6
Como utilizar sql en visual basic 6
 
Vista
VistaVista
Vista
 
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
 
Bases De Datos My Sql
Bases De Datos My SqlBases De Datos My Sql
Bases De Datos My Sql
 
SQL Visual Basic 6.0
SQL Visual Basic 6.0SQL Visual Basic 6.0
SQL Visual Basic 6.0
 
Estructura de Datos
Estructura de DatosEstructura de Datos
Estructura de Datos
 
Mysql
MysqlMysql
Mysql
 

Más de Byron Quisquinay

Manual del curso de sql fundamentos y práctica
Manual del curso de sql   fundamentos y prácticaManual del curso de sql   fundamentos y práctica
Manual del curso de sql fundamentos y prácticaByron Quisquinay
 
Curso de SQL Básico parte 1 de 10
Curso de SQL Básico parte 1 de 10Curso de SQL Básico parte 1 de 10
Curso de SQL Básico parte 1 de 10Byron Quisquinay
 
Comprendiendo UML para el área de desarrollo
Comprendiendo UML para el área de desarrollo Comprendiendo UML para el área de desarrollo
Comprendiendo UML para el área de desarrollo Byron Quisquinay
 
Casos de uso qué - cómo... por byron quisquinay
Casos de uso   qué - cómo... por byron quisquinayCasos de uso   qué - cómo... por byron quisquinay
Casos de uso qué - cómo... por byron quisquinayByron Quisquinay
 
Desarrollo (qué aplicar) - Normas y Estándares en la Programación Informática
Desarrollo (qué aplicar) - Normas y Estándares en la Programación InformáticaDesarrollo (qué aplicar) - Normas y Estándares en la Programación Informática
Desarrollo (qué aplicar) - Normas y Estándares en la Programación InformáticaByron Quisquinay
 

Más de Byron Quisquinay (14)

Curso de pl sql básico
Curso de pl sql básicoCurso de pl sql básico
Curso de pl sql básico
 
Curso de pl sql básico
Curso de pl sql básicoCurso de pl sql básico
Curso de pl sql básico
 
Curso de pl sql básico
Curso de pl sql básicoCurso de pl sql básico
Curso de pl sql básico
 
Curso de pl sql básico
Curso de pl sql básicoCurso de pl sql básico
Curso de pl sql básico
 
Curso de pl sql básico
Curso de pl sql básicoCurso de pl sql básico
Curso de pl sql básico
 
Curso de pl sql básico
Curso de pl sql básicoCurso de pl sql básico
Curso de pl sql básico
 
Curso de pl sql básico
Curso de pl sql básicoCurso de pl sql básico
Curso de pl sql básico
 
Curso de pl sql básico
Curso de pl sql básicoCurso de pl sql básico
Curso de pl sql básico
 
Manual del curso de sql fundamentos y práctica
Manual del curso de sql   fundamentos y prácticaManual del curso de sql   fundamentos y práctica
Manual del curso de sql fundamentos y práctica
 
Curso de SQL Básico parte 1 de 10
Curso de SQL Básico parte 1 de 10Curso de SQL Básico parte 1 de 10
Curso de SQL Básico parte 1 de 10
 
Comprendiendo UML para el área de desarrollo
Comprendiendo UML para el área de desarrollo Comprendiendo UML para el área de desarrollo
Comprendiendo UML para el área de desarrollo
 
Comprendiendo RUP
Comprendiendo   RUPComprendiendo   RUP
Comprendiendo RUP
 
Casos de uso qué - cómo... por byron quisquinay
Casos de uso   qué - cómo... por byron quisquinayCasos de uso   qué - cómo... por byron quisquinay
Casos de uso qué - cómo... por byron quisquinay
 
Desarrollo (qué aplicar) - Normas y Estándares en la Programación Informática
Desarrollo (qué aplicar) - Normas y Estándares en la Programación InformáticaDesarrollo (qué aplicar) - Normas y Estándares en la Programación Informática
Desarrollo (qué aplicar) - Normas y Estándares en la Programación Informática
 

101 queries sql aplicado - respuestas

  • 1. – Curso de SQL Aplicado Del Diccionario de Datos de Oracle 1. De las tablas de: Todos los Usuarios y todas las tablas, mostrar: a.Nombre de usuario. b.Fecha en que fue creado el usuario c.Cantidad de tablas por usuario. En este query usted deberá ordenar descendente por: a.nombre de usuario. select usuarios.username Usuario, usuarios.created Creado_el, count(tablas.table_name) Cantidad_tablas_usuario from all_users usuarios inner join all_tables tablas on usuarios.username = tablas.owner group by usuarios.username, usuarios.created order by usuarios.username desc; 2. De la tablas de: Todas las tablas, Todos los índices, todos los campos del índice se necesita: [Todas las Tablas] Nombe de la tabla Table Space Name [Todos los índices] Index Name Index Type Status [Todos los campos del índice] Column Name Column Position select tablas.table_name Nombre_tabla, tablas.tablespace_name Table_Space, indices.index_name Nombre_indice, indices.index_type Tipo_de_indice, indices.status Estatus_del_indice, columnas_indice.column_name Columna_en_indice, columnas_indice.column_position Posicion_columna_indice from all_tables tablas inner join all_indexes indices on tablas.table_name = indices.table_name inner join all_ind_columns columnas_indice on tablas.table_name = columnas_indice.table_name and indices.table_name = columnas_indice.table_name; 3. De las tablas de: Todos los Constrainst y todos los campos de los constraints: [Todos los Constraints] Constraint Name Constraint Type [Todos los campos del Constraint] Constraint Name select constraints.constraint_name constraints.constraint_type columnas_constraints.constraint_name from all_constraints constraints Nombre_constraint, Tipo_constraint, Nombre_constraint_campos
  • 2. – Curso de SQL Aplicado inner join all_cons_columns columnas_constraints on constraints.constraint_name = columnas_constraints.constraint_name 4. Con el uso de outer join cree una consulta que retorne todas las tablas que no tienen constraints. a. De todas las tablas y todos los comentarios de tablas: [Todas las Tablas] Nombe de la tabla Table Space Name [Todos los comentarios de tablas] Comments (all_tables, all_tab_comments) select tablas.table_name Nombre_tabla, tablas.tablespace_name Table_space, comentarios_tabla.comments Comentarios_tabla from all_tables tablas left outer join all_tab_comments comentarios_tabla on tablas.table_name = comentarios_tabla.table_name b. Con right outer join de todas las tablas y todos los comentarios de tablas muestre los campos que se le solicitan y en este caso de aquellas tablas que no tienen comentario: [Todas las Tablas] Nombe de la tabla Table Space Name [Todos los comentarios de tablas] Comments (all_tables, all_tab_comments) select tablas.table_name Nombre_tabla, tablas.tablespace_name Table_space, comentarios_tabla.comments Comentarios_tabla from all_tables tablas right outer join all_tab_comments comentarios_tabla on tablas.table_name = comentarios_tabla.table_name where comentarios_tabla.comments is null c. De una unión de todas las tablas y todos los índices, demuestre: a.Nombre de la tabla. b.Cantidad de Indices. select tablas.table_name Nombre_tabla, count(indices.index_name) Cantidad_indices from all_indexes indices inner join all_tables tablas on indices.table_name = tablas.table_name group by tablas.table_name 5. Del query 1: "De las tablas de: Todos los Usuarios y todas las tablas" con un filtro que retorne las tablas creadas a partir del 15 de diciembre del 2013. select usuarios.username Usuario, usuarios.created Creado_el, count(tablas.table_name) Cantidad_tablas_usuario from all_users usuarios inner join all_tables tablas
  • 3. – Curso de SQL Aplicado on inner join on where and group by usuarios.username = tablas.owner all_objects objetos tablas.table_name = objetos.object_name objetos.object_type = 'TABLE' objetos.created > to_date('15122013','ddmmyyyy') usuarios.username, usuarios.created order by usuarios.username desc; 6. De todos los campos de las tablas, todos los campos de constraints y todos los constraints: [Todos los campos] owner, table_name, column_id, column_name, data_type, data_length, data_precision, data_scale, nullable, data_default [Todos los campos de constraints] constraint_name {emplee left outer join sobre table_name y column_name, es decir que no importa que no tenga columnas con constraint} [Todos los constraints] constraint_type, {emplee left outer join sobre constraint_name de all_cons_columns y all_constraints es decir que no importa que no exista constraint} search_condition, index_name select campos.owner, campos.table_name, campos.column_id, campos.column_name, campos.data_type, campos.data_length, campos.data_precision, campos.data_scale, campos.nullable, campos.data_default, campos_constraints.constraint_name, constraints.constraint_type, constraints.search_condition, constraints.index_name from all_tab_columns campos left outer join all_cons_columns campos_constraints on campos.table_name = campos_constraints.table_name and campos.column_name = campos_constraints.column_name left outer join all_constraints constraints on campos_constraints.constraint_name = constraints.constraint_name order by campos.column_id 7. Del query 6 "De todos los campos de las tablas, todos los campos de constraints y todos los constraints" todos aquellos campos que constraints que contengan la letra 'P' select campos.owner,
  • 4. – Curso de SQL Aplicado campos.table_name, campos.column_id, campos.column_name, campos.data_type, campos.data_length, campos.data_precision, campos.data_scale, campos.nullable, campos.data_default, campos_constraints.constraint_name, constraints.constraint_type, constraints.search_condition, constraints.index_name from all_tab_columns campos left outer join all_cons_columns campos_constraints on campos.table_name = campos_constraints.table_name and campos.column_name = campos_constraints.column_name left outer join all_constraints constraints on campos_constraints.constraint_name = constraints.constraint_name where campos_constraints.column_name like '%P%' order by campos.column_id 8. De la tabla de todos los objetos (all_objects) aquellos registros en donde el campo object_type = 'TABLE' select objetos.* from all_objects objetos where objetos.object_type = 'TABLE'; 9. De la tabla de todos los objetos desplegar object_type con un conteo por el valor de ese campo agrupado por ese campo y ordenado por ese mismo campo. select objetos.object_type Tipo_de_Objeto, count(objetos.object_name) Cantidad_objeto from all_objects objetos group by objetos.object_type order by objetos.object_type; 10. Del query anterior 9: "De la tabla de todos los objetos desplegar object_type con un conteo..." en donde la fecha created es mayor que el 10 de diciembre del 2013. select objetos.object_type Tipo_de_Objeto, count(objetos.object_name) Cantidad_objeto from all_objects objetos where objetos.created > to_date('10122013','ddmmyyyy') group by objetos.object_type order by objetos.object_type 11. De la tabla de todos los constraints, desplegar aquellas tablas que tienen más de dos (2) constraint {se espera el uso de count, group by y having} select constraints.table_name nombre_tabla, count(constraints.constraint_name) cantidad_constraints from all_constraints constraints group by constraints.table_name having count(constraints.constraint_name) > 2
  • 5. – Curso de SQL Aplicado 12. De la tabla de todas las vistas (all_views) aquellas vistas cuyo nombre contienen la palabra CLIE o la palabra FACT o la palabra TIPO {se espera el uso de like y or}. select from where or or vistas.view_name all_views vistas vistas.view_name like '%CLIE%' vistas.view_name like '%FACT%' vistas.view_name like '%TIPO%'; 13. De la tabla de todas las secuencias (all_sequences) aquellas cuyo minvalue están en los valores 20, 100, 1000 y 500. {Se espera el uso de IN} select secuencias.* from all_sequences secuencias where secuencias.min_value in (20,100, 1000,500) 14. De la tabla de todos los objetos el campo object_type sus distintos valores cuando el object_type no contiene en su nombre las letras: EDI, SEQ, SCHE, PROC. {Se espera el uso de distinct y not like}. select from where and and and distinct object_type all_objects object_type not like object_type not like object_type not like object_type not like '%EDI%' '%SEQ%' '%SCHE%' '%PROC%' 15. De todos los objetos, el nombre del objeto, la fecha de creación, para los objetos tipo Vista y cuya fecha de creación está entre el primero y el quince de diciembre del 2013. {Se espera el uso de to_date() y betwen} select objetos.object_name Nombre_objeto, objetos.created Creado_el from all_objects objetos where objetos.object_type = 'VIEW' and objetos.created between to_date('01122013','ddmmyyyy') and to_date('15122013','ddmmyyyy') 16. De la tabla de todos los objetos: el tipo de objeto, la fecha de creación y un conteo por día. Cuando los objetos han sido creados entre el 02 y el 29 de diciembre del 2013, ordenada la información por tipo de objeto y fecha. select objetos.object_type Tipo_objeto, trunc(objetos.created) Creado_el, count(objetos.object_name) Cantidad_objetos from all_objects objetos where objetos.created between to_date('02122013','ddmmyyyy') and to_date('29122013','ddmmyyyy') group by objetos.object_type, trunc(objetos.created) order by objetos.object_type, trunc(objetos.created)
  • 6. – Curso de SQL Aplicado 17. De la tabla de todas las tablas el nombre de ellas cuyas primeras tres letras no son TBL. {Se espera el uso de substr y != o <>}. select tablas.table_name Nombre_tabla from all_tables tablas where substr(tablas.table_name, 1,3) != 'TBL' 18. Del query anterior 17, cuyas primeras tres letras no estén entre: TBL, TCG,TES. select tablas.table_name Nombre_tabla from all_tables tablas where substr(tablas.table_name, 1,3) not in ('TBL', 'TCG','TES') 19. De la tabla de todos los campos por tabla, aquellas tablas que tienen más de 20 campos. select campos_tablas.table_name Nombre_tabla, count(campos_tablas.column_name) Cantidad_campos from all_tab_columns campos_tablas group by campos_tablas.table_name having count(campos_tablas.column_name) > 20 20. De la tabla de todos los índices los distintos valores del campo index_type. select distinct indices.index_type tipo_indice from all_indexes indices 21. De la tabla de todos los objetos, el nombre y tipo de objeto cuyo año de creación es 2010. select objetos.object_type tipo_objeto, objetos.object_name nombre_objeto from all_objects objetos where to_char(objetos.created,'yyyy') = '2010'; 22. De la tabla de todos los constraints aquellos cuyo tipo es: P. select constraints.constraint_name from all_constraints constraints where constraints.constraint_type = 'P'; 23. De la tabla de todos los constraints aquellos cuyo tipo es P, el propietario es igual al usuario que está realizando el query y el estatus es distinto de ENABLED. select from where and and constraints.constraint_name all_constraints constraints constraints.constraint_type = 'P' constraints.owner = user constraints.status = 'ENABLED' 24. De todas las tablas el nombre de ellas con la primer letra en mayúsculas. select initcap(tablas.table_name) nombre_tabla
  • 7. – Curso de SQL Aplicado from all_tables tablas 25. De todos los objetos de la base de datos, aquellos cuyo campo last_ddl_time es mayor a la fecha 10/12/2013. select objetos.object_name Nombre_del_objeto from all_objects objetos where objetos.last_ddl_time > to_date('10122013','ddmmyyyy') De tablas del curso 26. Tabla de clientes con su estatus, desplegando identificador de cliente, nombre completo en un solo campo, identificador de estatus del cliente y leyenda del estatus del cliente. select cliente.id_cliente, cliente.primer_nombre||' '||cliente.segundo_nombre||' '||cliente.tercer_nombre||' '||cliente.primer_apellido||' '||cliente.segundo_apellido Nombre_completo, cliente.id_estatus, estatus.leyenda_estatus Estatus_Cliente from tbl_maestra_cliente cliente inner join tbl_maestra_estatus estatus on cliente.id_estatus = estatus.id_estatus 27. De clientes, su identificador, identificador de tipo de cliente y leyenda de tipo de cliente. select cliente.id_cliente, cliente.id_tipo_cliente, tipo_cliente.leyenda_tipo_cliente Tipo_cliente from tbl_maestra_cliente cliente inner join tbl_maestra_tipo_cliente tipo_cliente on cliente.id_tipo_cliente = tipo_cliente.id_tipo_cliente 28. De clientes, su identificador, nombres separado todo, identificador de serie de factura y serie asociada al cliente. select cliente.id_cliente, cliente.id_serie_factura, series.serie Serie_factura from tbl_maestra_cliente cliente inner join tbl_maestra_serie_factura series on cliente.id_serie_factura = series.id_serie_factura
  • 8. – Curso de SQL Aplicado 29. De cliente, su identificador, su nombre completo todo junto, su identificador de estatus, leyenda de estatus, identificador de tipo de cliente, leyenda de tipo de cliente, identificador de serie de factura asociado al cliente, serie de factura asociado. select cliente.id_cliente, cliente.primer_nombre||' '||cliente.segundo_nombre||' '||cliente.tercer_nombre||' '||cliente.primer_apellido||' '||cliente.segundo_apellido Nombre_completo, cliente.id_estatus, estatus.leyenda_estatus Estatus_Cliente, cliente.id_tipo_cliente, tipo_cliente.leyenda_tipo_cliente Tipo_cliente, cliente.id_serie_factura, series.serie Serie_factura from tbl_maestra_cliente cliente inner join tbl_maestra_estatus estatus on cliente.id_estatus = estatus.id_estatus inner join tbl_maestra_tipo_cliente tipo_cliente on cliente.id_tipo_cliente = tipo_cliente.id_tipo_cliente inner join tbl_maestra_serie_factura series on cliente.id_serie_factura = series.id_serie_factura 30. De cliente y datos de facturación, identificador de cliente, nombres del cliente de la maestra, nombres separado todo, nit, para ese cliente si posee datos distintos de factura, demostrar nombres facturables, nit y dirección. select cliente.id_cliente, cliente.primer_nombre, cliente.segundo_nombre, cliente.tercer_nombre, cliente.primer_apellido, cliente.segundo_apellido, cliente.nit, datos_factura.primer_nombre Primer_nombre_factura, datos_factura.segundo_nombre Segundo_nombre_factura , datos_factura.tercer_nombre Tercer_nombre_factura, datos_factura.primer_apellido Primer_apellido_factura, datos_factura.segundo_apellido segundo_apellido_factura, datos_factura.nit nit_factura, datos_factura.direccion direccion_factura from tbl_maestra_cliente cliente left outer join tbl_cliente_factura datos_factura on cliente.id_cliente = datos_factura.id_cliente 31. Del cliente y sus facturas, id de cliente, nombre del cliente todo junto, datos completos de la tabla de factura, asociando el estatus de la factura y demostrando la leyenda del estatus de la factura. select cliente.id_cliente, cliente.primer_nombre||' '||cliente.segundo_nombre||' '||cliente.tercer_nombre||' '||cliente.primer_apellido||' '||cliente.segundo_apellido Nombre_completo, factura.*, estatus_factura.leyenda_estatus Estatus_factura from tbl_maestra_cliente cliente inner join tbl_maestra_facturas factura on cliente.id_cliente = factura.id_cliente inner join tbl_maestra_estatus estatus_factura on factura.id_estatus = estatus_factura.id_estatus 32. De facturas y su estatus, identificador de factura, fechas relacionadas a la factura y su estatus.
  • 9. – Curso de SQL Aplicado select facturas.id_factura, facturas.fecha_creacion, facturas.fecha_emision, facturas.fecha_vencimiento, facturas.fecha_inicia_ciclo, facturas.fecha_finaliza_ciclo, facturas.id_estatus, estatus.leyenda_estatus estatus_factura from tbl_maestra_facturas facturas inner join tbl_maestra_estatus estatus on facturas.id_estatus = estatus.id_estatus 33. Del cliente y su cuenta corriente, identificador del cliente, nombre todo separado y todos los datos de la cuenta corriente. select cliente.id_cliente, cliente.primer_nombre, cliente.segundo_nombre, cliente.tercer_nombre, cliente.primer_apellido, cliente.segundo_apellido, cuenta_corriente.* from tbl_maestra_cliente cliente inner join tbl_cuenta_corriente cuenta_corriente on cliente.id_cliente = cuenta_corriente.id_cliente 34. De la factura y sus pagos, identificador de la factura y todos los datos de los pagos. select facturas.id_factura, pagos.* from tbl_maestra_facturas facturas left outer join tbl_maestra_pagos_factura pagos on facturas.id_cliente = pagos.id_cliente and facturas.id_factura = pagos.id_factura 35. De los pagos y su estatus, demostrando identificador de pago, identificador de factura, monto del pago, identificador del estatus del pago y leyenda del estatus del pago. select pagos.id_pago, pagos.id_estatus, pagos.id_factura, pagos.monto_pago, pagos.id_estatus, estatus.leyenda_estatus estatus_pago from tbl_maestra_pagos_factura pagos inner join tbl_maestra_estatus estatus on pagos.id_estatus = estatus.id_estatus 36. De los ajustes y su estatus, demostrando identificador de ajuste, identificador de factura, monto del ajuste, identificador del estatus del ajuste y leyenda del estatus del ajuste. select ajustes.id_ajuste, ajustes.id_estatus, ajustes.id_factura, ajustes.monto_pago, ajustes.id_estatus, estatus.leyenda_estatus estatus_pago from tbl_maestra_ajustes_factura ajustes inner join tbl_maestra_estatus estatus on ajustes.id_estatus = estatus.id_estatus
  • 10. – Curso de SQL Aplicado 37. De la factura, sus pagos y sus ajustes, con estatus de pagos y ajustes, demostrando datos importantes según usted considere. select facturas.id_factura, facturas.id_cliente, facturas.fecha_vencimiento, pagos.*, ajustes.* from tbl_maestra_facturas facturas left outer join tbl_maestra_pagos_factura pagos on facturas.id_cliente = pagos.id_cliente and facturas.id_factura = pagos.id_factura left outer join tbl_maestra_ajustes_factura ajustes on facturas.id_cliente = ajustes.id_cliente and facturas.id_factura = ajustes.id_factura 38. Del cliente y su cuenta corriente, cantidad de facturas, promedio facturado, total facturado. select cliente.id_cliente, count(cuenta_corriente.id_factura) Cantidad_facturas, avg(cuenta_corriente.total_facturado) Promedio_facturado, sum(cuenta_corriente.total_facturado) Total_facturado from tbl_maestra_cliente cliente inner join tbl_cuenta_corriente cuenta_corriente on cliente.id_cliente = cuenta_corriente.id_cliente group by cliente.id_cliente 39. Del cliente y su cuenta corriente, monto más alto facturado, monto más bajo facturado. select cliente.id_cliente, min(cuenta_corriente.total_facturado) Monto_mas_bajo_facturado, max(cuenta_corriente.total_facturado) Monto_mas_alto_facturado from tbl_maestra_cliente cliente inner join tbl_cuenta_corriente cuenta_corriente on cliente.id_cliente = cuenta_corriente.id_cliente group by cliente.id_cliente 40. Del pago datos que usted crea importantes, su tipo de pago, su origen y su operador. select pagos.id_pago, pagos.id_factura, pagos.id_cliente, pagos.fecha_pago, pagos.monto_pago, pagos.id_origen_pago, origen.leyenda_origen, pagos.id_operador_pago, operador.descripcion_operador from tbl_maestra_pagos_factura pagos inner join tbl_origen_pago origen on pagos.id_origen_pago = origen.id_origen_pago inner join tbl_operador_pago operador on pagos.id_operador_pago = operador.id_operador_pago 41. Del ajuste datos que usted crea importantes, su tipo de ajuste, su origen y su operador. select ajustes.id_ajuste, ajustes.id_factura, ajustes.id_cliente, ajustes.fecha_ajuste, ajustes.monto_pago, ajustes.id_origen_pago, origen.leyenda_origen, ajustes.id_operador_pago,
  • 11. – Curso de from inner join on inner join on SQL Aplicado operador.descripcion_operador tbl_maestra_ajustes_factura ajustes tbl_origen_ajuste origen ajustes.id_origen_pago = origen.id_origen_ajuste tbl_operador_ajuste operador ajustes.id_operador_pago = operador.id_operador_ajuste 42. Del cliente y sus facturas, datos que usted considere importantes, más días transcurridos desde la fecha de vencimiento de la factura y el día en que usted corre el query. select cliente.id_cliente, cliente.primer_nombre||' '||cliente.segundo_nombre||' '||cliente.tercer_nombre||' '||cliente.primer_apellido||' '||cliente.segundo_apellido Nombre_completo, factura.id_factura, factura.fecha_emision, factura.total_facturado, factura.fecha_vencimiento, trunc(sysdate-factura.fecha_vencimiento) Dias_vencida from tbl_maestra_cliente cliente inner join tbl_maestra_facturas factura on cliente.id_cliente = factura.id_cliente 43. Del cliente y sus facturas, datos importantes de aquellas facturas que tienen entre 31 y 61 días de vencimiento. select cliente.id_cliente, cliente.primer_nombre||' '||cliente.segundo_nombre||' '||cliente.tercer_nombre||' '||cliente.primer_apellido||' '||cliente.segundo_apellido Nombre_completo, factura.id_factura, factura.fecha_emision, factura.total_facturado, factura.fecha_vencimiento, trunc(sysdate-factura.fecha_vencimiento) Dias_vencida from tbl_maestra_cliente cliente inner join tbl_maestra_facturas factura on cliente.id_cliente = factura.id_cliente where trunc(sysdate-factura.fecha_vencimiento) between 31 and 61 44. Del cliente, sus facturas y su cuenta corriente, datos importantes de aquellas facturas que tienen entre 31 y 61 días de vencimiento y su saldo es mayor a cero. select cliente.id_cliente, cliente.primer_nombre||' '||cliente.segundo_nombre||' '||cliente.tercer_nombre||' '||cliente.primer_apellido||' '||cliente.segundo_apellido Nombre_completo, factura.id_factura, factura.fecha_emision, factura.total_facturado, factura.fecha_vencimiento, trunc(sysdate-factura.fecha_vencimiento) Dias_vencida, cuenta_corriente.saldo_factura from tbl_maestra_cliente cliente inner join tbl_maestra_facturas factura on cliente.id_cliente = factura.id_cliente inner join tbl_cuenta_corriente cuenta_corriente on cuenta_corriente.id_cliente = cliente.id_cliente and cuenta_corriente.id_cliente = factura.id_cliente and cuenta_corriente.id_factura = factura.id_factura where trunc(sysdate-factura.fecha_vencimiento) between 31 and 61 and cuenta_corriente.saldo_factura > 0 45. Del cliente y sus facturas, datos importantes y cantidad de facturas con más de un día vencidas.
  • 12. – Curso de SQL Aplicado select cliente.id_cliente, cliente.primer_nombre||' '||cliente.segundo_nombre||' '||cliente.tercer_nombre||' '||cliente.primer_apellido||' '||cliente.segundo_apellido Nombre_completo, factura.id_factura, factura.fecha_emision, factura.total_facturado, factura.fecha_vencimiento, trunc(sysdate-factura.fecha_vencimiento) Dias_vencida from tbl_maestra_cliente cliente inner join tbl_maestra_facturas factura on cliente.id_cliente = factura.id_cliente where trunc(sysdate-factura.fecha_vencimiento) > 1 46. Del cliente y sus facturas, demostrando la fecha más baja y alta de emisión de facturas. select cliente.id_cliente, cliente.primer_nombre||' '||cliente.segundo_nombre||' '||cliente.tercer_nombre||' '||cliente.primer_apellido||' '||cliente.segundo_apellido Nombre_completo, min(factura.fecha_emision) Fecha_mas_baja_emision, max(factura.fecha_emision) Fecha_mas_alta_emision from tbl_maestra_cliente cliente inner join tbl_maestra_facturas factura on cliente.id_cliente = factura.id_cliente group by cliente.id_cliente, cliente.primer_nombre||' '||cliente.segundo_nombre||' '||cliente.tercer_nombre||' '||cliente.primer_apellido||' '||cliente.segundo_apellido 47. Del cliente, sus facturas y su cuenta corriente, identificador del cliente, nombre completo junto, monto facturado total, monto pagado total, monto ajustado total, monto de saldo total y cantidad de días vencidas más alto. select cliente.id_cliente, cliente.primer_nombre||' '||cliente.segundo_nombre||' '||cliente.tercer_nombre||' '||cliente.primer_apellido||' '||cliente.segundo_apellido Nombre_completo, sum(factura.total_facturado) facturado_total, sum(cuenta_corriente.total_pagado) pagado_total, sum(cuenta_corriente.total_ajustado) ajustado_total, sum(cuenta_corriente.saldo_factura) saldo_total, max(trunc(sysdate-factura.fecha_vencimiento)) Dias_vencido_mas_alto from tbl_maestra_cliente cliente inner join tbl_maestra_facturas factura on cliente.id_cliente = factura.id_cliente inner join tbl_cuenta_corriente cuenta_corriente on cuenta_corriente.id_cliente = cliente.id_cliente and cuenta_corriente.id_cliente = factura.id_cliente and cuenta_corriente.id_factura = factura.id_factura group by cliente.id_cliente, cliente.primer_nombre||' '||cliente.segundo_nombre||' '||cliente.tercer_nombre||' '||cliente.primer_apellido||' '||cliente.segundo_apellido 48. De los pagos y su origen con un filtro que permita indicar un origen en específico. select pagos.id_pago, pagos.id_factura, pagos.id_cliente, pagos.fecha_pago, pagos.monto_pago, pagos.id_origen_pago, origen.leyenda_origen from tbl_maestra_pagos_factura pagos inner join tbl_origen_pago origen on pagos.id_origen_pago = origen.id_origen_pago where pagos.id_origen_pago = 1
  • 13. – Curso de SQL Aplicado 49. De los pagos, su estatus, su origen y su operador, demostrar para un operador (filtro) en específico, datos del pago, su estatus, su origen y su operador. select pagos.id_pago, pagos.id_factura, pagos.id_cliente, pagos.fecha_pago, pagos.monto_pago, pagos.id_origen_pago, origen.leyenda_origen, pagos.id_operador_pago, operador.descripcion_operador, pagos.id_estatus, estatus.leyenda_estatus estatus_pago from tbl_maestra_pagos_factura pagos inner join tbl_origen_pago origen on pagos.id_origen_pago = origen.id_origen_pago inner join tbl_operador_pago operador on pagos.id_operador_pago = operador.id_operador_pago inner join tbl_maestra_estatus estatus on pagos.id_estatus = estatus.id_estatus where pagos.id_operador_pago = 2 50. De los pagos y su estatus, cantidad de pagos por leyenda de estatus. select count(pagos.id_estatus) Cantidad_pagos, estatus.leyenda_estatus estatus_pago from tbl_maestra_pagos_factura pagos inner join tbl_maestra_estatus estatus on pagos.id_estatus = estatus.id_estatus group by estatus.leyenda_estatus Queries miscelaneos 51. Sabiendo que la primer fecha en que se emitiría una factura en el Sistema con tablas TBL_ es: 21/11/2000, construya un query que indique la cantidad de meses (en enteros) entre hoy y esa fecha. select trunc(months_between(sysdate, to_date('21112000','ddmmyyyy'))) Meses_Facturar from dual; 52. Sabiendo que la fecha de Inicio de ciclo de facturación es 21 de cada mes, la de fin de ciclo es un mes más que la de inicio, la de emisión es la de fin de ciclo y la de vencimiento es un mes más que la de emisión, construya un query que retorne esas fechas. select :fecha_facturacion, add_months(:fecha_facturacion,1) Fecha_fin_ciclo, add_months(:fecha_facturacion,1) Fecha_emision, add_months(:fecha_facturacion,2) Fecha_emision from dual 53. Basado en la tabla tbl_fechas_ciclos y teniendo la fecha de Activo de un cliente en 01/06/2013, construya un query que retorne todos los campos de esa tabla para su facturación próxima.
  • 14. – Curso de SQL Aplicado select ciclos.id_ciclo, ciclos.fecha_inicia_ciclo, ciclos.fecha_finaliza_ciclo, ciclos.fecha_emision, ciclos.fecha_vencimiento from tbl_fechas_ciclos ciclos where :fecha_activo between ciclos.fecha_inicia_ciclo and ciclos.fecha_finaliza_ciclo 54. Con la misma lógica del query anterior, una la tabla de clientes con la tabla de Fechas para los ciclos y demuestre de clientes el ID y de la tabla de fechas, todos sus campos. select ciclos.id_ciclo, ciclos.fecha_inicia_ciclo, ciclos.fecha_finaliza_ciclo, ciclos.fecha_emision, ciclos.fecha_vencimiento from tbl_maestra_cliente cliente inner join tbl_fechas_ciclos ciclos on cliente.id_ciclo = ciclos.id_ciclo where cliente.fecha_activo between ciclos.fecha_inicia_ciclo and ciclos.fecha_finaliza_ciclo 55. De la unión de user_sys_privs y all_users demuestre todos los datos de ambas tablas sin importar si hay datos en una en relación a la otra. select from full outer join on * user_sys_privs privilegios all_users usuarios privilegios.username = usuarios.username 56. De la cadena '*MIN=57789964*PID=205*RES=SUC*' cree un query que obtenga el valor de PID. select :cadena, instr(:cadena, :cadena_buscar), substr(:cadena, instr(:cadena, :cadena_buscar), length(:cadena)) pid_res, instr(substr(:cadena, instr(:cadena, :cadena_buscar), length(:cadena)), '*') res, substr(:cadena, instr(:cadena, :cadena_buscar), instr(substr(:cadena, instr(:cadena, :cadena_buscar), length(:cadena)), '*')-1) pid from dual 57. De tbl_maestra_cliente y tbl_cliente_factura los datos que usted crea útiles para mostrar en un reporte los clientes que tienen datos distintos para facturar, tome en cuenta que si no hay datos para facturar, siempre debe de mostrar los datos de la maestra de clientes. select cliente.id_cliente, cliente.primer_nombre, cliente.segundo_nombre, cliente.tercer_nombre, cliente.primer_apellido, cliente.segundo_apellido, cliente.nit, cliente.direccion, datos_factura.primer_nombre primer_nombre_factura, datos_factura.segundo_nombre segundo_nombre_factura, datos_factura.tercer_nombre tercer_nombre_factura, datos_factura.primer_apellido primer_apellido_factura, datos_factura.segundo_apellido segundo_apellido_factura, datos_factura.nit nit_factura, datos_factura.direccion direccion_factura from tbl_maestra_cliente cliente left outer join tbl_cliente_factura datos_factura
  • 15. – Curso de SQL Aplicado on cliente.id_cliente = datos_factura.id_cliente 58. Del diccionario de datos se necesita que cree un query que permita hacer el create de cualquier tabla, incluyendo, campos, tipo, ancho, valor default, constraints. select campos.column_name, campos.data_type, campos.data_length, campos.data_precision, campos.data_scale, campos.nullable, campos.data_default data_default, campos_constraints.constraint_name, constraints.constraint_type, constraints.search_condition, constraints.r_constraint_name, referencia_constraint.table_name, referencia_constraint.column_name from all_tab_columns campos left outer join all_cons_columns campos_constraints on campos.table_name = campos_constraints.table_name and campos.column_name = campos_constraints.column_name left outer join all_constraints constraints on campos_constraints.constraint_name = constraints.constraint_name left outer join all_cons_columns referencia_constraint on constraints.r_constraint_name = referencia_constraint.constraint_name where campos.table_name = :table_name order by campos.column_id 59. Cree un query que muestre el primer día del año según la fecha del Sistema, también el primer día del mes. select trunc(sysdate, 'yyyy') primer_dia_anio, trunc(sysdate, 'mm') primer_dia_mes from dual 60. Diseñe un query que demuestre el primer día del mes y el último día del mes. select trunc(sysdate, 'mm') primer_dia_mes, add_months(trunc(sysdate, 'mm'),1)-1 ultimo_dia_mes from dual 61. Diseñe un query que demuestre la fecha así: 'Viernes 3 enero 2014'. select to_char(sysdate, 'day dd month yyyy','nls_date_language=spanish') from dual 62. Construya un query que busque todos los pagos validos de tbl_maestra_pagos. select pagos.* from tbl_maestra_pagos_factura pagos where pagos.id_estatus = 8 63. De la cadena '*MIN=57789964*PID=205*RES=SUC*' se necesita que los * sean reemplazados por %.
  • 16. – Curso de SQL Aplicado select replace(:cadena, '*', '%') from dual 64. Selecciones los datos de la tabla all_tab_privs_recd cuando el campo grantee = user. 64. Selecciones los datos de la tabla all_tab_privs_recd cuando el campo grantee = user. Select * from all_tab_privs_recd where grantee = user 65. Cree un select con union de los datos de table_privilege_map y system_privilege_map. select privilege, name from table_privilege_map union select privilege, name from system_privilege_map 66. Diseñe un query que muestre el usuario que más objetos ha creado en la base de datos. select usuario, cantidad from ( select objetos.owner usuario, count(object_name) cantidad from all_objects objetos group by objetos.owner order by cantidad desc ) objetos_creados where rownum = 1 67. Construya un query que una tbl_maestra_cliente con tbl_maestra_ciclos y que muestre datos significativos. select cliente.id_cliente, cliente.primer_nombre, cliente.primer_apellido, cliente.fecha_activo, ciclos.id_ciclo, ciclos.leyenda_ciclo from tbl_maestra_cliente cliente inner join tbl_maestra_ciclos ciclos on cliente.id_ciclo = ciclos.id_ciclo order by cliente.id_cliente 68. Diseñe un query que una tbl_maestra_ciclos y tbl_fechas_ciclos y muestre datos significativos. select ciclos.id_ciclo, ciclos.leyenda_ciclo, fechas_ciclo.* from tbl_maestra_ciclos ciclos inner join tbl_fechas_ciclos fechas_ciclo on ciclos.id_ciclo = fechas_ciclo.id_ciclo 69. Construya un query que permita obtener los ajustes válidos a un período de tiempo. Esto de tbl_maestra_ajustes_factura.
  • 17. – Curso de select from where and SQL Aplicado * tbl_maestra_ajustes_factura ajustes ajustes.id_estatus = :id_estatus_valido (ajustes.fecha_ajuste >= :fecha_inicio and ajustes.fecha_ajuste <= :fecha_fin) 70. Construya un query que permita obtener los pagos válidos a un período de tiempo. Esto de tbl_maestra_pagos_factura. select from where and * tbl_maestra_pagos_factura pagos pagos.id_estatus = :id_estatus_valido (pagos.fecha_pago >= :fecha_inicio and pagos.fecha_pago <= :fecha_fin) 71. Muestre todas aquellas tablas que tienen un campo llamado OBJECT_ID. select * from all_tab_columns where column_name = 'OBJECT_ID' 72. Muestre la fecha menor y mayor de tbl_fechas_ciclos select min(fechas_ciclo.fecha_inicia_ciclo) Menor, max(fechas_ciclo.fecha_inicia_ciclo) Mayor from tbl_fechas_ciclos fechas_ciclo 73. Cree un query que permita idienticar si la pareja de fecha_inicia_ciclo y fecha_finaliza_ciclo están repetidas en tbl_fechas_ciclos select fechas_ciclo.fecha_inicia_ciclo, fechas_ciclo.fecha_inicia_ciclo, count(fechas_ciclo.id_ciclo) cantidad from tbl_fechas_ciclos fechas_ciclo group by fechas_ciclo.fecha_inicia_ciclo, fechas_ciclo.fecha_inicia_ciclo having count(fechas_ciclo.id_ciclo) > 1 74. Diseñe un query que unido con el cliente las fechas de facturación, cuando el cliente esta de Alta pero sin Actividad, muestre los días entre la fecha de activo y la fecha de fin de factura. select cliente.id_cliente, cliente.fecha_activo, fechas_ciclo.fecha_finaliza_ciclo, trunc(fechas_ciclo.fecha_finaliza_ciclo-cliente.fecha_activo) dias_facturar from tbl_maestra_cliente cliente inner join tbl_fechas_ciclos fechas_ciclo on cliente.id_ciclo = fechas_ciclo.id_ciclo where cliente.id_estatus = 1 and cliente.fecha_activo between fechas_ciclo.fecha_inicia_ciclo and fechas_ciclo.fecha_finaliza_ciclo 75. Construya un query que retorne la fecha del sistema en donde está instalada la base de datos.
  • 18. – Curso de SQL Aplicado select sysdate from dual De una cadena de valores ficticia de un CDR 76. Que sin importar cuál de las cadenas, retorne todos los datos de la cadena pasada, basado en la tabla de valores de la cadena arriba indicando. select substr(:cadena, substr(:cadena, substr(:cadena, substr(:cadena, substr(:cadena, substr(:cadena, substr(:cadena, substr(:cadena, substr(:cadena, substr(:cadena, substr(:cadena, from dual 1,2) 3,9) 12,4) 16,8) 24,4) 28,13) 41,13) 54,14) 68,4) 72,4) 76,4) Tipo_registro, Archivo_id, Codigo_uso, Fecha, Hora, MIN, Origen, Destino, Hora_Inicio, Hora_Fin, Duracion 77. De cualquiera de las cadenas retorne MIN, Codigo Uso, Hora Inicio, Hora Fin y duración. select substr(:cadena, substr(:cadena, substr(:cadena, substr(:cadena, substr(:cadena, from dual 28,13) 12,4) 68,4) 72,4) 76,4) MIN, Codigo_uso, Hora_Inicio, Hora_Fin, Duracion 78. De cualquiera de las cadenas retorne MIN, Codigo Uso, Hora Inicio, Hora Fin y duración en minutos. select substr(:cadena, 28,13) MIN, substr(:cadena, 12,4) Codigo_uso, substr(:cadena, 68,4) Hora_Inicio, substr(:cadena, 72,4) Hora_Fin, (substr(:cadena, 76,4)/60) Duracion_minutos from dual 79. De cualquiera de las cadenas retorne MIN, Codigo Uso, Hora Inicio, Hora Fin y duración en minutos redondeado al minuto superior. select substr(:cadena, 28,13) MIN, substr(:cadena, 12,4) Codigo_uso, substr(:cadena, 68,4) Hora_Inicio, substr(:cadena, 72,4) Hora_Fin, ceil(substr(:cadena, 76,4)/60) Duracion_minutos_redondeado from dual
  • 19. – Curso de SQL Aplicado 80. De cualquiera de las cadenas retorne MIN, Codigo Uso, Hora Inicio, Hora Fin y duración en minutos redondeado al minuto Inferior. select substr(:cadena, 28,13) MIN, substr(:cadena, 12,4) Codigo_uso, substr(:cadena, 68,4) Hora_Inicio, substr(:cadena, 72,4) Hora_Fin, floor(substr(:cadena, 76,4)/60) Duracion_minutos_redondeado from dual 81. De cualquiera de las cadenas retorne MIN, Codigo Uso, Origen, Destino, Hora Inicio, Hora fin y duración en minutos redondeado al minuto superior. select substr(:cadena, 28,13) MIN, substr(:cadena, 12,4) Codigo_uso, substr(:cadena, 41,13) Origen, substr(:cadena, 54,14) Destino, substr(:cadena, 68,4) Hora_Inicio, substr(:cadena, 72,4) Hora_Fin, ceil(substr(:cadena, 76,4)/60) Duracion_redondeado from dual 82. De cualquiera de las cadenas retorne MIN, Codigo Uso, Origen quitando de la izquierda la cadena 00502, Destino quitando de la izquierda de la cadena 00502, Hora Inicio, Hora fin y duración en minutos redondeado al minuto superior. Solución 1: Incorrecta: select substr(:cadena, 28,13) substr(:cadena, 12,4) ltrim(substr(:cadena, 41,13),'00502') ltrim(substr(:cadena, 54,14),'00502') substr(:cadena, 68,4) substr(:cadena, 72,4) ceil(substr(:cadena, 76,4)/60) from dual Solución correcta: MIN, Codigo_uso, Origen, Destino, Hora_Inicio, Hora_Fin, Duracion_redondeado select substr(:cadena, 28,13) MIN, substr(:cadena, 12,4) Codigo_uso, decode(substr(:cadena, 41,5), '00502', substr(:cadena, 46,9), substr(:cadena, 41,13)) Origen, decode(substr(:cadena, 54,5),'00502', substr(:cadena, 59,9), substr(:cadena, 54,14)) Destino, substr(:cadena, 68,4) Hora_Inicio, substr(:cadena, 72,4) Hora_Fin, ceil(substr(:cadena, 76,4)/60) Duracion_redondeado from dual 83. De cualquiera de las cadenas retorne MIN, Codigo Uso, Origen y país basado en códigos proveídos arriba, Destino y país basado en códigos proveídos arriba, Hora Inicio, Hora fin y duración en minutos redondeado al minuto superior. select substr(:cadena, 28,13) MIN, substr(:cadena, 12,4) Codigo_uso, case when substr(:cadena, 41,5) = '00502' then 'GUATEMALA' when substr(:cadena, 41,3) = '001' then 'ESTADOS UNIDOS' else 'NO DEFINIDO'
  • 20. – Curso de SQL Aplicado end as Pais_origen, substr(:cadena, 41,13) Origen, case when substr(:cadena, 54,5) = '00502' then 'GUATEMALA' when substr(:cadena, 54,3) = '001' then 'ESTADOS UNIDOS' else 'NO DEFINIDO' end as Pais_destino, substr(:cadena, 54,14) Destino, substr(:cadena, 68,4) Hora_Inicio, substr(:cadena, 72,4) Hora_Fin, ceil(substr(:cadena, 76,4)/60) Duracion_redondeado from dual 84. De cualquiera de las cadenas retorne MIN, Código Uso, descripción de uso según tabla de Códigos de uso, Hora Inicio, Hora Fin y duración en minutos. select substr(:cadena, 28,13) MIN, substr(:cadena, 12,4) Codigo_uso, decode(substr(:cadena, 12,4), '8001', '9090', '9091', '9100', 'No Definido' ) Descripcion_uso, substr(:cadena, 68,4) Hora_Inicio, substr(:cadena, 72,4) Hora_Fin, substr(:cadena, 76,4)/60 Duracion_minutos from dual 'Llamada 'Llamada 'Consuta 'Llamada entrante', Local', Buzón de Voz', Internacional', 85. De cualquiera de las cadenas retorne Tipo de Registro, Descripción de Tipo de Registro, MIN, Código Uso, Hora Inicio, Hora Fin y duración. select substr(:cadena, 1,3) Tipo_registro, decode(substr(:cadena, 1,2), 'H1', 'Encabezado', 'T1', 'Fin de Archivo de CDRs', 'D1', 'Línea de Detalle de CDR', 'No definido' ) Descripcion_tipo_registro, substr(:cadena, 28,13) MIN, substr(:cadena, 12,4) Codigo_uso, substr(:cadena, 41,13) Origen, substr(:cadena, 54,14) Destino, substr(:cadena, 68,4) Hora_Inicio, substr(:cadena, 72,4) Hora_Fin, substr(:cadena, 76,4) Duracion from dual 86. De cualquiera de las cadenas retorne MIN, Codigo Uso, Fecha, Hora Inicio, Hora Fin y duración, convierta en fecha Hora Inicio, agregue la fecha para ello, este valor será llamado Fecha_hora_incio, haga lo mismo con Hora Fin. select substr(:cadena, 28,13) MIN, substr(:cadena, 12,4) Codigo_uso, substr(:cadena, 41,13) Origen, substr(:cadena, 54,14) Destino, substr(:cadena, 68,4) Hora_Inicio, substr(:cadena, 72,4) Hora_Fin, substr(:cadena, 76,4) Duracion_redondeado, to_date(substr(:cadena, 16,8)||substr(:cadena, 68,4), 'ddmmyyyyhh24mi') Fecha_hora_inicio, to_date(substr(:cadena, 16,8)||substr(:cadena, 72,4), 'ddmmyyyyhh24mi') Fecha_hora_fin from dual
  • 21. – Curso de SQL Aplicado 87. De cualquiera de las cadenas retorne MIN, Codigo Uso, Fecha, Hora Inicio, Hora Fin y duración, convierta en fecha Hora Inicio, agregue la fecha para ello, este valor será llamado Fecha_hora_incio, haga lo mismo con Hora Fin, calcule la duración en base a Fecha_hora_inicio y Fecha_hora_fin. select substr(:cadena, 28,13) MIN, substr(:cadena, 12,4) Codigo_uso, substr(:cadena, 41,13) Origen, substr(:cadena, 54,14) Destino, substr(:cadena, 68,4) Hora_Inicio, substr(:cadena, 72,4) Hora_Fin, substr(:cadena, 76,4) Duracion_redondeado, to_date(substr(:cadena, 16,8)||substr(:cadena, 68,4), 'ddmmyyyyhh24mi') Fecha_hora_inicio, to_date(substr(:cadena, 16,8)||substr(:cadena, 72,4), 'ddmmyyyyhh24mi') Fecha_hora_fin, to_date(substr(:cadena, 16,8)||substr(:cadena, 72,4), 'ddmmyyyyhh24mi') - to_date(substr(:cadena, 16,8)||substr(:cadena, 68,4), 'ddmmyyyyhh24mi') Duracion from dual 88. De cualquiera de las cadenas retorne MIN quitando de la izquierda de la cadena los valores '00502', Codigo Uso, Hora Inicio, Hora Fin y duración. select decode(substr(:cadena, 28,5), '00502', substr(:cadena, 33,8), substr(:cadena, 28,13) ) MIN, substr(:cadena, substr(:cadena, substr(:cadena, substr(:cadena, substr(:cadena, substr(:cadena, from dual 12,4) Codigo_uso, 41,13) Origen, 54,14) Destino, 68,4) Hora_Inicio, 72,4) Hora_Fin, 76,4) Duracion_redondeado 89. De cualquiera de las cadenas retorne MIN, fecha, hora_inicio, hora_fin, duración, origen y destino, convirtiendo a número Min, Origen y Destino. select substr(:cadena, 28,13) MIN, substr(:cadena, 12,4) Codigo_uso, to_number(substr(:cadena, 41,13)) Origen, to_number(substr(:cadena, 54,14)) Destino, substr(:cadena, 68,4) Hora_Inicio, substr(:cadena, 72,4) Hora_Fin, substr(:cadena, 76,4) Duracion_redondeado from dual 90. De cualquiera de las cadenas retorne MIN, fecha agregando el valor Hora , hora_inicio, hora_fin, duración, origen y destino, convirtiendo a número Min, Origen y Destino. select substr(:cadena, 28,13) MIN, substr(:cadena, 16,8)||' '||substr(:cadena, 68,4)||' '||substr(:cadena, 72,4) Fecha_hora_inicio_fin, substr(:cadena, 12,4) Codigo_uso, to_number(substr(:cadena, 41,13)) Origen, to_number(substr(:cadena, 54,14)) Destino, substr(:cadena, 68,4) Hora_Inicio, substr(:cadena, 72,4) Hora_Fin, substr(:cadena, 76,4) Duracion_redondeado from dual
  • 22. – Curso de SQL Aplicado 91. De cualquiera de las cadenas retorne MIN, fecha agregando el valor Hora convierta este dato en fecha se llamará Fecha_hora_cdr, hora_inicio, hora_fin, duración, origen y destino, convirtiendo a número Min, Origen y Destino. select substr(:cadena, 28,13) MIN, substr(:cadena, 16,8)||' '||substr(:cadena, 24,4) Fecha_hora_cdr, substr(:cadena, 12,4) Codigo_uso, to_number(substr(:cadena, 41,13)) Origen, to_number(substr(:cadena, 54,14)) Destino, substr(:cadena, 68,4) Hora_Inicio, substr(:cadena, 72,4) Hora_Fin, substr(:cadena, 76,4) Duracion from dual 92. De cualquiera de las cadenas retorne MIN, fecha agregando el valor Hora convierta este dato en fecha se llamará Fecha_hora_cdr, origen ancho de origen, destino y ancho de destino. select substr(:cadena, 28,13) MIN, substr(:cadena, 16,8)||' '||substr(:cadena, 24,4) Fecha_hora_cdr, substr(:cadena, 12,4) Codigo_uso, substr(:cadena, 41,13) Origen, length(substr(:cadena, 41,13)) ancho_origen, substr(:cadena, 54,14) Destino, length(substr(:cadena, 54,14)) ancho_destino from dual 93. De cualquiera de las cadenas retorne si el tipo registro es encabezado: Tipo_registro, Archivo_id, Codigo_uso, Fecha. select decode(substr(:cadena, 1,2), 'H1',substr(:cadena, 1,2)||' '||substr(:cadena, 3,9)||' '||substr(:cadena, 12,4), substr(:cadena, 16,8), null ) Si_es_encabezado from dual 94. De cualquiera de las cadenas retorne si el tipo registro es detalle: Fecha, Hora, Hora Inicio, Hora Fin, MIN, Origen y Destino. select decode(substr(:cadena, 1,2), 'D1',substr(:cadena, 16,8)||' '||substr(:cadena, 24,4)||' '||substr(:cadena, 68,4)||' '||substr(:cadena, 72,4)||' '||substr(:cadena, 28,13)||' '||substr(:cadena, 41,13)||' '||substr(:cadena, 54,14), null ) Si_es_encabezado from dual
  • 23. – Curso de SQL Aplicado 95. Imaginando que hay una tabla así: tbl_cdr_original (Tipo_registro, Archivo_id, Codigo_uso, Fecha_cdr, Hora_cdr, telefono, telefono_Origen, telefono_Destino, Hora_Inicio, Hora_Fin, Dureacion), entonces con un query genera la instrucción insert para guardar cada campo sin importar la cadena. select 'tbl_cdr_original (Tipo_registro, Archivo_id, Codigo_uso, Fecha_cdr, Hora_cdr, telefono, telefono_Origen, telefono_Destino, Hora_Inicio, Hora_Fin, Dureacion) values(' || substr(:cadena, 1,2)||','||substr(:cadena, 3,9)||','||substr(:cadena, 12,4)||','||substr(:cadena, 16,8)||','||substr(:cadena, 24,4)||','||substr(:cadena, 28,13)||','||substr(:cadena, 41,13)||','||substr(:cadena, 54,14)||','||substr(:cadena, 68,4)||','||substr(:cadena, 72,4)||','||substr(:cadena, 76,4)||');' Sentencia_Insercion from dual 96. Imaginando que hay una tabla así: tbl_cdr_original (Tipo_registro, Archivo_id, Codigo_uso, Fecha_cdr, Hora_cdr, telefono, telefono_Origen, telefono_Destino, Hora_Inicio, Hora_Fin, Dureacion), entonces con un query genera la instrucción insert para guardar cada campo sin importar la cadena, cuando el Tipo_registo es D1. select decode(substr(:cadena, 1,2), 'D1', 'tbl_cdr_original (Tipo_registro, Archivo_id, Codigo_uso, Fecha_cdr, Hora_cdr, telefono, telefono_Origen, telefono_Destino, Hora_Inicio, Hora_Fin, Dureacion) values(' ||substr(:cadena, 1,2)||','||substr(:cadena, 3,9)||','||substr(:cadena, 12,4)||','||substr(:cadena, 16,8)||','||substr(:cadena, 24,4)||','||substr(:cadena, 28,13)||','||substr(:cadena, 41,13)||','||substr(:cadena, 54,14)||','||substr(:cadena, 68,4)||','||substr(:cadena, 72,4)||','||substr(:cadena, 76,4)||');', NULL )Sentencia_Insercion from dual 97. Si el tipo de registro es detalle, retorne: Min convertido a número, origen convertido a número, destino convertido a número. select decode(substr(:cadena, 1,2), 'D1', to_number(substr(:cadena, 28,13))||' '||to_number(substr(:cadena, 41,13))||' '||to_number(substr(:cadena, 54,14)), NULL )valores from dual 98. Si el tipo de registro es detalle, retorne: Min convertido a número, origen convertido a número, destino convertido a número, fecha con hora agregado, convertido a fecha, Hora Inicio con fecha agregado convertido a fecha, Hora fin con fecha agregado convertido a fecha . select decode(substr(:cadena, 1,2), 'D1', to_number(substr(:cadena, 28,13))||' '||to_number(substr(:cadena, 41,13))||' '||to_number(substr(:cadena, 54,14))||' '||to_date(substr(:cadena, 16,8)||substr(:cadena, 24,4), 'ddmmyyyyhh24mi')||' '||to_date(substr(:cadena, 16,8)||substr(:cadena, 68,4), 'ddmmyyyyhh24mi')||' '||to_date(substr(:cadena, 16,8)||substr(:cadena, 72,4), 'ddmmyyyyhh24mi'), NULL )Sentencia_Insercion from dual 99. Si el tipo de registro es Encabezado o fin de archivo que demuestre el archivo id. select decode(substr(:cadena, 1,2), 'H1', substr(:cadena, 3,9),
  • 24. – Curso de SQL Aplicado 'T1', substr(:cadena, 3,9), NULL ) Archivo_id from dual 100. Un query que retorne la leyenda 'He realizado 101 Queries... :-)'. select 'He realizado 101 Queries... :-)' from dual 101. Un query que retorne la leyenda 'Ahora si son 101'. select 'Ahora si son 101' from dual