Sunday, 11 December 2011

Company DataBase 6.42 solution of 5th edition Navathe TextBook

Consider the following database for the company.

EMPLOYEE ( Ssn : Int, Fname : String, Lname : String, Address : String, Gender : Char, Salary : Int, Super_SSN: Int, Dno: Int)
DEPARTMENT (Dnumber: Int, Dname: String, Mgr_SSN: Int, Mgr_start_date: Date)
PROJECT (Pnumber: Int, Pname: String, Plocation: String, Dno: Int)
DEPENDENT (Essn: Int, Depedent_name: String, Gender: Char, BDate: Date, Relationship: String)
WORKS_ON (Essn: Int, Pnumber: Int, Hours: Real)  

1.      Create above tables with properly specifying primary keys and foreign keys.
SQL> CREATE TABLE EMPLOYEE(
  2  SSN INT,
  3  FNAME VARCHAR(10),
  4  LNAME VARCHAR(10),
  5  ADDRESS VARCHAR(20),
  6  GENDER CHAR,
  7  SALARY FLOAT,
  8  PRIMARY KEY(SSN));

Table created.

SQL> CREATE TABLE DEPARTMENT(
  2  DNUMBER INT,
  3  DNAME VARCHAR(20),
  4  MGR_SSN INT,
  5  MGR_START_DATE DATE,
  6  PRIMARY KEY(DNUMBER),
  7  FOREIGN KEY(MGR_SSN) REFERENCES EMPLOYEE(SSN) ON DELETE SET NULL);

Table created.

SQL> ALTER TABLE EMPLOYEE
  2  ADD SUPER_SSN INT;

Table altered.

SQL> ALTER TABLE EMPLOYEE
  2  ADD CONSTRAINT EFK1
  3  FOREIGN KEY(SUPER_SSN) REFERENCES EMPLOYEE(SSN) ON DELETE SET NULL;

Table altered.

SQL> ALTER TABLE EMPLOYEE
  2  ADD DNO INT;

Table altered.

SQL> ALTER TABLE EMPLOYEE
  2  ADD CONSTRAINT EFK2
  3  FOREIGN KEY(DNO) REFERENCES DEPARTMENT(DNUMBER) ON DELETE SET NULL;

Table altered.

SQL> CREATE TABLE PROJECT(
  2  PNUMBER INT,
  3  PNAME VARCHAR(20),
  4  PLOCATION VARCHAR(10),
  5  DNO INT,
  6  PRIMARY KEY(PNUMBER),
  7  FOREIGN KEY(DNO) REFERENCES DEPARTMENT(DNUMBER) ON DELETE SET NULL);

Table created.

SQL> CREATE TABLE DEPENDENT(
  2  ESSN INT,
  3  DEPENDENT_NAME VARCHAR(10),
  4  GENDER CHAR,
  5  BDATE DATE,
  6  RELATIONSHIP VARCHAR(10),
  7  PRIMARY KEY(ESSN,DEPENDENT_NAME),
  8  FOREIGN KEY(ESSN) REFERENCES EMPLOYEE(SSN) ON DELETE SET NULL);

Table created.

SQL> CREATE TABLE WORKS_ON(
  2  ESSN INT,
  3  PNUMBER INT,
  4  HOUR REAL,
  5  PRIMARY KEY(ESSN,PNUMBER),
  6  FOREIGN KEY(ESSN) REFERENCES EMPLOYEE(SSN) ON DELETE SET NULL,
  7  FOREIGN KEY(PNUMBER) REFERENCES PROJECT(PNUMBER) ON DELETE SET NULL);

Table created.

2.      Enter at least 7-8 tuples for each relation.

SQL> INSERT INTO EMPLOYEE VALUES(&SSN,'&FNAME','&LNAME','&ADDRESS','&GENDER',&SALARY,NULL,NULL);
Enter value for ssn: 333445555
Enter value for fname: FRANKLIN
Enter value for lname: WONG
Enter value for address: HOUSTON
Enter value for gender: M
Enter value for salary: 40000
old   1: INSERT INTO EMPLOYEE VALUES(&SSN,'&FNAME','&LNAME','&ADDRESS','&GENDER',&SALARY,NULL,NULL)
new   1: INSERT INTO EMPLOYEE VALUES(333445555,'FRANKLIN','WONG','HOUSTON','M',40000,NULL,NULL)

1 row created.

SQL> INSERT INTO DEPARTMENT VALUES(&DNUMBER,'&DNAME',&MGR_SSN,'&MGR_START_DATE');
Enter value for dnumber: 5
Enter value for dname: RESEARCH
Enter value for mgr_ssn: 333445555
Enter value for mgr_start_date: 22-AUG-1988
old   1: INSERT INTO DEPARTMENT VALUES(&DNUMBER,'&DNAME',&MGR_SSN,'&MGR_START_DATE')
new   1: INSERT INTO DEPARTMENT VALUES(5,'RESEARCH',333445555,'22-AUG-1988')

1 row created.

SQL> INSERT INTO EMPLOYEE VALUES(&SSN,'&FNAME','&LNAME','&ADDRESS','&GENDER',&SALARY,&SUPER_SSN,&DNO);
Enter value for ssn: 123456789
Enter value for fname: JOHN
Enter value for lname: SMITH
Enter value for address: HOUSTON
Enter value for gender: M
Enter value for salary: 30000
Enter value for super_ssn: 333445555
Enter value for dno: 5
old   1: INSERT INTO EMPLOYEE VALUES(&SSN,'&FNAME','&LNAME','&ADDRESS','&GENDER',&SALARY,&SUPER_SSN,&DNO)
new   1: INSERT INTO EMPLOYEE VALUES(123456789,'JOHN','SMITH','HOUSTON','M',30000,333445555,5)

1 row created.

SQL> UPDATE EMPLOYEE
  2  SET SUPER_SSN=888665555, DNO=5
  3  WHERE SSN=333445555;

1 row updated.

SQL> INSERT INTO PROJECT VALUES(&PNUMBER,'&PNAME','&PLOCATION',&DNO);
Enter value for pnumber: 1
Enter value for pname: PRODUCTX
Enter value for plocation: BELLAIRE
Enter value for dno: 5
old   1: INSERT INTO PROJECT VALUES(&PNUMBER,'&PNAME','&PLOCATION',&DNO)
new   1: INSERT INTO PROJECT VALUES(1,'PRODUCTX','BELLAIRE',5)

1 row created.

SQL> INSERT INTO DEPENDENT VALUES(&ESSN,'&DEPENDENT_NAME','&GENDER','&BDATE','&RELATIONSHIP');
Enter value for essn: 333445555
Enter value for dependent_name: ALICE
Enter value for gender: F
Enter value for bdate: 04-MAY-1986
Enter value for relationship: DAUGHTER
old   1: INSERT INTO DEPENDENT VALUES(&ESSN,'&DEPENDENT_NAME','&GENDER','&BDATE','&RELATIONSHIP')
new   1: INSERT INTO DEPENDENT VALUES(333445555,'ALICE','F','04-MAY-1986','DAUGHTER')

1 row created.

SQL> INSERT INTO WORKS_ON VALUES(&ESSN,&PNUMBER,&HOUR);
Enter value for essn: 123456789
Enter value for pnumber: 1
Enter value for hour: 32.5
old   1: INSERT INTO WORKS_ON VALUES(&ESSN,&PNUMBER,&HOUR)
new   1: INSERT INTO WORKS_ON VALUES(123456789,1,32.5)

1 row created.


3.      Displaying the table contents.

SQL> SELECT * FROM EMPLOYEE;
        SSN     FNAME       LNAME        ADDRESS     GENDER  SALARY    SUPER_SSN DNO
333445555 FRANKLIN   WONG            HOUSTON     M         40000             
987654321 JENNIFER     WALLACE      BELLAIRE      F          43000             
888665555 JAMES           BORG              HOUSTON    M         55000     

3 rows selected.

SQL> SELECT * FROM DEPARTMENT;

DNUMBER     DNAME                                  MGR_SSN       MGR_START
         5                   RESEARCH                             333445555      22-MAY-88
         4                   ADMINISTRATION                987654321      01-JAN-95
         1                   HEADQUARTERS                  888665555      19-JUN-81

3 rows selected.

SQL> SELECT * FROM EMPLOYEE;


SSN          FNAME      LNAME      ADDRESS    GENDER    SALARY    SUPER_SSN       DNO
---------     ----------       ---------- ---------- ------ --------- --------- ---------
123456789      John          Smith          Houston         Male              30000       333445555         5
333445555      Franklin     Wong         Houston         Male              40000       888665555         5
999887777      Alicia         Zelaya        Spring            Female           25000       987654321         4
987654321      Jennifer      Wallacia     Bellaire           Female           43000      888665555         4
666884444      Ramesh      Narayan     Humble          Male              38000      333445555          5
453453453      Joyce          English       Houston         Female          25000       333445555         5
987987987      Ahmad        Jabbar       Houston         Male              25000       987654321         4
888665555      James          Borg          Houston         male              55000                                   1


8 rows selected.

SQL> SELECT * FROM PROJECT;

   PNUMBER PNAME                           PLOCATION         DNO
         1            PRODUCTX                      BELLAIRE              5
         2            PRODUCTY                      SUGARLAND         5
         3            PRODUCTZ                       HOUSTON             5
        10           COMPUTERIZATION       STAFFORD            4
        20           REORGANIZATION         HOUSTON              1
        30           NEWBENEFITS                 STAFFORD             4

6 rows selected.
SQL> SELECT * FROM DEPENDENT;

      ESSN               DEPENDENT_ NAME            GENDER         BDATE            RELATIONS
 333445555                       ALICE                        F                      05-APR-86      DAUGHTER
 333445555                      THEODORE                M                     25-OCT-83      SON
 333445555                       JOY                            F                      03-MAY-58     SPOUSE
 987654321                      ABNER                       M                     28-FEB-42       SPOUSE
 123456789                      MICHEAL                   M                     04-JAN-88       SON
 123456789                       ALICE                        F                      30-DEC-88      DAUGHTER
 123456789                      ELIZABETH                F                      05-MAY-67     SPOUSE

7 rows selected.

SQL> SELECT * FROM WORKS_ON;

  ESSN       PNUMBER                  HOUR
 123456789         1                        32.5
 123456789         2                        7.5
 666884444         3                         40
 453453453         1                         20
 453453453         2                         20
 333445555         2                        10
 333445555         3                        10
 333445555         10                       10
 333445555         20                       10
 999887777         30                      30
 999887777         10                     10
 987987987         10                      35
 987987987         30                       5
 987654321         30                      20
 987654321         20                     15
 888665555         20

16 rows selected.

4.      Update salaries of all employees who work for Research department by 10%.

SQL> UPDATE EMPLOYEE
  2  SET SALARY=SALARY+(SALARY*0.1)
  3  WHERE DNO
  4  IN (SELECT DNUMBER
  5                   FROM DEPARTMENT
  6        WHERE DNAME='RESEARCH');

4 rows updated.

SQL> SELECT * FROM EMPLOYEE;

SSN        FNAME      LNAME      ADDRESS    GENDER    SALARY SUPER_SSN       DNO
--------- ---------- ---------- ---------- ------ --------- --------- ---------
123456789     John          Smith           Houston         Male           33000          333445555         5
333445555    Franklin      Wong           Houston         Male           44000          888665555        5
999887777       Alicia      laya              Spring         Female         250000          987654321         4
987654321      Jennifer    Wallacia        Bellaire       Female         43000           888665555         4
666884444      Ramesh     Narayan           Humble     Male             41800          333445555         5
453453453         Joyce      English            Houston    Female            27500         333445555         5
987987987        Ahmad      Jabbar             Houston    Male               25000         987654321         4
888665555        James      Borg                Houston       male             55000                                    1

8 rows selected.
5.      Retrieve the names of each employee who work on all the projects controlled by department number 5.

SQL> SELECT FNAME,LNAME
  2  FROM EMPLOYEE
  3  WHERE SSN
  4  IN (SELECT W.ESSN
  5                   FROM WORKS_ON W
  6                   WHERE W.PNUMBER
  7                   IN (SELECT P1.PNUMBER
  8                         FROM PROJECT P1
  9                         WHERE P1.DNO=5)
 10            GROUP BY W.ESSN
 11             HAVING COUNT(W.PNUMBER)=(SELECT COUNT(P2.PNUMBER)
 12                                                             FROM PROJECT P2
 13                                                             WHERE P2.DNO=5
 14                                                             GROUP BY P2.DNO)
 15      );

no rows selected.


6.      For each department that has three employees retrieve the department number and the number of employees making salary more than or equals to 30000.

SQL> SELECT COUNT(*) AS NO_OF_EMPLOYEES,DNO AS DEPT_NUMBER
  2  FROM EMPLOYEE
  3  WHERE SALARY>=30000 AND DNO
  4  IN (SELECT DNO
  5        FROM EMPLOYEE
  6        GROUP BY DNO
  7        HAVING COUNT(SSN)=3)
  8  GROUP BY DNO;

NO_OF_EMPLOYEES            DEPT_NUMBER
 1                                             4

7.      Retrieve the employees that do not have dependents

SQL> SELECT SSN,FNAME,LNAME
  2  FROM EMPLOYEE
  3  WHERE SSN
  4  IN((SELECT SSN
  5        FROM EMPLOYEE)
  6       MINUS
  7       (SELECT ESSN
  8        FROM DEPENDENT));

       SSN          FNAME                       LNAME
 453453453     JOYCE            ENGLISH
 666884444     RAMESH         NARAYAN
 888665555     JAMES            BORG
 987987987     AHMAD          JABBAR
 999887777     ALICIA           ZELAYA

8.      For each department retrieve the department number, minimum salary and the details of the employees who earn minimum salary in the department.

SQL> SELECT SSN,FNAME,SALARY,DNO
  2  FROM EMPLOYEE
  3  WHERE SALARY
  4  IN (SELECT MIN(SALARY)
  5        FROM EMPLOYEE
  6        GROUP BY DNO);

       SSN          FNAME              SALARY        DNO
999887777      ALICIA              25000          4
 987987987     AHMAD             25000          4
 453453453     JOYCE               27500          5
 888665555     JAMES               55000          1

1 comment:

  1. Thanks for taking the initative to make me learn. Thank u very much.

    ReplyDelete