martes, 30 de agosto de 2011

TAREA: 33 CONSULTAS


1.- Listar todos los funcionarios.
SELECT *
FROM FUNCIONARIO





 2.- Listar las unidades que tengan el texto "EDUCACION" en su descripción.

SELECT * FROM UNIDAD
WHEREdescripcion like '% educacion %'



3.- Listar el código del funcionario que tiene como nombre: "LUISA REYES".

SELECT CI
FROM FUNCIONARIO
WHERE nombre='luisa reyes'





4.- Listar todos los distritos.

SELECT * FROM DISTRITO


5.- Listar los proyectos que se iniciaron en fecha "03-30-2010".

SELECT
FROM PROYECTO
WHERE fechainicio = '30/03/2010'
fechainicio









6.- Listar los distritos que tengan el texto "CALIDAD DE VIDA MEDIA".
SELECT * FROM DISTRITOWHERE descripcion = 'calidad de vida media'







7.- Listar los ítems de funcionarios cuyos teléfonos se inicie con “732”.

SELECT * FROM FUNCIONARIOJOIN TELEFONOF ON TELEFONOF.item = FUNCIONARIO.itemwhere TELEFONOF.nroTelefono like'732%'



8.- Listar los proyectos cuyo código termine con “1”.

SELECT * FROM PROYECTOWHERE codP like '%1'







9.- Listar los proyectos cuyo carnet empiece con “0000”.

SELECT * FROM PROYECTOWHERE codP like '0000%'






10.- Listar todas las unidades.


SELECT * FROM UNIDAD










11.- Determinar la cantidad de pasos que siguió el proyecto  “000006”

SELECT count(PROYECTO.codP)AS CONTARFROM ADJUDICACION INNER JOINPROYECTO ON ADJUDICACION.codProy = PROYECTO.codP INNER JOINSEGUIMIENTO ON PROYECTO.codP = SEGUIMIENTO.codProyWHERE (PROYECTO.codP = '000006')

12.- Determinar la cantidad de documentos con extensión “aplicable”

SELECT *
FROM DOCUMENTO
WHERE extencion = 'aplicable'



13.- Determinar la cantidad de documentos tipo “Minuta Descriptiva” y extensión “aplicable”

SELECT *
 FROM DOCUMENTO
WHERE extencion = 'aplicable' AND  descripcion='minuta descriptiva'


14.- Listar todos los proyectos que se iniciaron a partir del ‘20/12/1990’

SELECT fechainicio
FROM PROYECTO
WHERE fechainicio >= '20/12/1990'




15.- Listar todos los documentos correspondientes al proyecto ‘000009’

SELECT D.codD, D.nombre, D.descripcion, D.tipo_contenido
FROM DOCUMENTO D, SEGUIMIENTO S, PROYECTO P
WHERE D.codD = S.codDoc
AND S.codProy = P.codP
AND P.codP = 000009




16. ¿Cuantos y cuales son pasos en los que intervino el funcionario 146?


SELECT F.nombre, F.item, P.nombre AS Empresa, A.fecha_adjFROM FUNCIONARIO F INNER JOINSEGUIMIENTO S ON F.item = S.Item INNER JOINPROYECTO P ON S.codProy = P.codP INNER JOINADJUDICACION A ON P.codP = A.codProyWHERE (F.item = 114)







17.- ¿Quién es el funcionario 104?

SELECT nombre
FROM FUNCIONARIO
WHERE item = 104









18.- ¿Cuántos registros tiene la tabla unidad?

SELECT COUNT(*) AS CONTARFROM UNIDAD









 19.- ¿El remanente del proyecto ‘000005’ esta correcto?
SELECT  *
FROM PRESUPUESTO Pre
JOIN PROYECTO P on Pre.codProy = P.codP
WHERE P.codP= 000005





20.- ¿Cuánto se presupuesto en todos los proyectos?

SELECT SUM(costoini) as COSTO_TOTALFROM PRESUPUESTO





21.- ¿Cuántos proyectos se llevan a cabo en el distrito 0006?


 ELECT COUNT(*)AS NUMERO_PROYECTOS
FROM PROYECTO P, DIST_PROY DP ,DISTRITO D
WHERE P.codP = DP.codProy
AND DP.nroDist=D.nroDAND D.nroD=0006




22.- ¿Cuántos distritos son del tipo ‘CALIDAD DE VIDA BAJA’?

SELECT COUNT(*) as NUM_DISTRITOFROM DISTRITOWHERE descripcion = 'calidad de vida baja'





23.- Mostrar los proyectos que se adjudico la empresa ‘Coca Cola’

SELECT P.codP,P.nombre
FROM PROYECTO P,ADJUDICACION A,EMPRESA E
WHERE P.codP = A.codProy
AND A.nit=E.nit
AND E.nombre='coca-cola'




Añadir leyenda


24.- Determinar el monto entre todos los proyectos adjudicados por la empresa ‘000008’

SELECT SUM(P.costoIni)AS TOTAL
FROM EMPRESA E, ADJUDICACION A, PRESUPUESTO P
WHERE E.nit = A.nit
AND A.codProy=P.codProy
AND E.nit= 5





25.- ¿Cuántos son los proyectos presupuestados con más de 15.000Bs?

SELECT COUNT(*) as TOTALFROM PROYECTO p,PRESUPUESTO preWHERE P.codP=PRE.codProyAND PRE.costofin>15000







28.- Determinar los proyectos con monto superior a 20.000 de costo inicial
SELECT P.codP, P.nombre, P.fechainicio, PRE.costoIni
FROM PROYECTO P, PRESUPUESTO PRE
WHERE P.codP=PRE.codProy AND   PRE.costoIni>20000




29.- Determinar la cantidad de funcionarios de la unidad ’cobranzas’

SELECT COUNT(*) AS TOTAL
FROM FUNCIONARIO F, UNIDAD U
WHERE F.NombreU = U.nombreU AND



30.- Mostrar la unidad en la que se encuentra el funcionario ‘MENDEZ PRIETO VICTOR’ U.nombreU='educacion' 
SELECT U.nombreU,U.descripcionFROM UNIDAD U,FUNCIONARIO FWHERE F.NombreU=U.nombreUAND F.nombre='MENDEZ PRIETO VICTOR'








31.- Determinar el número de usuarios cuyo idUsuario empieza con el carácter ‘M’

SELECT *
FROM USUARIO
WHERE idUsuario like 'm%'










32.- Determinar la cantidad de teléfonos del funcionario104

SELECT COUNT(*) AS TOTAL
FROM FUNCIONARIO F , TELEFONOF TF
WHERE F.item = TF.Item AND  F.item=104





33.- Mostrar los números de teléfono de la empresa 524413
SELECT *
FROM EMPRESA E, TELEFONOE TE
WHERE E.nit=TE.Nit AND  E.nit= 524413

lunes, 22 de agosto de 2011

TAREA 2

Habitualmente cuando necesitamos recuperar la información de una base de datos nos encontramos con que dicha información se encuentra repartida en varias tablas, referenciadas a través de varios códigos. De este modo si tuviéramos una tabla de ventas con un campo cliente, dicho campo contendría el código del cliente de la tabla de cliente. 
Sin embargo está forma de almacenar la información no resulta muy útil a la hora de consultar los datos. SQL nos proporciona una forma fácil de mostrar la información repartida en varias tablas, las consultas combinadas o JOINS.


SENTENCIA   JOIN

La sentencia JOIN en SQL permite combinar registros de dos o más tablas en una base de datos relacional. En el Lenguaje de Consultas Estructurado (SQL), hay tres tipo de JOIN: interno, externo, y cruzado.
Matemáticamente, JOIN es composición relacional, la operación fundamental en el álgebra relacional, y generalizando es una función de composición.

Combinación interna (INNER JOIN)

El INNER JOIN es un tipo de composición de tablas, que permite emparejar filas de distintas tablas de forma más 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 condición de emparejamiento, para cada fila de una de las tablas busca directamente en la otra tabla las filas que cumplen la condición, con lo cual se emparejan sólo las filas que luego aparecen en el resultado.


La sintaxis es la siguiente:

FROM tabla1 INNER JOIN tabla2 ON tabla1.campo1 operadordecomparación tabla2.campo2
  •  tabla1 y tabla2 son especificaciones de tabla (nombre de tabla con alias o no, nombre de consulta guardada), de las tablas cuyos registros se van a combinar.  Pueden ser las dos la misma tabla, en este caso es obligatorio definir al menos un alias de tabla.
  •  campo1, campo2 son las columnas de emparejamiento. Observar que dentro de la cláusula ON los nombres de columna deben ser nombres cualificados (llevan delante el nombre de la tabla y un punto).
  •  Las columnas de emparejamiento deben contener la misma clase de datos, las dos de tipo texto, de tipo fecha etc... los campos numéricos deben ser de tipos similares. Por ejemplo, se puede combinar campos AutoNumérico y Long puesto que son tipos similares, sin embargo, no se puede combinar campos de tipo Simple y Doble. Además las columnas no pueden ser de tipo Memo ni OLE.
  •  operadordecomparación representa cualquier operador de comparación ( =, <, >, <=, >=, o <> ) y se utiliza para establecer la condición de emparejamiento.
Se pueden definir varias condiciones de emparejamiento unidas por los operadores AND y OR poniendo cada condición entre paréntesis.

Ejemplo:

SELECT *
FROM  empleado
     INNER JOIN compra
        ON empleado.ci = compra.codResp


Ejemplo:

SELECT *
FROM  empleado
     INNER JOIN compra
        ON empleado.ci > compra.codResp




DE TABLA IZQUIERDA (LEFT OUTER JOIN O LEFT JOIN)

El resultado de esta operación siempre contiene todos los registros de la tabla de la izquierda (la primera tabla que se menciona en la consulta), aun cuando no exista un registro correspondiente en la tabla de la derecha, para uno de la izquierda.
La sentencia LEFT OUTER JOIN retorna la pareja de todos los valores de la tabla izquierda con los valores de la tabla de la derecha correspondientes, o retorna un valor nulo NULL en caso de no correspondencia.

La sintaxis es la siguiente:

FROM tabla1 LEFT JOIN tabla2 ON tabla1.campo1 operadordecomparación tabla2.campo2

EJEMPLO:

SELECT *
FROM   empleado
     LEFT OUTER JOIN compra
        ON empleado.ci = compra.codResp






DE TABLA DERECHA (RIGHT OUTER JOIN O RIGHT JOIN)

Esta operación es inversa a la anterior; el resultado de esta operación siempre contiene todos los registros de la tabla de la derecha (la segunda tabla que se menciona en la consulta), aun cuando no exista un registro correspondiente en la tabla de la izquierda, para uno de la derecha.
La sentencia RIGHT OUTER JOIN retorna la pareja de todos los valores de la tabla derecha con los valores de la tabla de la izquierda correspondientes, o retorna un valor nulo NULL en caso de no correspondencia.


La sintaxis es la siguiente:

FROM tabla1 RIGTH JOIN tabla2 ON tabla1.campo1 operadordecomparación tabla2.campo2

EJEMPLO:
SELECT *
FROM   empleado
   right OUTER JOIN compra
        ON empleado.ci = compra.codResp





Agrupamiento de registros y funciones agregadas

SQL permite combinar en un único registro, registros con valores idénticos en la lista de campos que se especifique. Una vez indicado por qué campo/s queremos agrupar la información, se pueden utilizar funciones de agregación que realizarán operaciones resumen sobre el grupo de registros (cuenta de registros, suma, media aritmética, máximo o mínimo, etc.).
Para indicar que se desea realizar un agrupamiento de registros se utiliza la cláusula Group By indicando aquellos campos por los que se desee agrupar la información.
Las funciones de agregación más importantes se muestran en la tabla, todas ellas, excepto COUNT(*) ignoran cualquier nulo en sus argumentos.

FUNCIÓN
DESCRIPCIÓN
AVG
Utilizada para calcular el promedio de los valores de un campo determinado
COUNT
Utilizada para devolver el número de registros de la selección
SUM
Utilizada para devolver la suma de todos los valores de un campo determinado
MAX
Utilizada para devolver el valor más alto de un campo especificado
MIN
Utilizada para devolver el valor más bajo de un campo especificado

Group By

Group By combina en un único registro los registros los valores idénticos en la lista de campos especificada.
Suele ir acompañada de alguna función resumen o de agregado. Si se incluye alguna función de agregado en el comando SELECT, se creará un valor resumen para cada registro si no se incluye ninguna función agregada los valores de resumen se omiten.
El orden de los nombres de los campos determinará los niveles de agrupamiento, del más alto al más bajo.
GROUP BY puede hacer referencia a cualquier campo de la tabla, incluso sin que esté presente en la cláusula SELECT siempre que el comando SELECT haga referencia a alguna función de agregado de SQL.

Todos los campos de la lista de campos de SELECT deben o bien incluirse en la cláusula GROUP BY o como argumentos de una función SQL agregada

Los valores Null en los campos GROUP BY se agrupan y no se omiten, pero, no se evalúan en ninguna de las funciones SQL agregadas.
Para excluir aquellas filas que no se desea agrupar se utiliza la cláusula WHERE y, para excluir las filas una vez agrupadas se utiliza la cláusula HAVING.
Los datos tipo Memo, Objetos OLE, etc., no se pueden agrupar.


EJEMPLOS: FUNCIONES AGREDAS




SELECT SUM(precioCpra)AS TOTAL
FROM producto







SELECT MAX(precioCpra)AS MAXIMO FROM producto







SELECT AVG(precioCpra)AS PROMEDIO  FROM producto






SELECT COUNT(precioCpra)AS CONTAR 
FROM producto 





   
SELECT MIN(precioCpra)AS MINIMO
FROM  producto






EJEMPLOS: GROUP BY


SELECT max(precioCpra)AS maximoFROM productoGROUP BY precioCpra

SELECT max(precioCpra)AS maximo
FROM producto
GROUP BY precioCpra HAVING precioCpra>10 BY precioCpra