Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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
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
LEFT JOIN
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
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
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
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 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
EN ESTA SUBCONSULTA TENEMOS UNA REFERENCIA EXTERNA (NUM_FACTURA_C) ES UN CAMPO DE LA TABLA FACTURA_COMPRA_NEW (ORIGEN DE LA CONSULTA PRINCIPAL).
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))
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)
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)
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.
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`);