SQL Exercise-Text Book Table: Department
SQL Exercise-Text Book Table: Department
TABLE : DEPARTMENT
TABLE : EMPLOYEE
+---------+---------+---------+---------+---------+---------+---------+-----
JOB EDLEVEL SEX BIRTHDATE SALARY BONUS
COMM
+---------+---------+---------+---------+---------+---------+---------+-----
CMP 2 F 1978-02-12 50000.00 200.00 50.00
CM 1 M 1956-12-12 25000.00 280.00 60.00
GHP 7 F 1982-03-11 10000.00 250.00 100.00
VBN 3 M 1978-08-08 5000.00 10.00 70.00
SDD 3 M 1978-08-12 15000.00 175.00 50.00
TABLE : PROJECT
-------+---------+---
PRENDATE MAJPROJ
-------+---------+---
1998-10-07 INVN
2001-10-05 AIR
2003-07-07 TRF
2003-10-26 HPL
2002-10-15 CSM
TABLE : EMPACT
1. SELECT LASTNAME,SALARY,
SALARY*1.05 AS "INC-Y-SALARY",
SALARY*1.05/12 AS "INC-M-SALARY"
FROM EMPLOYEE
WHERE SALARY*1.05 <= 20000
ORDER BY SALARY;
---------+---------+---------+---------+---------+---------+---
LASTNAME SALARY INC-Y-SALARY INC-M-SALARY
---------+---------+---------+---------+---------+---------+---
K 5000.00 5250.0000 437.5000000
V 10000.00 10500.0000 875.0000000
L 15000.00 15750.0000 1312.5000000
---------+---------+---------+---------+---------+--------
2. SELECT LASTNAME,EDLEVEL,
SALARY+1200 AS "NEW-SALARY",
BONUS*0.5 AS "NEW-BONUS"
FROM EMPLOYEE
WHERE EDLEVEL=3 OR EDLEVEL=6
ORDER BY EDLEVEL DESC,3;
---------+---------+---------+---------+---------+--------
LASTNAME EDLEVEL NEW-SALARY NEW-BONUS
---------+---------+---------+---------+---------+--------
K 3 6200.00 5.000
L 3 16200.00 87.500
3.SELECT WORKDEPT,LASTNAME,SALARY,
SALARY-1000 AS "DECR-SALARY"
FROM EMPLOYEE
WHERE SALARY BETWEEN 10000*0.80 AND 10000*1.20
AND WORKDEPT = 'E02'
ORDER BY SALARY;
---------+---------+---------+---------+---------+---------+---
WORKDEPT LASTNAME SALARY DECR-SALARY
---------+---------+---------+---------+---------+---------+---
4. SELECT WORKDEPT,LASTNAME,SALARY+COMM+BONUS AS
INCOME
FROM EMPLOYEE
WHERE SALARY+COMM+BONUS>1.1*SALARY
AND WORKDEPT = 'E02'
ORDER BY 3 DESC;
---------+---------+---------+---------+---------+-------
WORKDEPT LASTNAME INCOME
---------+---------+---------+---------+---------+-------
5. SELECT DEPTNO,DEPTNAME
FROM DEPARTMENT
WHERE MGRNO IS NULL;
---------+---------+---------+---------+---------+---------+-
DEPTNO DEPTNAME
---------+---------+---------+---------+---------+---------+-
7.SELECT EMPNO,LASTNAME,YEAR(HIREDATE-BIRTHDATE) AS
AGE
FROM EMPLOYEE
WHERE YEAR(HIREDATE-BIRTHDATE)<25
ORDER BY 3, EMPNO;
---------+---------+---------+---------+--------
EMPNO LASTNAME AGE
---------+---------+---------+---------+--------
E4509 V 16
E4500 DEEP 19
E4579 L 20
E4502 E 21
E4510 K 22
9. SELECT PROJNO,DECIMAL((DAYS(PRENDATE)-
DAYS(PRSTDATE))/7+0.05,8,1)
AS WEEKS FROM PROJECT
WHERE PROJNO LIKE 'PR%'
ORDER BY PROJNO;
---------+---------+---------+---------+---------+---------
PROJNO WEEKS
---------+---------+---------+---------+---------+---------
PR001 34.0
PR002 65.0
PR005 13.0
PR007 34.0
PR008 34.0
3. SELECT WORKDEPT
FROM EMPLOYEE
GROUP BY WORKDEPT
HAVING COUNT(*)>1;
---------+---------+---------+---------+-
WORKDEPT
---------+---------+---------+---------+-
E01
5. SELECT WORKDEPT,SEX,DECIMAL(AVG(SALARY),8,2)
AS "AVG_SALARY",
DECIMAL(AVG(BONUS),8,2)
AS "AVG_BONUS",
DECIMAL(AVG(COMM),8,2)
AS "AVG_COMM",
COUNT(*) AS COUNT
FROM EMPLOYEE
GROUP BY WORKDEPT,SEX HAVING COUNT(*)>1;
---------+---------+---------+---------+---------+---------+------
WORKDEPT SEX AVG_SALARY AVG_BONUS AVG_COMM
COUNT
---------+---------+---------+---------+---------+---------+------
E01 M 10000.00 92.50 60.00 2
UNION
1. SELECT WORKDEPT,EMPNO,SALARY
FROM EMPLOYEE
WHERE WORKDEPT='E01'
UNION ALL
SELECT WORKDEPT,'SUM',SUM(SALARY)
FROM EMPLOYEE
WHERE WORKDEPT='E01'
GROUP BY WORKDEPT
ORDER BY 1,2 DESC;
---------+---------+---------+---------+
WORKDEPT EMPNO SALARY
---------+---------+---------+---------+
E01 SUM 20000.00
E01 E4579 15000.00
E01 E4510 5000.00
3. SELECT 'PROJECT',PROJNO,RESPEMP,PRSTDATE,PRENDATE
FROM PROJECT
WHERE PROJNO LIKE 'PR%'
UNION ALL
SELECT'',PROJNO,EMPNO,EMSTDATE,EMENDATE
FROM EMPACT
WHERE PROJNO LIKE 'PR%'
ORDER BY 2,1 DESC,3,4;
---------+---------+---------+---------+---------+
PROJNO RESPEMP PRSTDATE PRENDATE
---------+---------+---------+---------+---------+
PROJECT PR001 E4509 1998-02-05 1998-10-07
PR001 E4500 2003-12-05 2004-01-05
PR001 E4502 2000-07-05 2000-10-05
PROJECT PR002 E4510 2000-07-05 2001-10-05
PR002 E4509 2003-04-07 2003-07-07
PROJECT PR005 E4579 2003-04-07 2003-07-07
PR005 E4510 2003-02-26 2003-10-26
PR005 E4579 2002-02-15 2002-10-15
PROJECT PR007 E4517 2003-02-26 2003-10-26
PROJECT PR008 E4523 2002-02-15 2002-10-15
USING SUBQUERIES
1. SELECT WORKDEPT,EMPNO,LASTNAME,SALARY
FROM EMPLOYEE
WHERE SALARY>=
(SELECT AVG(SALARY)+5000 FROM EMPLOYEE)
ORDER BY WORKDEPT,EMPNO;
---------+---------+---------+---------+---------+---
WORKDEPT EMPNO LASTNAME SALARY
---------+---------+---------+---------+---------+---
E02 E4500 DEEP 50000.00
2. SELECT EMPNO,LASTNAME
FROM EMPLOYEE
WHERE EMPNO NOT IN (SELECT EMPNO FROM EMPACT);
---------+---------+---------+---------+---------+-----
EMPNO LASTNAME
---------+---------+---------+---------+---------+-----
3. SELECT EMPNO,LASTNAME,SALARY
FROM EMPLOYEE
WHERE SALARY>ALL
(SELECT AVG(SALARY)FROM EMPLOYEE
WHERE WORKDEPT IN('C01','E01','A01')
GROUP BY WORKDEPT);
---------+---------+---------+---------+---------+------
EMPNO LASTNAME SALARY
---------+---------+---------+---------+---------+------
E4500 DEEP 50000.00
5. SELECT PROJNO,MIN(DAYS(PRENDATE)-DAYS(PRSTDATE)) AS
DAYS FROM PROJECT
GROUP BY PROJNO
HAVING MIN(DAYS (PRENDATE)-DAYS(PRSTDATE))=
(SELECT MIN(DAYS(PRENDATE)-DAYS(PRSTDATE))FROM
PROJECT);
OR
SELECT PROJNO,MIN(DAYS(PRENDATE)-DAYS(PRSTDATE)) AS
DAYS FROM PROJECT
WHERE DAYS(PRENDATE)-DAYS(PRSTDATE)=
(SELECT MIN(DAYS(PRENDATE)-DAYS(PRSTDATE))FROM
PROJECT)
GROUP BY PROJNO;
---------+---------+---------+---------+---------+---------+---------+-
PROJNO DAYS
---------+---------+---------+---------+---------+---------+---------+-
PR005 91
7. SELECT DEPTNO,DEPTNAME,LASTNAME,FIRSTNAME
FROM DEPARTMENT,EMPLOYEE
WHERE DEPTNO=WORKDEPT
AND DEPTNO NOT IN
(SELECT WORKDEPT FROM EMPLOYEE WHERE SEX='F');
---------+---------+---------+---------+---------+---------+-
DEPTNO DEPTNAME LASTNAME FIRSTNAME
---------+---------+---------+---------+---------+---------+-
A01 ECE E ANU
E01 CHEM K MINI
E01 CHEM L MANUY
SCALAR FUNCTIONS
CHAR
---------+---------+---------+---------+---------+---------+-
1998-02-05
DATE
---------+---------+---------+---------+-------
1989-03-02
(NOTE : 1989061 MEANS 61ST DAY IN 1989)
DAY
---------+---------+---------+---------+---------+---------+---
SELECT DAY(HIREDATE) FROM EMPLOYEE WHERE
FIRSTNAME='JAIKUM';
---------+---------+---------+---------+---------+---------+---
---------+---------+---------+---------+---------+---------+---
5
---------+---------+---------+---------+---------+---------+---
SELECT DAY('1989061') FROM SYSIBM.SYSDUMMY1;
---------+---------+---------+---------+---------+---------+---
---------+---------+---------+---------+---------+---------+---
2
DAYS
---------+---------+---------+---------+---------+---------+---
726163
---------+---------+---------+---------+---------+---------+---
6
DIGITS
---------+---------+---------+---------+-----
SELECT DIGITS(1245) FROM SYSIBM.SYSDUMMY1;
---------+---------+---------+---------+-----
---------+---------+---------+---------+-----
0000001245
HOUR
SELECT HOUR(CURRENT_TIME) FROM SYSIBM.SYSDUMMY1;
---------+---------+---------+---------+---------+
---------+---------+---------+---------+---------+
6
LENGTH
SELECT LENGTH(1245) FROM SYSIBM.SYSDUMMY1;
---------+---------+---------+---------+----
---------+---------+---------+---------+----
4
MINUTE
SELECT MINUTE(CURRENT_TIME) FROM SYSIBM.SYSDUMMY1;
---------+---------+---------+---------+---------+--
---------+---------+---------+---------+---------+--
55
SECOND
SELECT SECOND(CURRENT_TIME) FROM SYSIBM.SYSDUMMY1;
---------+---------+---------+---------+---------+-----
---------+---------+---------+---------+---------+-----
19
MONTH
SELECT MONTH('1989061') FROM SYSIBM.SYSDUMMY1;
---------+---------+---------+---------+---------+
---------+---------+---------+---------+---------+
3
YEAR
SELECT YEAR('1989061') FROM SYSIBM.SYSDUMMY1;
---------+---------+---------+---------+---------+---------+-
---------+---------+---------+---------+---------+---------+-
1989
TIME
---------+---------+---------+---------+---------+---------+-
SELECT TIME('13:30:00') FROM SYSIBM.SYSDUMMY1;
---------+---------+---------+---------+---------+---------+-
---------+---------+---------+---------+---------+---------+-
13.30.00