Vous êtes sur la page 1sur 10

ASSIGNMENT-8

CREATE TABLES AS FOLLOWING AND INSERT YOUR OWN DATA.


NOTE: UNDERLIEN REPRESENTS PRIMARY KEY AND @ REPRESENTS FOREIGN KEY.

1.EMPLOYEE(FNAME,MINT,LNAME,SSN,BDATE,EMPLOCATION,GENDER,
SALARY,@SUPERSSN,@DNO)
2.DEPARTMENT(DNAME,DNO)
3.DEPT_LOCATION(DLOCATION,@DNO)
4.DEPT_MGR(@SSN,@DNO,STARTDATE)
5.PROJECT(PNAME,PNO,PLOCATION,@DNO)
6. WORKS_ON(@SSN,@PNO,HOURS)
7. DEPENDENT(@SSN,DEPENDENT NAME,GENDER,BDATE,RELATIONSHIP)

QUESTIONS:
1)EMPLOYEE TABLE
CREATE TABLE employee
(
fname VARCHAR (44) NOT NULL DEFAULT '',
minit VARCHAR (44) NOT NULL DEFAULT '',
lname VARCHAR (44) NOT NULL DEFAULT '',
ssn INT PRIMARY KEY ,
bdate DATE NOT NULL ,
emp_location VARCHAR (100) NOT NULL,
gender char(1) DEFAULT '',
salary INT NOT NULL,
dno INT ,
FOREIGN KEY (dno) REFERENCES department(dno)
);
INSERT INTO employee
VALUES
('XAVIER', 'B','HERNANDEZ',123456789,1986-11-19,'HOUSTON',
'M', 30000,5),
('ANDREAS','J' ,'INIESTA' ,333444555, 1989-44,'Houston','M',40000,5),
('MARIA','G','SHARAPOVA',999887777 ,1988-12-15,'Spring',
'F', 25000, 4),
('SERENA','K','WILLIAMS',987654321,1985-6-1, 'Bellaire',
'F', 43000, 4),
('LEO','S','MESSI', 666884444,1988-217,'Humble','M',38000,5),
('ANGEL','D','MARIA',453453453,1989-1130,'HOUSTON','F',25000,5),
('THOMAS','K','MULLER',987987978,1988-830,'HOUSTON','M',25000,4),
('JUAN','D','MATA',888665555,1986-417,'HOUSTON','M',55000,1);

2)DEPARTMENT TABLE
CREATE TABLE department
(
dname VARCHAR (44) NOT NULL DEFAULT '',
dno INT PRIMARY KEY
);
INSERT INTO department
VALUES
('RESEARCH',5),('ADMINISTRATION',4),('HEADQUARTERS',1);
3)DEPARTMENT LOCAION TABLE
CREATE TABLE dept_location
(
dlocation VARCHAR(44) NOT NULL DEFAULT '',
dno INTEGER ,
FOREIGN KEY (dno) REFERENCES department(dno)
);
INSERT INTO dept_location
VALUES
('HOUSTON',1),('STAFFORD',4),('BELLARIE',5),('AUSTIN',5),
('HOUSTON',5);
4)DEPARTMENT MANAGER TABLE
CREATE TABLE dept_mgr
(
ssn INTEGER ,
dno INTEGER ,
startdate DATE NOT NULL,
FOREIGN KEY (ssn) REFERENCES employee(ssn),
FOREIGN KEY (dno)REFERENCES department(dno)
);

INSERT INTO dept_mgr


VALUES
(33344455,5,2001-05-31),
(987654321,4,2004-11-12),
(888665555,1,2008-11-30);

5)PROJECT TABLE
CREATE TABLE project
(
pname VARCHAR (44) NOT NULL DEFAULT '',
pno INTEGER PRIMARY KEY ,
plocation VARCHAR (44) NOT NULL DEFAULT'',
dno INTEGER ,
FOREIGN KEY (dno)REFERENCES department(dno)
);
INSERT INTO project
VALUES ('CONSTRUCTION',1,'BELLAIRE',5),
('DEVELOPMENT',2,'AUSTIN',5),
('TESTING',3,'HOUSTON',5),
('LOGISTICS',10,'STAFFORD',4),
('ERP',20,'HOUSTON',1),
('SPORTS',30,'STAFFORD',4);

6)WORKS_ON TABLE
CREATE TABLE works_on
(
ssn INTEGER ,
pno INTEGER ,
hours TIME,
FOREIGN KEY (pno)REFERENCES project(pno),
FOREIGN KEY (ssn)REFERENCES employee(ssn)
);
INSERT INTO works_on
VALUES
(123456789, 1, 32:30:00),
(123456789, 2,7:30:00) ,
(666884444, 3, 40:00:00 ),
(453453453, 1, 20:00:00 ),
(453453453, 2, 20:00:00 ),
(333444555, 2, 10:00:00 ),
(333444555, 3, 10:00:00 ),
(333444555, 10, 10:00:00),
(333444555, 20, 10:00:00),
(999887777, 30, 30:00:00),
(999887777, 10, 10:00:00),
(987987978, 10, 35:30:00),
(987987978, 30, 5:00:00),
(987654321,30, 20:00:00),
(987654321,20 ,15:00:00),
(888665555, 20,null);

6)DEPENDENT TABLE
CREATE TABLE dependent (
ssn INTEGER ,
dependent_name VARCHAR (44) NOT NULL DEFAULT '',
gender CHAR(1) DEFAULT '',
bdate DATE ,
relationship VARCHAR (10) ,
FOREIGN KEY (ssn) REFERENCES employee(ssn)
)
INSERT INTO dependent
VALUES
(333444555, 'Alice', 'F',2008-05-12, 'DAUGHTER'),
(333444555,'Theodore', 'M',2004-02-17, 'SON'),
(333444555, 'Joy', 'F', 1988-12-21, 'SPOUSE'),
(987654321, 'Abner', 'M',1989-02-17, 'SPOUSE'),
(123456789, 'Michael', 'M', 2010-11-31, 'SON'),
(123456789, 'Alice', 'F',2012-08-06,'DAUGHTER'),
(123456789, 'Elizabeth', 'F',1988-07-09,'SPOUSE');

A) LIST NAMES OF EMPLOYEES WHO WERE BORN IN THE 80S AND


LIVE IN HOUSTON
SELECT concat(fname,'
',minit,'
',lname) AS NAME
FROM employee
WHERE emp_location= 'HOUSTON' AND year(bdate) BETWEEN 1980
AND 1990;
B)LIST NAMES OF PROJECTS THAT INVOLVE SOME EMPLOYEE WHO IS
LIVING IN BELLAIRE, AND EITHER WORKS ON THE PROJECT OR IS A
MANAGER OF THE PROJECTS CONTROLLING DEPARTMENT
SELECT p.pno, p.pname
FROM employee as e
INNER JOIN dept_mgr AS dm
ON e.ssn=dm.ssn
INNER JOIN project as p
ON dm.dno=p.dno AND e.emp_location='BELLAIRE'
UNION
SELECT p.pno,p.pname
FROM employee AS e
INNER JOIN works_on AS w
ON e.ssn=w.ssn
INNER JOIN project as p
ON w.pno=p.pno AND e.emp_location='BELLAIRE';
C)REPEAT THE PREVIOUS QUERY WITH A DIFFERENT BUT EQUIVALENT
SQL STATEMENT,SPECIFICALLY
IF YOU HAVE WRITTEN A NESTED SQL THEN WRITE AN UNNESTED
QUREY.
SELECT p.pno, p.pname
FROM employee as e
INNER JOIN dept_mgr AS dm
ON e.ssn=dm.ssn
INNER JOIN project as p
WHERE p.dno in(select d.dno from dept_mgr d,employee e
where emp_location='BELLAIRE'AND d.dno=e.dno)
UNION
SELECT p.pno,p.pname
FROM employee AS e
INNER JOIN works_on AS w
ON e.ssn=w.ssn
INNER JOIN project as p
WHERE p.pno in(SELECT w.pno from Works_on w ,employee e
where emp_location='BELLAIRE' AND w.ssn=e.ssn )

D)LIST THE NAME AND NUMBER OF PROJECTS THAT JAMES BORG EVER
WORKED ON, AND FOR EACH OF THESE PROJECTS, ALSO LIST THE
NUMBER OF HOURS THAT JAMES WAS ASSIGNED TO WORK. IF NO HOUR
HAS BEEN ASSIGNED FOR THE PROJECT. PRINT THE PHRASE 'TO BE
ASSIGNED' INSTED
SELECT pname ,p.pno, hours
FROM employee AS e
INNER JOIN works_on AS w
ON e.ssn=w.ssn AND fname='JAMES' AND lname='BORG'
INNER JOIN project AS p
ON p.pno=w.pno;
TEST CASESELECT pname ,p.pno, (ifnull(hours,'TO BE ASSIGNED')) AS
HOURS
FROM employee AS e
INNER JOIN works_on AS w
ON e.ssn=w.ssn AND fname='JAMES' AND lname='BORG'
INNER JOIN project AS p
ON p.pno=w.pno;

E)LIST NAMES OF EMPLOYEE WHO WORK ON ALL PROJECTS THAT JOHN


SMITH WORK ON
SELECT concat(fname,' ',minit,' ',lname) AS NAME
FROM employee WHERE ssn IN(
SELECT ssn FROM works_on WHERE pno IN(
SELECT pno FROM works_on WHERE ssn IN (
SELECT ssn FROM employee
WHERE fname='JHON' AND lname='SMITH'))
GROUP BY ssn
HAVING count(pno)=(SELECT count(pno)
FROM works_on WHERE ssn IN (
SELECT ssn FROM employee
WHERE fname='JHON' AND lname='SMITH')))
AND fname!='JHON' AND lname!='SMITH';

F)FOR EACH DEPARTMENT THAT DOES NOT HAVE PROJECT IN


HOUSTON. LIST THE DEPARTMENT NAME
SELECT DISTINCT d.dname
FROM department AS d
WHERE d.dno IN (SELECT p.dno FROM project AS p
WHERE p.dno NOT IN (SELECT DISTINCT dno FROM project
WHERE plocation !='HOUSTON') );
G)FOR EACH EMPLOYEE WHO HAS TWO OR MORE DEPENDENTS. LIST
THE NAME OF THE EMPLOYEE TOGETHER WITH HIS/HER DEPENDENT
SELECT concat(fname,' ',minit,' ',lname) AS NAME ,
d.dependent_name AS DEPENDENT_NAME ,
d.gender AS DEPENDENT_GENDER,
D.relationship AS RELATIONSHIP_WITH_EMPLOYEE
FROM employee AS e,dependent AS d
WHERE e.ssn =d.ssn AND d.ssn in(SELECT ssn from dependent
group by ssn HAVING count(*)>=2);

H)FIND AVERAGE SALARY OF EMPLOYEES WHO WORK ON SOME PROJECT


CONTROLLED BY THE RESEARCH DEPARTMENT
SELECT avg(salary) AS SALARY
FROM employee as e ,department as d
where e.dno=d.dno AND dname = 'research';
I)LIST NAMES AND ADDRESSES OF EMPLOYEES WHO WORK ON A
PROJECT THAT IS LOCATED IN THE SAME CITY AS THE EMPLOYEES
DEPARTMENT. BUT IS NOT CONTROLLED BY THE EMPLOYEES
DEPARTMENT
SELECT e.ssn,e.emp_location,concat(e.fname,'
',e.lname) AS NAME
FROM dept_location AS d
INNER JOIN project AS p
ON p.dno=d.dno AND p.plocation= d.dlocation
INNER JOIN works_on AS w
ON w.pno=p.pno
INNER JOIN employee AS e
ON w.ssn=e.ssn AND p.dno!=e.dno;

',e.minit,'

J)LIST NAMES OF EMPLOYEE WHO HAVE THE LOWEST SALARY IN


THEIR DEPARTMENT
SELECT
concat(fname,'
',minit,'
',lname) AS
NAME,dno,ssn,salary
FROM employee
WHERE salary in (SELECT min(salary)FROM employee GROUP BY
dno )
ORDER BY dno;

K)ASSUME THAT EVERY EMPLOYEE MUST WORK ON 3 PROJECTS IN A


YEAR. FOR EVERY EMPLOYEE.
LIST THE NUMBER OF PROJECTS THAT THE EMPLOYEE IS YET TO WORK
SELECT ssn,3-count(ssn) AS NO_OF_PROJECTS_YET_TO_WORK
FROM works_on AS w
GROUP BY ssn HAVING count(ssn)<3;

Vous aimerez peut-être aussi