jueves, 9 de junio de 2011

Portafolio tercer corte


SUBQUERY

El subquery es la misma sentencia del SELECT, solo que en vez de poner la condición como tal colocaremos un paréntesis en donde llamaremos otra sentencia SELECT; esto se denomina SELECT anidado. Su sentencia general es:

A continuación varios ejemplos:
1. SELECT valor_pagado FROM tadm_det_pago WHERE num_pago=1;
Nos traerá lo siguiente:
/*trae el valor de 300000*/
2. SELECT valor_pagado FROM tadm_det_pago WHERE valor_pagado<(SELECT valor_pagado FROM tadm_det_pago WHERE num_pago=1);

Esta sentencia esta ajustada a la estructura SUBQUERY y nos traera la siguiente:
/*trae valores menores a la condicion del selecto anidado; en este caso menor a 300000*/
3. SELECT avg(valor_pagado) FROM tadm_det_pago;
Esta sentencia nos dará:

/*promedio de los pagos realizados*/
SELECT num_pago, valor_pagado FROM tadm_det_pago WHERE valor_pagado<>(SELECT avg(valor_pagado) FROM tadm_det_pago);
Nuevamente la ajustamos a un SUBQUERY y nos mostrará:
/*consulta que nos trae el numero de pago y el valor pagado siempre y cuando el pago sea diferente que el promedio de todos los pagos realizados*/

5. SELECT num_pago, valor_pagado FROM tadm_det_pago WHERE valor_pagado>(SELECT avg(valor_pagado) FROM tadm_det_pago);
Nos traerá:



EJERCICIO:
Hacer una consulta que traiga aquellos valores pagados que sean mayores al minimo valor pagado en la tabla detalle.
SELECT num_pago, valor_pagado FROM tadm_det_pago WHERE valor_pagado>(SELECT min(valor_pagado) FROM tadm_det_pago);

Ahora utilizaremos la siguiente consulta:

SELECT num_pago, valor_pagado FROM tadm_det_pago WHERE valor_pagado<(SELECT min(valor_pagado) FROM tadm_det_pago);

Al probarla no nos mostrará ningún campo debido a que no hay ni un solo valor pagado que sea menor al menor.

Probemos con esta sentencia:
SELECT num_pago, valor_pagado FROM tadm_det_pago WHERE valor_pagado<(SELECT max(valor_pagado) FROM tadm_det_pago);
/*trae los valores menores al maximo valor pagado*/
EJERCICIO:
Hacer una consulta que traiga los maximos valores pagados agrupado por concepto y cuyo promedio sea superior al promedio de los pagos.
SELECT num_pago, max(valor_pagado) FROM tadm_det_pago GROUP BY num_pago HAVING (avg(valor_pagado))>(SELECT avg(valor_pagado) FROM tadm_det_pago);
Nos traerá lo siguiente:

miércoles, 8 de junio de 2011

Portafolio tercer corte

Consultas con JOINS



LOS JOINS
DEFINICIÓN
Naciones Unidas aúnan Funciona de Manera similar al estilo de Sentencia SELECCIONAR Sobre Las Tablas de base de uña de Datos.Sentencia n º This permite extraer Registros pertenezcan Que uno u Otra Una tabla de LUEGO Comparar con los Registros Comunes párr Las Tablas.}

INNER JOIN
El Para UNETE Entre dos o Más tablas, Con basta USAR EL unirse despues de los referenciar campos y tabla de primera una, LUEGO de ELLOS SE Deben relacionar Otras tablas, párr ESTO SE Agregar una nueva Notificación USAR la Cláusula INNER JOIN despues del DE.
El "interior" Funciona COMO FUNCIÓN intersección de Entre dos Conjuntos, de tal Manera, El Que INTERIOR SE UNEN podria remplazar Por Una consulta del tipo:
SELECCIONAR campo1.tabla1, campo2.tabla1, campo1.tabla2 '
DE tabla1, tabla2
DONDE campo1.tabla1 = campo1.tabla2;
De tal Manera, Que la Sentencia anterior sí podria remplazar Por la Siguiente;
SELECT (campo1, campo2)
DE tabla1 INNER JOIN
tabla2 ON tabla1.campo1 = tabla2.campo1;



Reflexión
Algo similar al estilo de Teoría de Conjuntos Donde el INNER JOIN representantes intersección desde:
Los Registros Que se traeràn, seran aquellos Por Que La Llave Primaria y foranea Hacen a instancia de parte de las dos tablas y sí relacionan.



LETF OUTER JOIN



DEFINICION
El comportamiento es similar al del INNER JOIN, La Diferencia Que es El LEFT OUTER JOIN nep traera los Registros Que esten al estilo de izquierda, de la Cláusula JOIN, COMO LA SIGUIENTE Veremos una en El Ejemplo:
SELECCIONAR campo1.tabla1, campo2.tabla1, campo1.tabla2 '
DE tabla1
LEFT OUTER JOIN tabla2 ON campo1 = tabla2.campo1;
This consulta devolverá Todos los Registros de la tabla1, independientemente de Que Tengan Registros de la tabla2. En El Caso De Que Los Datos de tabla1 no Tenga Registros Iguales en tabla2, sí devolverá El Valor párr los campos NULL no Relacionados en tabla2.


Reflexión
¿Siempre traera, Registros la clausula LEFT OUTER JOIN?
Si, en Todos los Casos Trae Registros, una Diferencia del seleccione estudiado en la Unidad 2.
RIGHT OUTER JOIN

Hace he aquí la izquierda al contrario, de tal Manera Que Nos Trae Todos los Registros Que esten al estilo de Derecha de la Cláusula JOIN. Su seria Estructura:
SELECT (Nombres, Apellidos, Dirección, BARRIOS.Nombre como Barrio)
DE ESTUDIANTES
RIGHT OUTER JOIN BARRIOS DE IdBarrio = BARRIOS.Codigo;
SELECCIONAR campo1.tabla1, campo2.tabla1, campo1.tabla2 '
DE tabla1
RIGHT OUTER JOIN tabla2 ON campo1 = tabla2.campo1;
Reflexión
This consulta devolverá los Registros obtenidos tabla2, Tengan o no en Registro Algún tabla1.
Como SE PUEDE OBSERVAR Trae los Registros Que esten al estilo de Derecha de la intersección, Incluida la intersección.
El Siguiente dibujo Muestra los Registros Que se Traen:


EJEMPLO 1

TABLAS Y CITAS MEDICOS

Supongamos Que expect dos tablas de Como Las Siguientes, en La Que Hay Un relaciòn Uno A MUCHOS Entre la tabla Médicos y Pacientes. Quiere Decir Que un Médico de las Naciones Unidas sí le pueden asignar UNO O MUCHOS Pacientes.
TABLA MEDICOS:
Ahora la tabla de PACIENTES
Observar dos heno Que pecado Pacientes médico Asignado (NULL)
EL INNER JOIN
Si hicieramos Una consulta Las COMO ASI ya estudiadas algoritmo seria:
id_cedula SELECT, tadm_pacientes.apellidos_y_nombres COMO PACIENTE,
tadm_medicos.apellidos_y_nombres COMO MEDICO,
id_especialidad
DE tadm_pacientes, tadm_medicos
DONDE tadm_pacientes.id_medico = tadm_medicos.id_medico
ORDER BY id_especialidad;
párrafo obtener:
Ahora he aquí Podemos HACER using la Sentencia INNER JOIN:
id_cedula SELECT, tadm_pacientes.apellidos_y_nombres como PACIENTE,
tadm_medicos.apellidos_y_nombres COMO MEDICO
DE tadm_pacientes INNER JOIN
tadm_medicos SOBRE tadm_pacientes.id_medico = tadm_medicos.id_medico
ordenar por id_especialidad;
Que he aquí Con Vamos a obtener exactamente El Mismo RESULTADO de la consulta anterior.

EJEMPLO 2

LEFT JOIN

Ahora realicemos Una consulta Sobre Las Mismas dos tablas but using LEFT OUTER JOIN:
id_cedula SELECT, tadm_pacientes.apellidos_y_nombres como PACIENTE,
tadm_medicos.apellidos_y_nombres COMO MEDICO
DE tadm_pacientes
LEFT OUTER JOIN tadm_medicos SOBRE tadm_pacientes.Id_medico = tadm_medicos.id_medico;
Reflexión
¿Qué Datos distintos Trae?
Trae Todos los Pacientes incluso aquellos Que No Tengan Asignado médico, En Este Caso, Manjarres Jennifer y Julián Manrique.

EJEMPLO 3
Actividad
AHORA HAGAMOS UN DERECHO OUTER JOIN
id_cedula SELECT, tadm_pacientes.apellidos_y_nombres como PACIENTE,
tadm_medicos.apellidos_y_nombres COMO MEDICO
DE tadm_pacientes
RIGHT OUTER JOIN tadm_medicos SOBRE tadm_pacientes.Id_medico = tadm_medicos.id_medico;
Reflexión
nep Que Trae:
OBSERVAR COMO PUEDE, Trae Todos los medicos aunque no Tengan Pacientes asignados Hasta Ahora.
Ejercicio:
1. Adicionar la Columna id_ciudad en la tabla Médicos.
tadm_medicos ALTER TABLE ADD COLUMN id_ciudad INT;
2. Crear la tabla Ciudad Con Su respectiva llave foranea y Registros.

id_ciudad INT PRIMARY KEY, nombre_ciudad CHAR (10)); ALTER TABLE ADD CONSTRAINT tadm_medicos tadm_medicos2_fk FOREIGN KEY (id_ciudad) REFERENCIAS tadm_ciudad (id_ciudad); INSERTAR VALORES EN tadm_ciudad (01, 'Bogotá'), (02, 'Cali'), ( 03 'Somondoco'), (04, 'chaguani'), (05, 'sotatausa');
3. Insertar ACTUALIZACIONES.
tadm_medicos UPDATE SET id_ciudad = 01 DONDE apellidos_y_nombres %%%'; LIKE 'c
tadm_medicos UPDATE SET id_ciudad = 02 DONDE apellidos_y_nombres %%%'; LIKE 'e
tadm_medicos UPDATE SET id_ciudad = 03 DONDE apellidos_y_nombres z LIKE '%%%';
tadm_medicos UPDATE SET id_ciudad = 04 DONDE telefono = 2405598;
4. Realizar INTERIOR IZQUIERDA, DERECHA y JOIN.
apellidos_y_nombres SELECT, tadm_ciudad.nombre_ciudad COMO CIUDAD DE tadm_medicos INNER JOIN tadm_ciudad SOBRE tadm_medicos.id_ciudad = tadm_ciudad.id_ciudad;
apellidos_y_nombres SELECT, tadm_ciudad.nombre_ciudad COMO CIUDAD DE tadm_medicos LEFT OUTER JOIN tadm_ciudad SOBRE tadm_medicos.id_ciudad = tadm_ciudad.id_ciudad;
apellidos_y_nombres SELECT, tadm_ciudad.nombre_ciudad COMO CIUDAD DE DERECHO tadm_medicos OUTER JOIN tadm_ciudad SOBRE tadm_medicos.id_ciudad = tadm_ciudad.id_ciudad;