Sei sulla pagina 1di 11

APUNTE TALLER BASE DATOS - SQL

SELECT, QUE PERMITE RECUPERAR DATOS DE UNA O VARIAS TABLAS. LA SENTENCIA SELECT ES CON MUCHO
LA MS COMPLEJA Y POTENTE DE LAS SENTENCIAS SQL.

FROM CON LA CLUSULA FROM INDICAMOS EN QU TABLA TIENE QUE BUSCAR LA INFORMACIN. SELECT * FROM `CLIENTE_NEW` SELECT * FROM `PRODUCTO_NEW`

ORDER BY CAMPO
SU PRINCIPAL FUNCIN ES ORDENAR LOS DATOS DE UNA BASE DE DATOS, SEGN EL CAMPO ESPECIFICADO, RECORDEMOS QUE DICHO CAMPO DEBE ESTAR EN LA TABLA DE LA BASE DE DATOS. DESC, ASC SON FORMAS DE ORDENAMIENTO, ES DECIR, COMO VAN HACER ORDENADOS LOS DATOS LUEGO DE HACER UN ORDER BY. DESC ORDENA LOS DATOS EN FORMA DESCENDENTE DE MAYOR A MENOR Y ASC ORDENA EN FORMA ASCENDENTE ES DECIR DE MENOR A MAYOR

LIMIT, NMERO LIMITE


LIMITA EL NMERO DE REGISTRO A MOSTRAR, SE COLOCA EL NMERO PRINCIPAL EL CUAL VA HACER EL NMERO DESDE DONDE VA A COMENZAR LOS REGISTROS HASTA EL NMERO LIMITE EL CUAL VA HACER EL NMERO LIMITE DE LOS DATOS. EJEMPLO: LIMIT 0, 20 ESTO INDICA QUE LA CONSULTA DEBE DE MOSTRAR 20 RESULTADOS A PARTIR DEL PRIMER REGISTRO. LIMIT 7, 20 ESTO INDICA QUE LA CONSULTA DEBE MOSTRAR LOS RESULTADOS A PARTIR DEL REGISTRO NMERO 8, DESDE 8 POR QUE LIMIT CONSIDERA EL PRIMER REGISTRO COMO CERO. (0 = 1, 1 = 2, 3 = 4) EJEMPLO SELECT * FROM `VENDEDOR_NEW` WHERE PREV_SOCIAL ='AFP' ORDER BY PATERNO_V LIMIT 2

WHERE CAMPO
TRADUCIDO SERA "DONDE", ESTE SIRVE PARA CAMBIAR LOS DATOS DONDE TAL CAMPO EN LA TABLA ES IGUAL A UN VALOR ESPECFICO. DICHA SENTENCIA TIENE A LA VEZ VARIAS CONDICIONES PARA SELECCIONAR DE OTRA MANERA LOS REGISTROS. PREGUNTA POR UN NUMERO DE FACTURA EN PARTICULAR DENTRO DE LA TABLA FACTURA DE COMPRA SELECT * FROM `FACTURA_COMPRA_NEW`WHERE `NUM_FACTURA_C`=402054 HACE LA COMPARACIN DE TODAS LA FACTURA DE COMPRA DENTRO DE LA TABLA DE DETALLE DE FACTURAS DE COMPRA

SELECT * FROM `FACTURA_COMPRA_NEW`, `DETALLE_FACTURA_COMPRA_NEW` WHERE `FACTURA_COMPRA_NEW`.`NUM_FACTURA_C`=`DETALLE_FACTURA_COMPRA_NEW`.`NUM_DET_FACT_C` ** NUM_FACTURA_C (ES EL NMERO DE FACTURA ALMACENADO DENTRO DE LA TABLA FACTURAS DE COMPRAS) Y NUM_DET_C (ES EL NMERO DE FACTURA ALMACENADO DENTRO DE LA TABLA DE DETALLE FACTURA) POR LO TANTO ESTOS CAMPOS TIENEN EL MISMO DOMINIO Y PUEDEN SER COMPARADOS.

INNER JOIN
EL INNER JOIN ES OTRO TIPO DE COMPOSICIN DE TABLAS, PERMITE EMPAREJAR FILAS DE DISTINTAS TABLAS DE FORMA MS EFICIENTE QUE CON EL PRODUCTO CARTESIANO CUANDO UNA DE LAS COLUMNAS DE EMPAREJAMIENTO EST INDEXADA. YA QUE EN VEZ DE HACER EL PRODUCTO CARTESIANO COMPLETO Y LUEGO SELECCIONAR LA FILAS QUE CUMPLEN LA CONDICIN DE EMPAREJAMIENTO, PARA CADA FILA DE UNA DE LAS TABLAS BUSCA DIRECTAMENTE EN LA OTRA TABLA LAS FILAS QUE CUMPLEN LA CONDICIN, CON LO CUAL SE EMPAREJAN SLO LAS FILAS QUE LUEGO APARECEN EN EL RESULTADO. PREGUNTA POR EL NUMERO DE FACTURA QUE ESTA ALMACENADO EN LA TABLA FACTURA DE COMPRA Y LO COMPARA CON EL NUMERO DE FACTURA QUE ESTA AMACENADO EN LA TABLA DETALLE FACTURA COMPRA. SELECT * FROM `FACTURA_COMPRA_NEW` INNER JOIN `DETALLE_FACTURA_COMPRA_NEW` ON NUM_FACTURA_C=NUM_DET_FACT_C CON WHERE SELECT * FROM `FACTURA_COMPRA_NEW`, `DETALLE_FACTURA_COMPRA_NEW` WHERE NUM_FACTURA_C=NUM_DET_FACT_C

PARA UNIR MAS DE DOS TABLAS CON LA INSTRUCCION WHERE BASTA CON AGREGAR LAS TABLAS SEPARADAS POR COMAS ACONTINUACION DEL FROM (FACTURA, DETALLE_FACTURA_PRODUCTO, ETC). CON INNER JOIN ES ALGO MAS COMPLEJO, PERO ES MUCHO MS EFICIENTE QUE CON WHERE, EXISTEN DOS METODOS: SE PUEDEN COMBINAR MS DE DOS TABLAS EN ESTE CASO HAY QUE SUSTITUIR EN LA SINTAXIS UNA TABLA POR UN INNER JOIN COMPLETO.

LA SINTAXIS DE INNER JOIN ES: SELECT * FROM TABLA1 INNER JOIN TABLA2 POR EJEMPLO CON 3 TABLAS: SELECT * FROM (FACTURA_COMPRA_NEW INNER JOIN DETALLE_FACTURA_COMPRA_NEW ON NUM_FACTURA_C=NUM_DET_FACT_C) INNER JOIN PRODUCTO_NEW ON COD_PRODUCTO=COD_PRODUCTO_D ON TABLA1.CAMPO = TABLA2.CAMPO

UNA OPCION ES HACER EL PRIMER INNER JOIN Y ENCERRARLO EN PARNTESIS, Y LUEGO EMPEZAR CON OTRO INNER JOIN PARA LA NUEVA TABLA 3 EJEMPLO CON 4 TABLAS SELECT * FROM (( FACTURA_VENTA_NEW INNER JOIN DETALLE_FACTURA_VENTA_NEW ON NUM_FAC_V=NUM_DET_FAC_V) INNER JOIN `PRODUCTO_NEW` ON COD_PRODUCTO=COD_PROD_DET_FAC_V) INNER JOIN `PROVEEDOR_NEW` ON `PRODUCTO_NEW`.`COD_PROVEEDOR`=`PROVEEDOR_NEW`.`COD_PROVEEDOR`

Y POR ULTIMO PODEMOS UTILIZAR ESTA OTRA OPCION DE INNER JOIN PARA MULTIPLES TABLAS: EJEMPLO CON 3 TABLAS SELECT * FROM FACTURA_COMPRA_NEW INNER JOIN ( DETALLE_FACTURA_COMPRA_NEW INNER JOIN PRODUCTO_NEW ON COD_PRODUCTO_D =COD_PRODUCTO ) ON NUM_FACTURA_C=NUM_DET_FACT_C

EL LEFT JOIN Y RIGHT JOIN


EL LEFT JOIN Y RIGHT JOIN SON OTRO TIPO DE COMPOSICIN DE TABLAS, TAMBIN DENOMINADA COMPOSICIN EXTERNA. SON UNA EXTENSIN DEL INNER JOIN. SINTAXIS: SELECT * FROM TABLA1 LEFT JOIN TABLA2 ON TABLA1.CAMPO= TABLA2.CAMPO SELECT * FROM TABLA1 RIGHT JOIN TABLA2 ON TABLA1.CAMPO=TABLA2.CAMPO

LEFT JOIN

REALIZAR LA COMPARACIN, PERO TAMBIEN INCLUYE TODOS AQUELLOS REGISTRO QUE NO

TIENEN EMPAREJAMIENTO, POR LO TANTO INCLUYE TODOS LOS REGISTROS DE LA TABLA1(IZQUIERDA) CON SU RESPECTIVA PAREJA EN LA TABLA 2 O EN SU DEFECTO VALOR NULO. SELECT * FROM `CIUDADES_NEW` LEFT JOIN VENDEDOR_NEW ON COD_CIUDAD_V=COD_CIUDAD

RIGHT JOIN CUMPLE LA MISMA FUNCION QUE LEFT, LA DIFERENCIA ES QUE


EJEMPLO:

DESPLIEGA LOS REGISTRO DE

LA DERECHA TABLA2 CON SU RESPECTIVA PAREJA DE LA TABLA1, O EN SU DEFECTO VALOR NULO.

SELECT * FROM `VENDEDOR_NEW` RIGHT JOIN `CIUDADES_NEW` ON COD_CIUDAD_V=COD_CIUDAD

CONDICIONES DE SELECCIN
LAS CONDICIONES DE SELECCIN SON LAS CONDICIONES QUE PUEDEN APARECER EN LA CLUSULA WHERE. EN SQL TENEMOS CINCO CONDICIONES BSICAS: EL TEST DE COMPARACIN EL TEST DE RANGO EL TEST DE PERTENENCIA A UN CONJUNTO EL TEST DE VALOR NULO EL TEST DE CORRESPONDENCIA CON PATRN .

EL TEST DE COMPARACIN.
COMPARA EL VALOR DE UNA EXPRESIN CON EL VALOR DE OTRA. LA SINTAXIS ES LA SIGUIENTE: = IGUAL QUE <> DISTINTO DE < MENOR QUE > MAYOR QUE >= MAYOR O IGUAL SELECT * FROM `PRODUCTO_NEW` WHERE COD_PRODUCTO=50

TEST DE RANGO (BETWEEN).


BETWEEN VALOR AND VALOR BUSCA EN UN CAMPO VALORES QUE ESTE ENTRE TAL VALOR Y OTRO VALOR DE ESE MISMO CAMPO, ESTOS VALORES DEBE ESTAR CONTENIDOS EN EL CAMPO. ESTA SENTENCIA ES UTILIZADA FRECUENTEMENTE PARA BUSCAR ENTRE VALORES NMERICOS O FECHAS SELECT * FROM `FACTURA_VENTA_NEW` WHERE FECHA_FAC_V BETWEEN '2012-01-01' AND '2012-02-01'

TEST DE PERTENENCIA A CONJUNTO (IN)


EXAMINA SI EL VALOR DE LA EXPRESIN ES UNO DE LOS VALORES INCLUIDOS EN LA LISTA DE VALORES. SELECT * FROM `VENDEDOR_NEW` WHERE PREV_SOCIAL IN('AFP','ISAPRE')

TEST DE VALOR NULO (IS NULL)


UNA CONDICIN DE SELECCIN PUEDE DAR COMO RESULTADO EL VALOR VERDADERO TRUE, FALSO FALSE O NULO NULL. SELECT * FROM `VENDEDOR_NEW` WHERE PREV_SOCIAL IS NULL

TEST DE CORRESPONDENCIA CON PATRN (LIKE)


SE UTILIZA CUANDO QUEREMOS UTILIZAR CARACTERES COMODINES PARA FORMAR EL VALOR CON EL COMPARAR. BUSCA UN VALOR ESPECIFICO EN DETERMINADO CAMPO DE LA TABLA, USADO COMNMENTE PARA HACER BSQUEDAS RPIDAS PARA BUSCAR EN UNA BASE DE DATOS. ESTA SENTENCIA SE UTILIZA CON UNOS SIGNOS DE % LA FUNCIN DE ESTOS ES COMO BUSCAR EN EL CAMPO, SI LO COLOCAMOS DE ESTA MANERA '%CAMPO%' BUSCARA DICHO VALOR EN TODO EL CAMPO, SI LO COLOCAMOS '%CAMPO' BUSCARA SOLO SI EL CAMPO COMIENZA CON ESE VALOR Y 'CAMPO%' SI TERMINA CON ESE VALOR. SELECT * FROM CLIENTE_NEW WHERE RAZON_SOCIAL_CL LIKE 'A%'

LAS CONSULTAS DE RESUMEN


FUNCIONES DE COLUMNA EN LA LISTA DE SELECCIN DE UNA CONSULTA DE RESUMEN APARECEN FUNCIONES DE COLUMNA TAMBIN DENOMINADAS FUNCIONES DE DOMINIO AGREGADAS. UNA FUNCIN DE COLUMNA SE APLICA A UNA COLUMNA Y OBTIENE UN VALOR QUE RESUME EL CONTENIDO DE LA COLUMNA. TENEMOS LAS SIGUIENTES FUNCIONES DE COLUMNA: SUM() COUNT(*) COUNT(CAMPO) MIN() MAX() AVG() STDEV() STDEVP()

MAX(CAMPO)
DEVUELVE EL VALOR MXIMO DE ESE CAMPO EN TODOS LOS REGISTROS DE LA TABLA.

MIN(CAMPO)
DEVUELVE EL VALOR MNIMO DE ESE CAMPO EN TODOS LOS REGISTROS DE LA TABLA. EJEMPLOS SELECT MAX(VALOR_TOTAL_FAC_V) FROM FACTURA_VENTA_NEW SELECT MAX(VALOR_VENTA) FROM PRODUCTO_NEW SELECT MAX(FECHA_BOLETA) FROM BOLETA_NEW SELECT MIN(VALOR_TOTAL_FAC_V) FROM FACTURA_VENTA_NEW SELECT MIN(VALOR_VENTA) FROM PRODUCTO_NEW

SELECT MIN(FECHA_BOLETA), NUMERO_BOLETA FROM BOLETAS_NEW

COUNT(*)
CUENTA EL NMERO TOTAL DE CAMPOS REGISTRADOS EN LA BASE DE DATOS COUNT(*) CUENTA LOS VALORES NULOS COUNT(NOMBRE_CAMPO) EXCLUYE LOS VALORES NULOS SELECT COUNT(*) FROM CLIENTE_NEW SELECT COUNT(NOMBRE_CIUDAD) FROM CIUDADES_NEW

SUM()
SUMA VOLORES NUMERICOS SELECT SUM(VALOR_TOTAL_FAC_V) FROM FACTURA_VENTA_NEW SELECT SUM(VALOR_VENTA) FROM PRODUCTO_NEW

LA CLUSULA GROUP BY
SE PUEDEN OBTENER SUBTOTALES CON LA CLUSULA GROUP BY. UNA CONSULTA CON UNA CLUSULA GROUP BY SE DENOMINA CONSULTA AGRUPADA YA QUE AGRUPA LOS DATOS DE LA TABLA ORIGEN Y PRODUCE UNA NICA FILA RESUMEN POR CADA GRUPO FORMADO. LAS COLUMNAS INDICADAS EN EL GROUP BY SE LLAMAN COLUMNAS DE AGRUPACIN. LA COLUMNA DE AGRUPACIN SE PUEDE INDICAR MEDIANTE UN NOMBRE DE COLUMNA O CUALQUIER EXPRESIN VLIDA BASADA EN UNA COLUMNA PERO NO SE PUEDEN UTILIZAR LOS ALIAS DE CAMPO. TODAS LAS FILAS QUE TIENEN VALOR NULO EN EL CAMPO DE AGRUPACIN, PASAN A FORMAR UN NICO GRUPO. ES DECIR, CONSIDERA EL VALOR NULO COMO UN VALOR CUALQUIERA A EFECTOS DE AGRUPACIN. SE PUEDEN AGRUPAR LAS FILAS POR VARIAS COLUMNAS, EN ESTE CASO SE INDICAN LAS COLUMNAS SEPARADAS POR UNA COMA Y EN EL ORDEN DE MAYOR A MENOR AGRUPACIN. NO EST PERMITIDO, NO SE PUEDE UTILIZAR UN ALIAS CAMPO.

SELECT COUNT(*),FORMA_PAGO_FAC_V FROM `FACTURA_VENTA_NEW` GROUP BY FORMA_PAGO_FAC_V SELECT SUM(VALOR_TOTAL_FAC_V),FORMA_PAGO_FAC_V FROM `FACTURA_VENTA_NEW` GROUP BY FORMA_PAGO_FAC_V SELECT COUNT(NOMBRE_COMUNA), NUM_REGION FROM `CIUDADES_NEW` GROUP BY NUM_REGION
COMPROBAR CONSULTA ANTERIOR:

SELECT COUNT(NOMBRE_COMUNA) FROM `CIUDADES_NEW` WHERE NUM_REGION=8

SELECT VALOR_TOTAL_FAC_V, SUM(VALOR_TOTAL_DET_FAC_V), COUNT( NUM_DET_FAC_V), NUM_FAC_V FROM `FACTURA_VENTA_NEW`INNER JOIN `DETALLE_FACTURA_VENTA_NEW` ON NUM_FAC_V=NUM_DET_FAC_V GROUP BY NUM_FAC_V

LA CLUSULA HAVING
LA CLUSULA HAVING NOS PERMITE SELECCIONAR FILAS DE LA TABLA RESULTANTE DE UNA CONSULTA DE RESUMEN. EN LA CONDICIN DE SELECCIN SLO PUEDEN APARECER: VALORES CONSTANTES FUNCIONES DE COLUMNA COLUMNAS DE AGRUPACIN (COLUMNAS QUE APARECEN EN LA CLUSULA GROUP BY) SELECT COUNT(NOMBRE_COMUNA), NUM_REGION FROM `CIUDADES_NEW` GROUP BY NUM_REGION HAVING NUM_REGION=8

SELECT VALOR_TOTAL_FAC_V, SUM(VALOR_TOTAL_DET_FAC_V), COUNT( NUM_DET_FAC_V), NUM_FAC_V FROM `FACTURA_VENTA_NEW`INNER JOIN `DETALLE_FACTURA_VENTA_NEW` ON NUM_FAC_V=NUM_DET_FAC_V GROUP BY NUM_FAC_V

HAVING VALOR_TOTAL_FAC_V>TOTAL_FACTURA SUBCONSULTAS


DEFINICIONES UNA SUBCONSULTA ES UNA SENTENCIA SELECT QUE APARECE DENTRO DE OTRA SENTENCIA SELECT QUE LLAMAREMOS CONSULTA PRINCIPAL. UNA SUBCONSULTA TIENE LA MISMA SINTAXIS QUE UNA SENTENCIA SELECT NORMAL EXCEPTUANDO QUE APARECE ENCERRADA ENTRE PARNTESIS, NO PUEDE CONTENER LA CLUSULA ORDER BY, NI PUEDE SER LA UNION DE VARIAS SENTENCIAS SELECT CUANDO SE EJECUTA UNA CONSULTA QUE CONTIENE UNA SUBCONSULTA, LA SUBCONSULTA SE EJECUTA POR CADA FILA DE LA CONSULTA PRINCIPAL. SE PUEDE ENCONTRAR EN LA LISTA DE SELECCIN, EN LA CLUSULA WHERE O EN LA CLUSULA HAVING DE LA CONSULTA PRINCIPAL. REFERENCIAS EXTERNAS A MENUDO, ES NECESARIO, DENTRO DEL CUERPO DE UNA SUBCONSULTA, HACER REFERENCIA AL VALOR DE UNA COLUMNA EN LA FILA ACTUAL DE LA CONSULTA PRINCIPAL, ESE NOMBRE DE COLUMNA SE DENOMINA REFERENCIA EXTERNA. UNA REFERENCIA EXTERNA ES UN NOMBRE DE COLUMNA QUE ESTANDO EN LA SUBCONSULTA, NO SE REFIERE A NINGUNA COLUMNA DE LAS TABLAS DESIGNADAS EN LA FROM DE LA SUBCONSULTA SINO A UNA COLUMNA DE LAS TABLAS DESIGNADAS EN LA FROM DE LA CONSULTA PRINCIPAL. COMO LA SUBCONSULTA SE EJECUTA POR CADA FILA DE LA CONSULTA PRINCIPAL, EL VALOR DE LA REFERENCIA EXTERNA IR CAMBIANDO.
SELECT NUM_FACTURA_C, FECHA_FAC_C, VALOR_TOTAL_FAC_C,

(SELECT SUM(VALOR_TOTAL_P) FROM

DETALLE_FACTURA_COMPRA_NEW WHERE NUM_DET_FACT_C = FACTURA_COMPRA_NEW.NUM_FACTURA_C) AS VALOR_TOTAL_DETALLE FROM FACTURA_COMPRA_NEW

EN ESTA SUBCONSULTA TENEMOS UNA REFERENCIA EXTERNA (NUM_FACTURA_C) ES UN CAMPO DE LA TABLA FACTURA_COMPRA_NEW (ORIGEN DE LA CONSULTA PRINCIPAL).

QU PASA CUANDO SE EJECUTA LA CONSULTA PRINCIPAL?


- SE COGE EL PRIMER NUMERO DE FACTURA Y SE CALCULA LA SUBCONSULTA SUSTITUYENDO NUM_FACTURA_C POR EL VALOR QUE TIENE EN EL PRIMERA FACTURA DE COMPRA. LA SUBCONSULTA OBTIENE LA SUMA DEL DETALLE_FACTURA_COMPRA_NEW DEL NUM_DET_FACT_C = 45654(PRIMERA FACTURA), - SE COGE EL SEGUNDO NUMERO DE FACTURA Y SE CALCULA LA SUBCONSULTA CON NUM_DETALLE_FAC_C =56454 (NUM_FACTURA_C DE LA SEGUNDA FACTURA DE COMPRA)... Y AS SUCESIVAMENTE HASTA LLEGAR A LA LTIMA FACTURA DE COMPRA.

ANIDAR SUBCONSULTAS
LAS SUBCONSULTAS PUEDEN ANIDARSE DE FORMA QUE UNA SUBCONSULTA APAREZCA EN LA CLUSULA WHERE (POR EJEMPLO) DE OTRA SUBCONSULTA QUE A SU VEZ FORMA PARTE DE OTRA CONSULTA PRINCIPAL. EN LA PRCTICA, UNA CONSULTA CONSUME MUCHO MS TIEMPO Y MEMORIA CUANDO SE INCREMENTA EL NMERO DE NIVELES DE ANIDAMIENTO. LA CONSULTA RESULTA TAMBIN MS DIFCIL DE LEER, COMPRENDER Y MANTENER CUANDO CONTIENE MS DE UNO O DOS NIVELES DE SUBCONSULTAS. EJEMPLO: select num_det_b, cod_prod_det_b from `detalle_boleta_new` where cod_prod_det_b=(select cod_producto from `producto_new` where cod_producto=1) select num_det_b, cod_prod_det_b from `detalle_boleta_new` where cod_prod_det_b= (select cod_producto from `producto_new` where cod_proveedor=(select cod_proveedor from `proveedor_new` where cod_proveedor=2))

CONDICIONES DE SELECCIN CON SUBCONSULTAS


LAS CONDICIONES DE SELECCIN SON LAS CONDICIONES QUE PUEDEN APARECER EN LA CLUSULA WHERE O HAVING. LA MAYORA SE HAN VISTO EN EL TEMA 2 PERO AHORA INCLUIREMOS LAS CONDICIONES QUE UTILIZAN UNA SUBCONSULTA COMO OPERANDO. EN SQL TENEMOS CUATRO NUEVAS CONDICIONES: EL TEST DE COMPARACIN CON SUBCONSULTA EL TEST DE COMPARACIN CUANTIFICADA EL TEST DE PERTENENCIA A UN CONJUNTO EL TEST DE EXISTENCIA

ES EL EQUIVALENTE AL TEST DE COMPARACIN SIMPLE. SE UTILIZA PARA COMPARAR UN VALOR DE LA FILA QUE SE EST EXAMINADO CON UN NICO VALOR PRODUCIDO POR LA SUBCONSULTA. LA SUBCONSULTA DEBE DEVOLVER UNA NICA COLUMNA, SINO SE PRODUCE UN ERROR. SI LA SUBCONSULTA NO PRODUCE NINGUNA FILA O DEVUELVE EL VALOR NULO, EL TEST DEVUELVE EL VALOR NULO, SI LA SUBCONSULTA PRODUCE VARIAS FILAS, SQL DEVUELVE UNA CONDICIN DE ERROR SELECT OFICINA, CIUDAD FROM OFICINAS WHERE OBJETIVO > (SELECT SUM(VENTAS) FROM EMPLEADOS WHERE EMPLEADOS.OFICINA = OFICINAS.OFICINA)

EL TEST DE COMPARACIN CUANTIFICADA.

ESTE TEST ES UNA EXTENSIN DEL TEST DE COMPARACIN Y DEL TEST DE CONJUNTO. COMPARA EL VALOR DE LA EXPRESIN CON CADA UNO DE LOS VALORES PRODUCIDOS POR LA SUBCONSULTA. LA SUBCONSULTA DEBE DEVOLVER UNA NICA COLUMNA SINO SE TENEMOS EL TEST ANY (ALGN, ALGUNO EN INGLS) Y EL TEST ALL (TODOS EN INGLS).

EL TEST ANY. LA SUBCONSULTA DEBE DEVOLVER UNA NICA COLUMNA SINO SE PRODUCE UN ERROR. SE EVALA LA COMPARACIN CON CADA VALOR DEVUELTO POR LA SUBCONSULTA. SI ALGUNA DE LAS COMPARACIONES INDIVIDUALES PRODUCE EL RESULTADO VERDADERO, EL TEST ANY DEVUELVE EL RESULTADO VERDADERO. SI LA SUBCONSULTA NO DEVUELVE NINGN VALOR, EL TEST ANY DEVUELVE FALSO. SI EL TEST DE COMPARACIN ES FALSO PARA TODOS LOS VALORES DE LA COLUMNA, ANY DEVUELVE FALSO. SI EL TEST DE COMPARACIN NO ES VERDADERO PARA NINGN VALOR DE LA COLUMNA, Y ES NULO PARA AL MENOS ALGUNO DE LOS VALORES, ANY DEVUELVE NULO. SELECT OFICINA, CIUDAD FROM OFICINAS WHERE OBJETIVO > ANY (SELECT SUM(CUOTA) FROM EMPLEADOS GROUP BY OFICINA) EL TEST ALL. LA SUBCONSULTA DEBE DEVOLVER UNA NICA COLUMNA SINO SE PRODUCE UN ERROR. SE EVALA LA COMPARACIN CON CADA VALOR DEVUELTO POR LA SUBCONSULTA. SI TODAS LAS COMPARACIONES INDIVIDUALES, PRODUCEN UN RESULTADO VERDADERO, EL TEST DEVUELVE EL VALOR VERDADERO. SI LA SUBCONSULTA NO DEVUELVE NINGN VALOR EL TEST ALL DEVUELVE EL VALOR VERDADERO. (OJO CON ESTO!) SI EL TEST DE COMPARACIN ES FALSO PARA ALGN VALOR DE LA COLUMNA, EL RESULTADO ES FALSO. SI EL TEST DE COMPARACIN NO ES FALSO PARA NINGN VALOR DE LA COLUMNA, PERO ES NULO PARA ALGUNO DE ESOS VALORES, EL TEST ALL DEVUELVE VALOR NULO. SELECT OFICINA, CIUDAD FROM OFICINAS WHERE OBJETIVO > ALL (SELECT SUM(CUOTA) FROM EMPLEADOS GROUP BY OFICINA)

TEST DE PERTENENCIA A CONJUNTO (IN).


EXAMINA SI EL VALOR DE LA EXPRESIN ES UNO DE LOS VALORES INCLUIDOS EN LA LISTA DE VALORES PRODUCIDA POR LA SUBCONSULTA. LA SUBCONSULTA DEBE GENERAR UNA NICA COLUMNA Y LAS FILAS QUE SEAN. SI LA SUBCONSULTA NO PRODUCE NINGUNA FILA, EL TEST DA FALSO. SELECT NUMEMP, NOMBRE, OFICINA FROM EMPLEADOS WHERE OFICINA IN (SELECT OFICINA FROM OFICINAS WHERE REGION = 'ESTE')

EL TEST DE EXISTENCIA EXISTS.


EXAMINA SI LA SUBCONSULTA PRODUCE ALGUNA FILA DE RESULTADOS. SI LA SUBCONSULTA CONTIENE FILAS, EL TEST ADOPTA EL VALOR VERDADERO, SI LA SUBCONSULTA NO CONTIENE NINGUNA FILA, EL TEST TOMA EL VALOR FALSO, NUNCA PUEDE TOMAR EL VALOR NULO. CON ESTE TEST LA SUBCONSULTA PUEDE TENER VARIAS COLUMNAS, NO IMPORTA YA QUE EL TEST SE FIJA NO EN LOS VALORES DEVUELTOS SINO EN SI HAY O NO FILA EN LA TABLA RESULTADO DE LA SUBCONSULTA.

CUANDO SE UTILIZA EL TEST DE EXISTENCIA EN LA MAYORA DE LOS CASOS HABR QUE UTILIZAR UNA REFERENCIA EXTERNA. SI NO SE UTILIZA UNA REFERENCIA EXTERNA LA SUBCONSULTA DEVUELTA SIEMPRE SER LA MISMA PARA TODAS LAS FILAS DE LA CONSULTA PRINCIPAL Y EN ESTE CASO SE SELECCIONAN TODAS LAS FILAS DE LA CONSULTA PRINCIPAL (SI LA SUBCONSULTA GENERA FILAS) O NINGUNA (SI LA SUBCONSULTA NO DEVUELVE NINGUNA FILA)

SELECT NUMEMP, NOMBRE, OFICINA FROM EMPLEADOS WHERE EXISTS (SELECT * FROM OFICINAS WHERE REGION = 'ESTE' AND EMPLEADOS.OFICINA = OFICINAS.OFICINA) NOTA. CUANDO SE TRABAJA CON TABLAS MUY VOLUMINOSAS EL TEST EXISTS SUELE DAR MEJOR RENDIMIENTO QUE EL TEST IN.

VISTAS (VIEWS) EN MYSQL


UNA VISTA ES UN OBJECTO DE LA BASE DE DATOS QUE SE DEFINE MEDIANTE UNA SELECT QUE AGRUPA O SELECCIONA UN CONJUNTO DE DATOS. VAMOS A VER COMO USARLAS. LA DEFINICIN NO PUEDE HACER REFERENCIA A UNA TABLA TEMPORARY, Y TAMPOCO SE PUEDE CREAR UNA VISTA TEMPORARY. LAS TABLAS MENCIONADAS EN LA DEFINICIN DE LA VISTA DEBEN EXISTIR SIEMPRE.

CREATE VIEW NOMBRE_VISTA AS (SELECT * FROM TABLA1) SELECT * FROM NOMBRE_VISTA WHERE. CREATE VIEW `vista1` AS ( select `factura_venta_new`.`valor_total_fac_v` AS `VALOR_TOTAL_FAC_V`, sum(`detalle_factura_venta_new`.`valor_total_det_fac_v`) AS `SUM(VALOR_TOTAL_DET_FAC_V)`, count(`detalle_factura_venta_new`.`num_det_fac_v`) AS `COUNT( NUM_DET_FAC_V)`, `factura_venta_new`.`num_fac_v` AS `NUM_FAC_V` from (`factura_venta_new` join `detalle_factura_venta_new` on((`factura_venta_new`.`num_fac_v` `detalle_factura_venta_new`.`num_det_fac_v`))) group by `factura_venta_new`.`num_fac_v`); CREATE VIEW `boleta_mayor` AS ( select max(`boletas_new`.`valor_total_boleta`) AS `TOTAL_BOLETA_MAYOR` from `boletas_new`);

CREATE VIEW `fact_venta_boleta_mayor` AS ( select `factura_venta_new`.`num_fac_v` AS `num_fac_v`, `factura_venta_new`.`rut_cliente_fac_v` AS `rut_cliente_fac_v`, `factura_venta_new`.`rut_ven_fac_v` AS `rut_ven_fac_v`, `factura_venta_new`.`fecha_fac_v` AS `fecha_fac_v`, `factura_venta_new`.`valor_total_fac_v` AS `valor_total_fac_v`, `factura_venta_new`.`desc_fac_v` AS `desc_fac_v`, `factura_venta_new`.`forma_pago_fac_v` AS `forma_pago_fac_v`, `boleta_mayor`.`TOTAL_BOLETA_MAYOR` AS `TOTAL_BOLETA_MAYOR` from (`factura_venta_new` join `boleta_mayor`) where (`factura_venta_new`.`valor_total_fac_v` < `boleta_mayor`.`TOTAL_BOLETA_MAYOR`)); CREATE VIEW `factura_compra_mayor` AS ( select max(`factura_compra_new`.`valor_total_fac_c`) AS `MAX(VALOR_TOTAL_FAC_C)` from `factura_compra_new`);