/* Consider yourself to be sam and you have been given the below tasks to complete using
the tables
STUDIES, SOFTWARE AND PROGRAMMER */
-- Let us create Studies Table
CREATE TABLE STUDIES
(
Student_id INT PRIMARY KEY,
Student_Name VARCHAR(20),
Student_place VARCHAR(20),
Course VARCHAR(20),
Cost Int
);
INSERT INTO STUDIES VALUES
(1, 'ANAND', 'SABHARI', 'PGDCA', 45000),
(2, 'ALTAF', 'COIT', 'DCA', 7200),
(3, 'JULIANA', 'BITS', 'MCA', 22000),
(4, 'KAMALA', 'PRAGATHI', 'DCP', 5000),
(5, 'MARY', 'SABHARI', 'PGDCA', 4600),
(6, 'NELSON', 'PRAGATHI', 'DAP', 6200),
(7, 'PATRICK', 'SABHARI', 'DCA', 5200),
(8, 'QADIR', 'APPLE', 'HDCP', 14000),
(9, 'RAMESH', 'SABHARI', 'PGDCA', 4500),
(10,'REBECCA', 'BPILLANI', 'DCA', 11000),
(11, 'REMITHA', 'BDPS', 'DCS', 6000),
(12, 'REVATHI', 'SABHARI', 'DAP', 5000),
(13, 'VIJAYA', 'BDPS', 'DCA', 48000);
SELECT * FROM STUDIES;
-- CREATE SOFTWARE TABLE
CREATE TABLE SOFTWARE
(
Student_id INT REFERENCES STUDIES(Student_id),
Title VARCHAR(20),
DEV_IN VARCHAR (10),
SCOST INT,
DCOST INT,
SOLD INT
);
INSERT INTO SOFTWARE VALUES
(1, 'PARACHUTES', 'BASIC', 399, 6000, 43),
(1, 'VIDEO TITLING PACK', 'PASCAL', 7500, 16000, 9),
(3, 'INVENTORY CONTROL', 'COBOL', 3000, 3500, 0),
(4, 'PAYROLL PACKAGE', 'DBASE', 9000, 20000, 7),
(5, 'FINANCIAL ACC.S/W', 'ORACLE', 18000, 85000, 4),
(7, 'CODE GENERATION', 'COBOL', 4500, 20000, 23),
(8, 'READ ME', 'C++', 300, 1200, 84),
(8, 'BOMBS AWAY', 'ASSEMBLY', 750, 5000, 11),
(8, 'VACCINES', 'C', 1900, 3400, 21),
(9, 'HOTEL MANAGEMENT', 'DBASE', 12000, 3500, 4),
(9, 'DEAD LEE', 'PASCAL', 599, 4500, 73),
(11, 'PC UTILITIES', 'C', 725, 5000, 51),
(11, 'TSR HELP PACKAGE', 'ASSEMBLY', 2500, 6000, 6),
(12, 'HOSPITAL MANAGEMENT', 'PASCAL', 1100, 75000, 2),
(12, 'QUIZ MASTER', 'BASIC', 3200, 2100, 15),
(13, 'ISR EDITION', 'C', 900, 700, 6);
SELECT * FROM SOFTWARE;
-- CREATE PROGRAMMER TABLE
CREATE TABLE PROGRAMMER
(
P_ID INT REFERENCES STUDIES(Student_id),
DOB DATE,
DOJ DATE,
GENDER CHAR CHECK(GENDER IN ('M','F')),
PROF1 VARCHAR(15),
PROF2 VARCHAR(15),
SALARY INT CHECK (SALARY>0)
);
INSERT INTO PROGRAMMER VALUES
(1,'21-APR-66','21-APR-92','M','PASCAL','BASIC',3200),
(2,'02-JUL-64','13-NOV-90','M','CLIPPER','COBOL',2800),
(3,'31-JAN-68','21-APR-90','F','COBOL','DBASE',3000),
(4,'30-OCT-68','02-JAN-92','F','C','DBASE',2900),
(5,'24-JUN-70','01-FEB-91','F','C++','ORACLE',4500),
(6,'11-SEP-85','11-OCT-89','M','COBOL','DBASE',2500),
(7,'10-NOV-65','21-APR-90','M','PASCAL','CLIPPER',2800),
(8,'31-AUG-65','21-APR-91','M','ASSEMBLY','C',3000),
(9,'03-MAY-67','28-FEB-91','M','PASCAL','DBASE',3200),
(10,'01-JAN-67','01-DEC-90','F','BASIC','COBOL',2500),
(11,'19-APR-70','20-APR-93','F','C','ASSEMBLY',3600),
(12,'02-DEC-69','02-JAN-92','F','PASCAL','BASIC',3700),
(13,'14-DEC-65','02-MAY-92','F','FOXPRO','C',3500);
SELECT * FROM PROGRAMMER;
--1) What is the Highest Number of copies sold by a Package?
SELECT MAX(SOLD) AS MAX_SOLD FROM SOFTWARE;
--2) Display lowest course Fee.
SELECT MIN(COST) AS MIN_COST FROM STUDIES
--3) How old is the Oldest Male Programmer.
SELECT MAX(DATEDIFF(YEAR, DOB, GETDATE())) AS OLDEST_AGE FROM PROGRAMMER;
--4) What is the AVG age of Female Programmers?
SELECT AVG(DATEDIFF(YEAR, DOB, GETDATE())) AS AVG_AGE FROM PROGRAMMER
WHERE GENDER = 'F';
/*5) Calculate the Experience in Years for each Programmer and Display with
their names in Descending order.*/
SELECT * FROM PROGRAMMER;
SELECT
S.STUDENT_NAME,
DATEDIFF(YEAR, P.DOJ, GETDATE()) AS EXPERIENCE_IN_YEARS
FROM PROGRAMMER P INNER JOIN STUDIES S ON S.Student_id = P.P_ID
ORDER BY S.Student_Name DESC;
--6) How many programmers have done the PGDCA Course?
SELECT
S.STUDENT_NAME,
S.COURSE
FROM PROGRAMMER P INNER JOIN STUDIES S ON S.Student_id = P.P_ID
WHERE S.Course = 'PGDCA';
--7 How much revenue has been earned thru sales of Packages Developed in C.
SELECT SUM (SCOST * SOLD) AS REVENUE FROM SOFTWARE
WHERE DEV_IN = 'C';
--8) How many Programmers Studied at Sabhari?
SELECT COUNT(STUDENT_PLACE) AS STUDIED_IN_SABHARI FROM STUDIES
WHERE Student_place = 'SABHARI';
--9) How many Packages Developed in DBASE?
SELECT COUNT(DEV_IN) AS TOTAL FROM SOFTWARE
WHERE DEV_IN = 'DBASE';
--10) How many programmers studied in Pragathi?
SELECT COUNT(STUDENT_PLACE) AS STUDIED_IN_PRAGATHI FROM STUDIES
WHERE Student_place = 'PRAGATHI';
--11) How many Programmers Paid 5000 to 10000 for their course?
SELECT COUNT(COST) AS TOTAL FROM STUDIES
WHERE COST BETWEEN 5000 AND 10000;
--12) How many Programmers know either COBOL or PASCAL?
SELECT COUNT(P_ID) TOTAL FROM PROGRAMMER
WHERE PROF1 IN('COBOL','PASCAL') OR PROF2 IN ('COBOL','PASCAL');
--13) How many Female Programmers are there?
SELECT COUNT(GENDER) AS TOTAL FROM PROGRAMMER
WHERE GENDER = 'F';
--14) What is the AVG Salary?
SELECT AVG(SALARY) AVG_SALARY FROM PROGRAMMER;
--15) How many people draw salary 2000 to 4000?.
SELECT COUNT(SALARY) AS TOTAL FROM PROGRAMMER
WHERE SALARY BETWEEN 2000 AND 4000;
--16) Display the sales cost of the packages Developed by each Programmer Language wise
SELECT DEV_IN, SUM(SCOST) AS COST_OF_PACKAGE FROM SOFTWARE
GROUP BY DEV_IN;
--17) Display the details of the software developed by the male students of Sabhari.
SELECT
S.STUDENT_NAME,
SO.TITLE,
SO.DEV_IN,
SO.SCOST,
SO.DCOST,
SO.SOLD,
P.GENDER
FROM STUDIES S INNER JOIN SOFTWARE SO ON S.STUDENT_ID = SO.Student_id
INNER JOIN PROGRAMMER P ON S.Student_id = P.P_ID
WHERE S.Student_place = 'SABHARI' AND P.GENDER = 'M';
--18) Who is the oldest Female Programmer who joined in 1992?
SELECT
MIN(P.DOB) AS OLDEST_FEMALE_DOB,
P.P_ID,
S.STUDENT_NAME
FROM PROGRAMMER P INNER JOIN STUDIES S ON S.Student_id = P.P_ID
WHERE GENDER = 'F' AND YEAR(DOJ) = 1992
GROUP BY P.P_ID, S.Student_Name
ORDER BY OLDEST_FEMALE_DOB ASC;
--19) Who is the youngest male Programmer born in 1965?
SELECT
MIN(P.DOB) AS YOUNGEST_MALE_DOB,
P.P_ID,
S.STUDENT_NAME
FROM PROGRAMMER P INNER JOIN STUDIES S ON S.Student_id = P.P_ID
WHERE GENDER = 'M' AND YEAR(DOB) = 1965
GROUP BY P.P_ID, S.Student_Name
ORDER BY YOUNGEST_MALE_DOB ASC;
--20) Which Package has the lowest selling cost?
SELECT * FROM SOFTWARE;
SELECT DEV_IN, SCOST FROM SOFTWARE
WHERE SCOST = (SELECT MIN(SCOST) FROM SOFTWARE);
-- 21) Which Female Programmer earning more than 3000 does not know C, C++,ORACLE or
DBASE?
SELECT
S.STUDENT_NAME,
P.SALARY,
SO.DEV_IN
FROM STUDIES S INNER JOIN SOFTWARE SO ON S.Student_id = SO.Student_id
INNER JOIN PROGRAMMER P ON S.Student_id = P.P_ID
WHERE P.SALARY > 3000 AND P.GENDER = 'F' AND DEV_IN NOT IN ('C', 'C++', 'ORACLE',
'DBASE');
--22) Who is the Youngest Programmer knowing DBASE?
SELECT
S.STUDENT_NAME,
P.*
FROM PROGRAMMER P INNER JOIN STUDIES S ON S.Student_id = P.P_ID
WHERE PROF1 = 'DBASE' OR PROF2 = 'DBASE'
AND DOB = (SELECT MAX(DOB) FROM PROGRAMMER);
--23) Which Language is known by only one Programmer?
SELECT PROF1 FROM PROGRAMMER GROUP BY PROF1
HAVING PROF1 NOT IN (SELECT PROF2 FROM PROGRAMMER) AND COUNT(PROF1) = 1
UNION
SELECT PROF2 FROM PROGRAMMER GROUP BY PROF2
HAVING PROF2 NOT IN (SELECT PROF1 FROM PROGRAMMER) AND COUNT(PROF2) = 1;
--24) Who is the most experienced male programmer knowing PASCAL?
SELECT
S.STUDENT_NAME,
P.*
FROM PROGRAMMER P INNER JOIN STUDIES S ON P.P_ID = S.Student_id
WHERE P.GENDER = 'M' AND P.PROF1 = 'PASCAL' OR P.PROF2 = 'PASCAL'
AND P.DOJ = (SELECT MAX(DOJ) FROM PROGRAMMER);
--25) Who is the least experienced Programmer?
SELECT
S.STUDENT_NAME,
P.*
FROM PROGRAMMER P INNER JOIN STUDIES S ON P.P_ID = S.Student_id
WHERE P.DOJ = (SELECT MAX(DOJ) FROM PROGRAMMER);
--26) Display the Number of Packages in Each Language for which Development Cost is less
THAN 1000
SELECT COUNT(TITLE) TOTAL, DEV_IN FROM SOFTWARE
WHERE DCOST < 1000
GROUP BY DEV_IN;
--27) Display Highest, Lowest and Average Salaries for those earning more than 2000.
SELECT MIN(SALARY) MIN_SALARY, MAX(SALARY) MAX_SALARY, AVG(SALARY) AVG_SALARY
FROM PROGRAMMER
WHERE SALARY > 2000;