Mi aprendizaje sobre consulta de datos

 /*CREACION BASE DE DATOS CONSTRUCTORA*/

/*CARLOS MARIO VELASQUEZ ORTIZ*/

/*FEBRERO 25 DE FEBRERO 2025*/


/****CREAR BASE DE DATOS CONSTRUCTORA****/

CREATE DATABASE BD_CONSTRUCTORA2025_1;

USE BD_CONSTRUCTORA2025_1;


/* CREAR TABLA OFICIO */

CREATE TABLE tblOficio(

Tipo_Oficio VARCHAR(30),

Bonificacion INT,

CHECK(Bonificacion >= 30000 and Bonificacion <= 80000),

Horas_Semanas INT,

CHECK(Horas_Semanas >= 30 and Horas_Semanas <= 60),

PRIMARY KEY (Tipo_Oficio));


/*CREAR TABLA TRABAJADOR*/

CREATE TABLE tblTrabajador(

Cedula INT,

Nombre VARCHAR(50) not null,

Valor_Hora INT,

/*CHCK COMANDO PARA HACER VALIDACIONES*/

CHECK(Valor_Hora >= 7000 and Valor_Hora <= 20000),

Tipo_Oficio VARCHAR(30),

PRIMARY KEY (Cedula),

FOREIGN KEY (Tipo_Oficio) REFERENCES tblOficio(Tipo_Oficio));


/*CREAR TABLA AREA*/

CREATE TABLE tblArea(

Cod_Area VARCHAR(10),

Nom_Area VARCHAR(30),

Estrato int,

CHECK(Estrato >= 1 and Estrato <= 7),

PRIMARY KEY (Cod_Area));


/*CREAR TABLA EDIFICIO*/

CREATE TABLE tblEdificio(

Iden_Edif INT,

Direccion VARCHAR(30),

Tipo VARCHAR (30),

Calidad INT,

CHECK (Calidad >= 1 and Calidad <= 5),

Categoria INT,

CHECK(Categoria >= 1 and Calidad <= 5),

Cod_Area VARCHAR (10)

PRIMARY KEY (Iden_Edif),

FOREIGN KEY(Cod_Area) REFERENCES tblArea(Cod_Area));


/*CREAR TABLA ASIGNAR*/

CREATE TABLE tblAsignar(

Cedula INT,

Iden_Edif INT,

Fecha_I DATETIME,

Num_Dias INT,

CHECK (Num_Dias > 0),

PRIMARY KEY(Cedula,Iden_edif),

FOREIGN KEY(Cedula) REFERENCES tbltrabajador(Cedula),

FOREIGN KEY(Iden_edif) REFERENCES tblEdificio(Iden_Edif));


/************ INSERTAR DATOS A LA CADA UNA DE LAS TABLAS *********/


/***INSERTA DATOS A LA TABLA OFICIO***/


INSERT INTO tbloficio VALUES('Decorador',30000,35)

INSERT INTO tbloficio VALUES('Albañil',35000,37)

INSERT INTO tbloficio VALUES('Carpintero',31000,40)

INSERT INTO tbloficio VALUES('Electrico',35000,35)

INSERT INTO tbloficio VALUES('Arquitecto',40000,30)


/***** INSERTAR DATOS A LA TABLA TRABAJADOR******/


INSERT INTO tbltrabajador VALUES(1235,'Annie',12500,'Electrico')

INSERT INTO tbltrabajador VALUES(1311,'Roberto',15750,'Decorador') 

INSERT INTO tbltrabajador VALUES(1412,'Carlos',13700,'Decorador') 

INSERT INTO tbltrabajador VALUES(1415,'Lina',12500,'Decorador') 

INSERT INTO tbltrabajador VALUES(1418,'Pedro',10000,'Carpintero')

INSERT INTO tbltrabajador VALUES(1520,'Luis',11750,'Electrico') 

INSERT INTO tbltrabajador VALUES(1525,'Juan',20000,'Arquitecto')

INSERT INTO tbltrabajador VALUES(2920,'Raul',10000,'Carpintero')

INSERT INTO tbltrabajador VALUES(3001,'Gabriel',15500,'Decorador')

INSERT INTO tbltrabajador VALUES(3231,'Alvaro',17400,'Decorador') 

INSERT INTO tbltrabajador VALUES(4446,'Mario',8200,'Albañil') 

INSERT INTO tbltrabajador VALUES(8520,'Bernardo',8500,'Albañil')


/***** INSERTAR DATOS A LA TABLA AREA******/


INSERT INTO tblarea VALUES('a10','Sur',2)

INSERT INTO tblarea VALUES('a11','Sur',4)

INSERT INTO tblarea VALUES('a12','Norte',3)

INSERT INTO tblarea VALUES('a13','Norte',2)


/***** INSERTAR DATOS A LA TABLA EDIFICIOS******/


INSERT INTO tbledificio VALUES(111,'calle1213','Oficina',3,2,'a10')

INSERT INTO tbledificio VALUES(210,'calle1222','Oficina',4,3,'a10')

INSERT INTO tbledificio VALUES(215,'calle1215','Comercio',5,3,'a11')

INSERT INTO tbledificio VALUES(312,'calle1313','Oficina',5,2,'a13')

INSERT INTO tbledificio VALUES(435,'calle1513','Comercio',2,4,'a13')

INSERT INTO tbledificio VALUES(460,'calle1263','Almacen',4,4,'a12')

INSERT INTO tbledificio VALUES(520,'calle1223','Residencia',3,5,'a10')

INSERT INTO tbledificio VALUES(820,'calle1245','Almacen',3,5,'a10')


/***** INSERTAR DATOS A LA TABLA ASIGNAR******/


INSERT INTO tblasignar VALUES(1235,111,'02/02/02',25)

INSERT INTO tblasignar VALUES(1235,210,'01/03/02',5)

INSERT INTO tblasignar VALUES(1235,520,'02/02/02',25)

INSERT INTO tblasignar VALUES(1235,820,'01/03/02',5)

INSERT INTO tblasignar VALUES(1235,215,'02/07/02',10)

INSERT INTO tblasignar VALUES(1235,312,'02/02/02',10)

INSERT INTO tblasignar VALUES(1235,435,'01/02/04',22)

INSERT INTO tblasignar VALUES(1235,460,'02/02/05',21)

INSERT INTO tblasignar VALUES(1412,210,'02/02/02',22)

INSERT INTO tblasignar VALUES(1412,312,'02/02/02',14)

INSERT INTO tblasignar VALUES(1418,435,'02/02/02',23)

INSERT INTO tblasignar VALUES(1418,460,'02/02/02',10)

INSERT INTO tblasignar VALUES(3231,312,'02/02/02',25)

INSERT INTO tblasignar VALUES(3231,111,'02/02/02',13)

INSERT INTO tblasignar VALUES(4446,111,'02/02/02',18)


/***** REALIZAR CONSULTAS******/


/*****  CONSULTAR TODOS LOS DATOS DE CADA UNA DE LAS TABLAS *****/

SELECT * FROM tblArea

SELECT * FROM tblAsignar

SELECT * FROM tblEdificio

SELECT * FROM tblOficio

SELECT * FROM tblTrabajador


/***** HALLAR EL TOTAL DE DIAS ASIGNADOS A CADA UNO DE LOS TRABAJADORS SI ESTE ES MAYOR QUE 20 *****/


SELECT cedula, SUM (Num_Dias) AS TOTAL

FROM tblAsignar

GROUP BY cedula

HAVING SUM(Num_Dias) > 20;


/***** MOSTRAR EL NOMBRE Y EL VALOR HORA DE LOS TRABAJADORES *****/


SELECT Nombre, Valor_Hora FROM tblTrabajador;


/***** MOSTRAR TODOS DE LOS TRABAJADORES *****/


SELECT *FROM tblTrabajador


/***** MOSTRAR LOS OFICIOS DE LOS TRABAJADORES CON DISTINCT (MUESTRA LOS DATOS SIN REPETIR VALORES *****/


SELECT DISTINCT Tipo_Oficio FROM tblTrabajador;


/***** MOSTRAR LOS 3 PRIMEROS REGISTROS DE LOS TRABAJADORES *****/


SELECT TOP 3 Nombre, Valor_Hora FROM tblTrabajador;


/** MOSTRAR NOMBRE DEL TRABAJADOR CON EL VALOR HORA AUMENTADO EL 3%***/


SELECT Nombre, Valor_Hora , Valor_Hora * 0.03 AS PORCENTAJE,

Valor_Hora+Valor_Hora*0.03 AS TOTAL

FROM tblTrabajador


/*** MOSTRAR LOS OFICIOS DE LOS TRABAJADORES RENOMBRANDO EN OFICIO ***/


SELECT Tipo_Oficio AS OFICIO  

FROM tblTrabajador;


/***** MOSTRAR EL TOTAL   MAXIMO DE LOS VALORES HORA*****/


SELECT SUM (Valor_Hora) AS TOTAL,

MAX(Valor_Hora) AS MAXIMO

FROM tblTrabajador


/***** MOSTRAR LOS NOMBRES DE LOS TRABAJADORES Y EL NUMERO DE DIAS ASIGNADO *****/



SELECT tblTrabajador.Nombre, tblAsignar.Num_Dias

FROM tblTrabajador

INNER JOIN tblAsignar

ON tblTrabajador.Cedula = tblAsignar.Cedula;



/****MOSTRAR LOS TRABAJADORES QUE TENGAN EL MISMO VALOR DE HORAS ****/


SELECT tra.nombre, tra.valor_hora

FROM tblTrabajador tra, tblTrabajador do

WHERE tra.Valor_Hora = do.Valor_Hora

AND tra.Cedula <> do.Cedula

GROUP BY tra.Valor_Hora, tra.nombre;



/***** MOSTRAR LOS NOMBRES DE LOS TRABAJADORES QUE TIENEN UN VALOR HORA MAYOR QUE 10000   *****/


SELECT nombre, Valor_Hora AS VALOR_HORA

FROM tblTrabajador WHERE  Valor_Hora > 10000;

select * from tblTrabajador



/***** MOSTRAR LOS NOMBRES DE LOS TRABAJADORES QUE TIENEN UN VALOR HORA ENTRE  10000  Y 30000  *****/


SELECT nombre, Valor_Hora AS VALOR_HORA

FROM tblTrabajador

WHERE Valor_Hora BETWEEN 10000 AND  30000;


/***** MOSTRAR LOS NOMBRES DEL TRABAJADOR QUE EL NOMBRE TENGA LA CADENA AR   *****/


SELECT nombre FROM tblTrabajador WHERE Nombre LIKE '%AR%'; 



/****MOSTRAR LOS NOMBRES DE LOS TRABAJADORES NELSON FERNANDO O GABRIEL****/



SELECT * FROM tblTrabajador 

WHERE Nombre IN ( 'NELSON', 'FERNANDO','GABRIEL');


/****MOSTRAR LOS NOMBRES DE LOS TRABAJADORES Y EL NUMERO DE DIAS ASIGNADO SI ES MAYOR QUE 15****/


SELECT tblTrabajador.Nombre AS NOM_TRABAJADOR, tblAsignar.Num_Dias AS NUMERO_DIAS_ASIGNADOS

FROM tblTrabajador

INNER JOIN tblAsignar

ON tblTrabajador.Cedula = tblAsignar.Cedula

WHERE tblAsignar.Num_Dias > 15;


/****LA SENTENCIA LEFT JOIN COMBINA LOS VALORES DE LA PRIMERA TABLA CON LOS VALORES DE LA SEGUDNA TABLA SIEMPRE DEVOLVERA LAS FILAS DE LA PRIMERA TABLA E INCLUSO AUNQUE NO CUMPLA LA CONDUCION****/


SELECT * FROM tblTrabajador

LEFT JOIN tblAsignar ON tblTrabajador.Cedula = tblAsignar.Cedula;

SELECT * FROM tblAsignar


/****LA SENTENCIA RIGHT JOIN COMBINA LOS VALORES DE LA PRIMERA TABLA CON LOS VALORES DE LA SEGUDNA TABLA SIEMPRE DEVOLVERA LAS FILAS DE LA SEGUNDA TABLA E INCLUSO AUNQUE NO CUMPLA LA CONDUCION EN ALGUNAS BASES DE DAROS LA SENTENCIA RGTH JOIN ES IGUAL A RIGHT OUTER JOIN****/


SELECT * FROM tblTrabajador

RIGHT JOIN tblAsignar ON tblTrabajador.Cedula = tblAsignar.Cedula;

SELECT * FROM tblAsignar



/****HALLAR LA CANTIDAD DE TRABAJADORES POR CADA OFICIO****/


SELECT Tipo_Oficio, COUNT(*) AS Total_Trabajadores

FROM tblTrabajador

GROUP BY Tipo_Oficio;


/**** HALLAR EL TOTAL DE DIAS ASIGNADOS A CADA TRANAJADOR SI ESTE ES MAYOR QUE 20****/


SELECT cedula, SUM(Num_Dias) AS total_dias

FROM tblAsignar

GROUP BY cedula

HAVING SUM(Num_Dias) > 20;


/**** HALLAR LOS DATOS DE LOS TRABAJADORES ORDENADOS POR NOMBRE****/


SELECT * FROM tblTrabajador

ORDER BY Nombre


/****HALLAR EL NOMBRE Y EL TOTAL DE DIAS ASIGNADOS A CADA TRABAJADOR Y MOSTRAR SI EL TOTAL DE DIAS ES MAYOR QUE EL MINIMO VALOR DE NUMERO DE HORAS****/


SELECT tblAsignar.Cedula, tblTrabajador.Nombre, SUM(Num_Dias) AS TOTAL_DIAS

FROM tblAsignar

INNER JOIN tblTrabajador ON tblAsignar.Cedula = tblTrabajador.Cedula

GROUP BY tblAsignar.Cedula, tblTrabajador.Nombre

HAVING sum( num_Dias) > ( SELECT MIN(Horas_Semanas) from tblOficio);

Comentarios

Entradas populares de este blog

Descripción de los sistemas numéricos y sus conversiones.

Diagrama sistema liquidación de nómina.

Análisis BDOO y BDD