You are on page 1of 13

Consultas SQL

Gerencia de Ingeniera de Red / Subgerencia de Optimizacin de Red

Preparado por Rodolfo Hurtado V 20090128

SQL (Segn Wikipedia)

El Lenguaje de consulta estructurado (Structured Query Language) es un lenguaje de acceso a bases de datos relacionales que permite especificar diversos tipos de operaciones sobre stas. Una de sus caractersticas es el manejo del lgebra y el clculo relacional permitiendo lanzar consultas con el fin de recuperar -de una forma sencilla- informacin de inters de una base de datos, as como tambin hacer cambios sobre la misma.

SQL Select (I)

Su estructura bsica es:

Select [campos] from [tabla1, tabla2, ] {where [condicion1 and/or condicin2 ] group by [campo_i, campo_ii, ] order by [campo_x, campo_y, ]}
Por ejemplo: select * from p_nbsc_traffic

select * from p_nbsc_traffic Where To_Char(period_start_time,'yyyymmdd') >= '20090127'

SQL Select (II): Ejemplo aplicado

Busquemos el trfico HSDPA por celda (NSN) para ayer.

Para ello necesitamos la frmula: Sum(MAC_D_PDU_TOT)*336/(1024*1024*8) Ademas necesitamos saber la tabla de origen de los datos: NOKRWW_PV_HSDPAW_MNC1_RAW
La llave de esta tabla es wcel_id

Sabiendo esto podemos ejecutar la consulta: select wcel_id, To_Char(PERIOD_START_TIME,'yyyy-mm-dd') as FECHA, sum(MAC_D_PDU_TOT)*336/(1024*1024*8) as HSDPA_608a_MB from sysdate te da la NOKRWW_PV_HSDPAW_MNC1_RAW fecha de hoy y where PERIOD_START_TIME >= trunc(sysdate-1) systate -1 la de ayer. and PERIOD_START_TIME < trunc(sysdate) Trunc deja slo la group by wcel_id, fecha y elimina To_Char(PERIOD_START_TIME,'yyyy-mm-dd') hh:mm:ss

SQL Select (II): Ejemplo aplicado

Busquemos el trfico HSDPA por celda (NSN) para ayer.

Para ello necesitamos la frmula: Sum(MAC_D_PDU_TOT)*336/(1024*1024*8) Ademas necesitamos saber la tabla de origen de los datos: NOKRWW_PV_HSDPAW_MNC1_RAW
La llave de esta tabla es wcel_id
Nos interesa tener el trfico diario (sum es una funcin de agregacin como max o avg), por lo que tenemos que agrupar por agn criterio: por celda para ayer.

Sabiendo esto podemos ejecutar la consulta: select wcel_id, To_Char(PERIOD_START_TIME,'yyyy-mm-dd') as FECHA, sum(MAC_D_PDU_TOT)*336/(1024*1024*8) as HSDPA_608a_MB from NOKRWW_PV_HSDPAW_MNC1_RAW where PERIOD_START_TIME >= trunc(sysdate-1) and PERIOD_START_TIME < trunc(sysdate) group by wcel_id, To_Char(PERIOD_START_TIME,'yyyy-mm-dd')

SQL Select (II): Ejemplo aplicado

Busquemos el trfico HSDPA por celda (NSN) para ayer.

Para ello necesitamos la frmula: Sum(MAC_D_PDU_TOT)*336/(1024*1024*8) WCEL_ID FECHA HSDPA_608A_MB Ademas necesitamos saber la tabla de origen de los datos: 1000000720800 2009-01-26 2502.2285785675 NOKRWW_PV_HSDPAW_MNC1_RAW 1000000720800 2009-01-27 690.624538421631

1000000727500 2009-01-26 2893.45659828186 La llave de esta tabla es wcel_id 1000000727500 2009-01-27 2398.07664871216 1000000727600 2009-01-27 467.156953811646 Sabiendo esto podemos ejecutar la consulta: 1000000940500 2009-01-26 366.747259140015 select wcel_id, 1000000940500 2009-01-27 550.443586349487 To_Char(PERIOD_START_TIME,'yyyy-mm-dd') as FECHA, 1000000941800 2009-01-26 336.78334236145 sum(MAC_D_PDU_TOT)*336/(1024*1024*8) as HSDPA_608a_MB 1000000941800 2009-01-27 380.164615631104 from 1000000983400 2009-01-26 5428.46751594543 NOKRWW_PV_HSDPAW_MNC1_RAW 1000000983400 2009-01-27 3340.12776947021 where PERIOD_START_TIME >= trunc(sysdate-1) group by wcel_id, To_Char(PERIOD_START_TIME,'yyyy-mm-dd')

SQL Select (III): Ejemplo aplicado

Tenemos los datos, pero que celda es la 1000000720800?

Para esto tenemos la tabla Objects


Esta tabla posee un campo llamado int_id y otro campo llamado Name. los que utilizaremos para reemplazar el wcel_id por el nemonico. Podemos listar las celdas y su id con la siguiente query: SELECT DISTINCT(int_id) AS ID, name AS Wcell FROM objects WHERE object_class=813 En particular, la consulta anterior es tambin una tabla! por lo que es posible utilizarla para obtener los nombres de las celdas de la consulta de trfico.

SQL Select (IV): Ejemplo aplicado

Entonces:

--Aprovecho de mostrar cmo se colocan comentarios! --Este es un comentario de una lnea /*Y este un Bloque comentado*/ select Name, --de nuestra tabla-consulta! To_Char(PERIOD_START_TIME,'yyyy-mm-dd') as FECHA, sum(MAC_D_PDU_TOT)*336/(1024*1024*8) as HSDPA_608a_MB from NOKRWW_PV_HSDPAW_MNC1_RAW data, (SELECT DISTINCT(int_id) AS ID, Name FROM objects WHERE object_class=813) wcel

Le podemos colocar nombre o alias a las tablas. Esto es particularmente til cuando dos tablas tienen un campo llamado de la misma forma

Nos falta decir en la consulta cmo cruzar la informacin (como un buscarv en excel). Para esto utilizaremos los campos wcel_id de la tabla data e int_id de la tabla wcel.

SQL Select (IV): Ejemplo aplicado

Entonces:

--Aprovecho de mostrar cmo se colocan comentarios! --Este es un comentario de una lnea /*Y este un Bloque comentado*/ select Name, --de nuestra tabla-consulta! To_Char(PERIOD_START_TIME,'yyyy-mm-dd') as FECHA, sum(MAC_D_PDU_TOT)*336/(1024*1024*8) as HSDPA_608a_MB from NOKRWW_PV_HSDPAW_MNC1_RAW data, (SELECT DISTINCT(int_id) AS ID, Name FROM objects WHERE object_class=813) wcel

Le podemos colocar nombre o alias a las tablas. Esto es particularmente til cuando dos tablas tienen un campo llamado de la misma forma

Object_class Nos falta decir 813 corresponde en la consulta cmo cruzar la informacin a wcell. (como un buscarv en excel). Para esto utilizaremos los campos wcel_id de la tabla data e int_id de la tabla El campo Name wcel. contiene el nemnico

SQL Select (IV): Ejemplo aplicado

Entonces:

--Aprovecho de mostrar cmo se colocan comentarios! --Este es un comentario de una lnea /*Y este un Bloque comentado*/ select Name, --de nuestra tabla-consulta! To_Char(PERIOD_START_TIME,'yyyy-mm-dd') as FECHA, sum(MAC_D_PDU_TOT)*336/(1024*1024*8) as HSDPA_608a_MB from NOKRWW_PV_HSDPAW_MNC1_RAW data, (SELECT DISTINCT(int_id) AS ID, Name FROM objects WHERE object_class=813) wcel where wcel_id - 1000000000000 = int_id and PERIOD_START_TIME >= trunc(sysdate-1) GROUP BY Name, Nos falta decir en la consulta To_Char(d.PERIOD_START_TIME,'yyyy-mm-dd') cmo cruzar la informacin

Le podemos colocar nombre o alias a las tablas. Esto es particularmente til cuando dos tablas tienen un campo llamado de la misma forma

(como un buscarv en excel). Para esto utilizaremos los campos wcel_id de la tabla data e int_id de la tabla wcel.

SQL Select (IV): Ejemplo aplicado

Le podemos colocar nombre o alias a las FECHA HSDPA_608A_MB --Aprovecho de mostrar cmo se NAME comentarios! colocan tablas. Esto es --Este es un comentario de una lnea particularmente til /*Y este un CCVC2U13_3 2009-01-26 13510.5888519287 Bloque comentado*/ cuando dos tablas tienen OLMG1U05_3 2009-01-26 un campo llamado de la 12047.0189723969 select Name, --de nuestra tabla-consulta! To_Char(PERIOD_START_TIME,'yyyy-mm-dd') as FECHA, 2009-01-26 TGCC1U13_1 11861.2467899323 misma forma

Entonces:

sum(MAC_D_PDU_TOT)*336/(1024*1024*8) as HSDPA_608a_MB LOCLBU13_3 2009-01-26 11602.3845233917 from LECHEU05_1 2009-01-26 10531.1032218933 NOKRWW_PV_HSDPAW_MNC1_RAW data, (SELECT DISTINCT(int_id) AS ID, Name FROM objects WHERE object_class=813) wcel QLTC1U05_2 2009-01-26 10508.8000946045 where wcel_id - 1000000000000 = int_id CCVC2U13_3 2009-01-27 9948.83892059326 and PERIOD_START_TIME >= trunc(sysdate-1) SOTC1U13_3 2009-01-26 falta decir en la consulta 9532.13747406006 GROUP BY Name, Nos To_Char(d.PERIOD_START_TIME,'yyyy-mm-dd') REFUFU13_2 2009-01-26 cruzar9518.27243041992 cmo la informacin

LOCLBU13_3 HURC1U13_2

(como un buscarv en excel). 2009-01-27 9116.01333045959 Para 2009-01-26 esto utilizaremos los 8904.0726184845 campos wcel_id de la tabla data e int_id de la tabla wcel.

SQL Select (V): Ejemplo aplicado

Agreguemos ahora una columna con el RNC:

select rnc.Name, wcell.Name, To_Char(data.PERIOD_START_TIME,'yyyy-mm-dd hh24') as FECHA, sum(data.MAC_D_PDU_TOT)*336/(1024*1024*8) as HSDPA_608a_MB from NOKRWW_PV_HSDPAW_MNC1_RAW data, (SELECT DISTINCT(int_id) AS ID, Name FROM objects WHERE object_class=813) wcell, (SELECT DISTINCT(int_id) AS ID, Name FROM objects WHERE object_class=811) rnc where data.rnc_id - 1000000000000 = r.id AND data.wcel_id - 1000000000000 = o.id and data.PERIOD_START_TIME >= trunc(sysdate-1) and data.PERIOD_START_TIME < trunc(sysdate) GROUP BY rnc.Name, wcell.Name, Ojo! Las columnas para rnc To_Char(data.PERIOD_START_TIME,'yyyy-mm-dd hh24')

y para wcell tienen el mismo nombre! Por lo que hay que referenciarlas como [tabla].[columna]. Es muy til ponerle alias cortos y descriptivos!

SQL Select (VI): Ejemplo aplicado

Incluyamos tambin el trfico de voz para el sitio Algarrobo:

select rnc.Name, wcell.Name, To_Char(data.PERIOD_START_TIME,'yyyy-mm-dd hh24') as FECHA, sum(voz.avg_rab_hld_tm_cs_voice)/(100*60*60) as TrafficCS_ERL_sinSHO, sum(data.MAC_D_PDU_TOT)*336/(1024*1024*8) as HSDPA_608a_MB from NOKRWW_PV_HSDPAW_MNC1_RAW data, NOKRWW_PS_SERVLEV_MNC1_RAW voz, (SELECT DISTINCT(int_id) AS ID, Name FROM objects WHERE object_class=813) wcell, (SELECT DISTINCT(int_id) AS ID, Name FROM objects WHERE object_class=811) rnc where data.rnc_id - 1000000000000 = r.id AND data.wcel_id - 1000000000000 = o.id and data.rnc_id = voz.rnc_id Tenemos que cruzar las and data.wcel_id = voz.wcel_id tablas voz y datos. Sus and data.PERIOD_START_TIME = voz.PERIOD_START_TIME campos comunes son: and data.PERIOD_START_TIME >= trunc(sysdate-1) and data.PERIOD_START_TIME < trunc(sysdate) Wcel_id, rnc_id y and o.Name like 'ALGC2U05%' period_start_time! GROUP BY rnc.Name, wcell.Name, To_Char(data.PERIOD_START_TIME,'yyyy-mm-dd hh24')

You might also like