Sunteți pe pagina 1din 22

SQL EXERCISE-TEXT BOOK

TABLE : DEPARTMENT

CREATE TABLE DEPARTMENT


(DEPTNO CHAR(3) NOT NULL,
DEPTNAME VARCHAR(25) NOT NULL,
MGRNO CHAR(6) ,
ADMRDEPT CHAR(3) NOT NULL,
LOCATION CHAR(5),
PRIMARY KEY (DEPTNO))IN MTBLRDB.MTBTS031;
CREATE UNIQUE INDEX IDX8 ON DEPARTMENT(DEPTNO);

SELECT * FROM DEPARTMENT;


---------+---------+---------+---------+---------+---------+---
DEPTNO DEPTNAME MGRNO ADMRDEPT LOCATION
---------+---------+---------+---------+---------+---------+---
A01 ECE E4502 A12 MRE
B01 MECH E4700 A56 KNI
C01 PROD E4800 A91 PTA
E01 CHEM E4900 A98 TVM
E02 CSE E4500 A11 BLORE

TABLE : EMPLOYEE

CREATE TABLE EMPLOYEE


(EMPNO CHAR(6) NOT NULL,
FIRSTNAME VARCHAR(15) NOT NULL,
MIDINIT CHAR(1) NOT NULL,
LASTNAME VARCHAR(10) NOT NULL,
WORKDEPT CHAR(4),
PHONENO CHAR(10),
HIREDATE DATE,
JOB CHAR(8),
EDLEVEL SMALLINT,
SEX CHAR(1) NOT NULL,
BIRTHDATE DATE,
SALARY DECIMAL(9,2),
BONUS DECIMAL(9,2),
COMM DECIMAL(9,2),
PRIMARY KEY (EMPNO))IN MTBLRDB.MTBTS031;
CREATE UNIQUE INDEX IDX9 ON EMPLOYEE(EMPNO);

SELECT * FROM EMPLOYEE;


---------+---------+---------+---------+---------+---------+---------+-------
EMPNO FIRSTNAME MIDINIT LASTNAME WORKDEPT
PHONENO HIREDATE
---------+---------+---------+---------+---------+---------+---------+---------+
E4500 JAIKUM P DEEP E02 343535 1998-02-05
E4502 ANU P E A01 345345 1978-05-12
E4509 PRI P V C01 676767 1998-07-05
E4510 MINI D K E01 999999 2000-12-11
E4579 MANUY K L E01 399999 1998-10-25

+---------+---------+---------+---------+---------+---------+---------+-----
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

CREATE TABLE PROJECT


(PROJNO CHAR(6)NOT NULL,
PROJNAME VARCHAR(25) NOT NULL,
DEPTNO CHAR(3) NOT NULL,
RESPEMP CHAR(6)NOT NULL,
PRSTAFF DECIMAL(5,2),
PRSTDATE DATE,
PRENDATE DATE,
MAJPROJ CHAR(6),
PRIMARY KEY(PROJNO),
FOREIGN KEY (DEPTNO) REFERENCES DEPARTMENT)IN
MTBLRDB.MTBTS031;
CREATE UNIQUE INDEX IDX10 ON PROJECT(PROJNO);

SELECT * FROM PROJECT;


---------+---------+---------+---------+---------+---------+---------+-
PROJNO PROJNAME DEPTNO RESPEMP PRSTAFF
PRSTDATE
---------+---------+---------+---------+---------+---------+---------+-
PR001 INVENTORY A01 E4509 500.00 1998-02-05
PR002 AIRLINE A01 E4510 502.00 2000-07-05
PR005 TRAFFIC C01 E4579 506.00 2003-04-07
PR007 HOSPITAL E01 E4517 508.00 2003-02-26
PR008 CUSTOMER E02 E4523 509.00 2002-02-15

-------+---------+---
PRENDATE MAJPROJ
-------+---------+---
1998-10-07 INVN
2001-10-05 AIR
2003-07-07 TRF
2003-10-26 HPL
2002-10-15 CSM

TABLE : EMPACT

CREATE TABLE EMPACT


(EMPNO CHAR(6) NOT NULL,
PROJNO CHAR(6) NOT NULL,
ACTNO SMALLINT NOT NULL,
EMPTIME DECIMAL(5,2),
EMSTDATE DATE,
EMENDATE DATE,
FOREIGN KEY(EMPNO) REFERENCES EMPLOYEE,
FOREIGN KEY(PROJNO) REFERENCES PROJECT) IN
MTBLRDB.MTBTS031;

SELECT * FROM EMPACT;


---------+---------+---------+---------+---------+---------+
EMPNO PROJNO ACTNO EMPTIME EMSTDATE EMENDATE
---------+---------+---------+---------+---------+---------+
E4500 PR001 5 9.00 2003-12-05 2004-01-05
E4502 PR001 2 5.00 2000-07-05 2000-10-05
E4509 PR002 4 2.00 2003-04-07 2003-07-07
E4510 PR005 7 8.00 2003-02-26 2003-10-26
E4579 PR005 9 9.00 2002-02-15 2002-10-15

SIMPLE SQL QUERIES


1.SELECT EMPNO,LASTNAME,BIRTHDATE,SALARY
FROM EMPLOYEE
ORDER BY SALARY DESC;
---------+---------+---------+---------+---------+---------+--------
EMPNO LASTNAME BIRTHDATE SALARY
---------+---------+---------+---------+---------+---------+--------
E4500 DEEP 1978-02-12 50000.00
E4502 E 1956-12-12 25000.00
E4579 L 1978-08-12 15000.00
E4509 V 1982-03-11 10000.00
E4510 K 1978-08-08 5000.00
---------+---------+---------+---------+---------+---------+--------
2. SELECT LASTNAME,FIRSTNAME,WORKDEPT
FROM EMPLOYEE
ORDER BY WORKDEPT DESC, LASTNAME DESC;
---------+---------+---------+---------+---------+---------+----
LASTNAME FIRSTNAME WORKDEPT
---------+---------+---------+---------+---------+---------+----
DEEP JAIKUM E02
L MANUY E01
K MINI E01
V PRI C01
E ANU A01
---------+---------+---------+---------+---------+---------+----
3.SELECT DISTINCT EDLEVEL
FROM EMPLOYEE
ORDER BY EDLEVEL DESC;
---------+---------+---------+---------+---------+---------+----
EDLEVEL
---------+---------+---------+---------+---------+---------+----
7
3
2
1
---------+---------+---------+---------+---------+---------+----
4.SELECT DISTINCT EMPNO,PROJNO
FROM EMPACT;
---------+---------+---------+---------+---------+---------+----
EMPNO PROJNO
---------+---------+---------+---------+---------+---------+----
E4500 PR001
E4502 PR001
E4509 PR002
E4510 PR005
E4579 PR005
---------+---------+---------+---------+---------+---------+-
5. SELECT LASTNAME,SALARY,BONUS
FROM EMPLOYEE
WHERE SEX='M';
---------+---------+---------+---------+---------+---------+-
LASTNAME SALARY BONUS
---------+---------+---------+---------+---------+---------+-
E 25000.00 280.00
K 5000.00 10.00
L 15000.00 175.00
---------+---------+---------+---------+---------+---------+-
6.SELECT LASTNAME,SALARY,COMM
FROM EMPLOYEE
WHERE HIREDATE>='1980-01-01' AND SALARY>20000;
---------+---------+---------+---------+---------+---------+--
LASTNAME SALARY COMM
---------+---------+---------+---------+---------+---------+--
DEEP 50000.00 50.00
---------+---------+---------+---------+---------+---------+--
7.SELECT LASTNAME,SALARY,BONUS,COMM
FROM EMPLOYEE
WHERE SALARY>10000 AND BONUS=280
OR BONUS=500 AND COMM>50
ORDER BY LASTNAME;
---------+---------+---------+---------+---------+---------+--
LASTNAME SALARY BONUS COMM
---------+---------+---------+---------+---------+---------+--
E 25000.00 280.00 60.00
---------+---------+---------+---------+---------+---------+----
8.SELECT LASTNAME,SALARY,BONUS,COMM
FROM EMPLOYEE
WHERE SALARY>10000 AND (BONUS=280 OR BONUS=500)
AND COMM>50 ORDER BY LASTNAME;
---------+---------+---------+---------+---------+---------+----
LASTNAME SALARY BONUS COMM
---------+---------+---------+---------+---------+---------+----
E 25000.00 280.00 60.00
---------+---------+---------+---------+---------+---------+----
9.SELECT PROJNO,ACTNO,EMSTDATE,EMENDATE
FROM EMPACT
WHERE ACTNO IN (2,4,7) AND
PROJNO LIKE 'PR%'
ORDER BY PROJNO,ACTNO;
---------+---------+---------+---------+---------+---------+----
PROJNO ACTNO EMSTDATE EMENDATE
---------+---------+---------+---------+---------+---------+--
PR001 2 2000-07-05 2000-10-05
PR002 4 2003-04-07 2003-07-07
PR005 7 2003-02-26 2003-10-26
---------+---------+---------+---------+---------+---------+--
10.SELECT MGRNO,DEPTNO
FROM DEPARTMENT
WHERE MGRNO IS NOT NULL
ORDER BY MGRNO;
---------+---------+---------+---------+---------+---------+--
MGRNO DEPTNO
---------+---------+---------+---------+---------+---------+--
E4500 E02
E4502 A01
E4700 B01
E4800 C01
E4900 E01
---------+---------+---------+---------+---------+---------+-------
11.SELECT EMPNO,LASTNAME,SALARY,BONUS
FROM EMPLOYEE
WHERE BONUS BETWEEN 50 AND 250 ORDER BY BONUS;
---------+---------+---------+---------+---------+---------+-------
EMPNO LASTNAME SALARY BONUS
---------+---------+---------+---------+---------+---------+-------
E4579 L 15000.00 175.00
E4500 DEEP 50000.00 200.00
E4509 V 10000.00 250.00
---------+---------+---------+---------+---------+---------+-------
12.SELECT EMPNO,LASTNAME,SALARY,WORKDEPT
FROM EMPLOYEE
WHERE WORKDEPT BETWEEN 'A01' AND 'C01'
ORDER BY LASTNAME;
--------+---------+---------+---------+---------+---------+---
EMPNO LASTNAME SALARY WORKDEPT
--------+---------+---------+---------+---------+---------+---
E4502 E 25000.00 A01
E4509 V 10000.00 C01
--------+---------+---------+---------+---------+---------+---
13.SELECT PROJNO,PROJNAME
FROM PROJECT
WHERE PROJNAME LIKE '%IN%'
ORDER BY PROJNO;
--------+---------+---------+---------+---------+---------+---
PROJNO PROJNAME
--------+---------+---------+---------+---------+---------+---
PR001 INVENTORY
PR002 AIRLINE
---------+---------+---------+---------+---------+---------+----
14.SELECT DEPTNO,DEPTNAME
FROM DEPARTMENT
WHERE DEPTNO LIKE 'E__'
ORDER BY DEPTNO;
---------+---------+---------+---------+---------+---------+----
DEPTNO DEPTNAME
---------+---------+---------+---------+---------+---------+----
E01 CHEM
E02 CSE
---------+---------+---------+---------+---------+---------+----

RETRIEVING DATA FROM MULTIPLE TABLES


1.SELECT DISTINCT A.PROJNO,PROJNAME,ACTNO
FROM PROJECT P, EMPACT A
WHERE P.PROJNO=A.PROJNO
AND A.PROJNO LIKE 'PR%'
ORDER BY A.PROJNO,ACTNO;
---------+---------+---------+---------+---------+---------+----
PROJNO PROJNAME ACTNO
---------+---------+---------+---------+---------+---------+----
PR001 INVENTORY 2
PR001 INVENTORY 5
PR002 AIRLINE 4
PR005 TRAFFIC 7
PR005 TRAFFIC 9
---------+---------+---------+---------+---------+---------+----
2. SELECT DISTINCT A.EMPNO,LASTNAME,PROJNO
FROM EMPLOYEE E, EMPACT A
WHERE A.EMPNO=E.EMPNO
AND A.PROJNO='PR001'
ORDER BY A.EMPNO,PROJNO;
---------+---------+---------+---------+---------+---------+-----
EMPNO LASTNAME PROJNO
---------+---------+---------+---------+---------+---------+-----
E4500 DEEP PR001
E4502 E PR001
---------+---------+---------+---------+---------+---------+-----
3. SELECT A.EMPNO,A.PROJNO,PROJNAME,ACTNO,EMSTDATE
FROM PROJECT P, EMPACT A
WHERE A.PROJNO=P.PROJNO
AND EMSTDATE='2000-07-05'
ORDER BY A.PROJNO,A.EMPNO,ACTNO;
---------+---------+---------+---------+---------+---------+-----
EMPNO PROJNO PROJNAME ACTNO EMSTDATE
---------+---------+---------+---------+---------+---------+-----
E4502 PR001 INVENTORY 2 2000-07-05
---------+---------+---------+---------+---------+---------+-----
4. SELECT DEPTNO,MGRNO,LASTNAME
FROM EMPLOYEE E, DEPARTMENT D
WHERE E.EMPNO=D.MGRNO
AND DEPTNO IN('A01','E02')
ORDER BY DEPTNO;
---------+---------+---------+---------+---------+---------+-----
DEPTNO MGRNO LASTNAME
---------+---------+---------+---------+---------+---------+-----
A01 E4502 E
E02 E4500 DEEP
---------+---------+---------+---------+---------+---------+-----
5. SELECT WORKDEPT,LASTNAME,PROJNAME,ACTNO
FROM EMPLOYEE E, PROJECT P, EMPACT A
WHERE E.EMPNO=A.EMPNO
AND A.PROJNO=P.PROJNO AND WORKDEPT='A01'
ORDER BY PROJNAME,ACTNO;
---------+---------+---------+---------+---------+---------+-----
WORKDEPT LASTNAME PROJNAME ACTNO
---------+---------+---------+---------+---------+---------+-----
A01 E INVENTORY 2
---------+---------+---------+---------+---------+---------+-----
6. SELECT DISTINCT WORKDEPT,LASTNAME,PROJNAME,ACTNO
FROM EMPLOYEE E, PROJECT P, EMPACT A
WHERE E.EMPNO=A.EMPNO
AND A.PROJNO=P.PROJNO
ORDER BY WORKDEPT,LASTNAME,ACTNO;
---------+---------+---------+---------+---------+---------+-----
WORKDEPT LASTNAME PROJNAME ACTNO
---------+---------+---------+---------+---------+---------+-----
A01 E INVENTORY 2
C01 V AIRLINE 4
E01 K TRAFFIC 7
E01 L TRAFFIC 9
E02 DEEP INVENTORY 5
---------+---------+---------+---------+---------+---------+-----
7. SELECT ACTNO,D.MGRNO,EMSTDATE,P.PROJNO,LASTNAME
FROM EMPLOYEE E, DEPARTMENT D, PROJECT P, EMPACT A
WHERE E.EMPNO=A.EMPNO
AND A.PROJNO=P.PROJNO AND E.WORKDEPT=D.DEPTNO
AND A.EMSTDATE>='2002-02-15' ORDER BY ACTNO,EMSTDATE;
---------+---------+---------+---------+---------+---------+-----
ACTNO MGRNO EMSTDATE PROJNO LASTNAME
---------+---------+---------+---------+---------+---------+-----
4 E4800 2003-04-07 PR002 V
5 E4500 2003-12-05 PR001 DEEP
7 E4900 2003-02-26 PR005 K
9 E4900 2002-02-15 PR005 L
---------+---------+---------+---------+---------+---------+-----
8. SELECT
DEPTNO,M.LASTNAME,E.LASTNAME,M.HIREDATE,E.HIREDATE
FROM EMPLOYEE M, EMPLOYEE E, DEPARTMENT D
WHERE E.WORKDEPT=D.DEPTNO AND M.HIREDATE>E.HIREDATE
AND E.WORKDEPT ='A01'
ORDER BY E.LASTNAME;
---------+---------+---------+---------+---------+---------+-----
DEPTNO LASTNAME LASTNAME HIREDATE HIREDATE
---------+---------+---------+---------+---------+---------+-----
A01 DEEP E 1998-02-05 1978-05-12
A01 V E 1998-07-05 1978-05-12
A01 K E 2000-12-11 1978-05-12
A01 L E 1998-10-25 1978-05-12

SCALAR FUNCTIONS & ARITHMETIC

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

8. SELECT YEAR(PRSTDATE) AS YEAR,MONTH(PRSTDATE)AS


MONTH,PROJNO
FROM PROJECT
WHERE PRENDATE = '2003-07-07'
ORDER BY PROJNO;
---------+---------+---------+---------+---------+---------+--
YEAR MONTH PROJNO
---------+---------+---------+---------+-----
2003 4 PR005

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

10. SELECT PROJNO,PRENDATE AS ESTIMATED,PRSTDATE +


((DAYS(PRENDATE)-DAYS(PRSTDATE))*1.1)DAYS AS EXPECTED
FROM PROJECT
WHERE PROJNO LIKE 'PR%' ORDER BY PROJNO;
---------+---------+---------+---------+---------+---------+
PROJNO ESTIMATED EXPECTED
---------+---------+---------+---------+---------+---------+
PR001 1998-10-07 1998-10-31
PR002 2001-10-05 2001-11-19
PR005 2003-07-07 2003-07-16
PR007 2003-10-26 2003-11-19
PR008 2002-10-15 2002-11-08
11. SELECT DAYS('2004-12-31')-DAYS(CURRENT_DATE) AS DAYS
FROM SYSIBM.SYSDUMMY1;
---------+---------+---------+---------+---------+----
DAYS
---------+---------+---------+---------+---------+----
227

12. SELECT SUBSTR(FIRSTNAME,1,1) CONCAT '.' CONCAT


LASTNAME AS NAME
FROM EMPLOYEE
WHERE LASTNAME LIKE 'D%';
---------+---------+---------+---------+---------+---------+---
NAME
---------+---------+---------+---------+---------+---------+---
A.DEEP

13. SELECT DISTINCT EMPNO,


CASE SUBSTR (PROJNO,4,2)
WHEN '01' THEN 'ADMIN'
WHEN '02' THEN 'SUP'
WHEN '05' THEN 'DEV'
WHEN '07' THEN 'OPER'
WHEN '08' THEN 'PLAN'
END AS PROJ,
CASE
WHEN ACTNO=5 THEN 'MANAGE'
WHEN ACTNO=4 THEN 'COST ETIMSTE'
WHEN ACTNO=7 THEN 'DEFINE SPECS'
ELSE 'OTHER'
END AS ACT, EMSTDATE,EMENDATE
FROM EMPACT
WHERE EMENDATE<='2004-01-05'
AND EMPNO BETWEEN 'E4500' AND 'E4579'
ORDER BY EMPNO,PROJ,EMSTDATE,ACT,EMENDATE;
---------+---------+---------+---------+---------+----
EMPNO PROJ ACT EMSTDATE EMENDATE
---------+---------+---------+---------+---------+----
E4500 ADMIN MANAGE 2003-12-05 2004-01-05
E4502 ADMIN OTHER 2000-07-05 2000-10-05
E4509 SUP COST ETIMSTE 2003-04-07 2003-07-07
E4510 DEV DEFINE SPECS 2003-02-26 2003-10-26
E4579 DEV OTHER 2002-02-15 2002-10-15

COLUMN FUNCTIONS & GROUPING

1. SELECT WORKDEPT,SUM(SALARY)AS SUM_SALARY


FROM EMPLOYEE
GROUP BY WORKDEPT;
---------+---------+---------+---------+---
WORKDEPT SUM_SALARY
---------+---------+---------+---------+---
A01 25000.00
C01 10000.00
E01 20000.00
E02 50000.00

2. SELECT WORKDEPT,COUNT(*) AS EMP_COUNT


FROM EMPLOYEE
GROUP BY WORKDEPT;
---------+---------+---------+---------+--
WORKDEPT EMP_COUNT
---------+---------+---------+---------+--
A01 1
C01 1
E01 2
E02 1

3. SELECT WORKDEPT
FROM EMPLOYEE
GROUP BY WORKDEPT
HAVING COUNT(*)>1;
---------+---------+---------+---------+-
WORKDEPT
---------+---------+---------+---------+-
E01

4. SELECT COUNT(*) AS DEESIGNER, WORKDEPT


FROM EMPLOYEE
WHERE JOB='CMP'
GROUP BY WORKDEPT;
---------+---------+---------+---------+--
DEESIGNER WORKDEPT
---------+---------+---------+---------+--
1 E02

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

6. SELECT WORKDEPT, AVG(BONUS)AS "AVG_BONUS",


AVG(COMM)AS"AVG_COMM"
FROM EMPLOYEE
GROUP BY WORKDEPT
HAVING AVG(BONUS)>100 AND AVG(COMM)>40;
---------+---------+---------+---------+---------+
WORKDEPT AVG_BONUS AVG_COMM
---------+---------+---------+---------+---------+
A01 280.00000000 60.00000000
C01 250.00000000 100.00000000
E02 200.00000000 50.00000000

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

2. SELECT DEPTNO,'DEPARTMENT'AS INFO,DEPTNAME,1


FROM DEPARTMENT
WHERE DEPTNO IN('A01','C01','E01')
UNION ALL
SELECT DEPTNO,PROJNO AS INFO,PROJNAME,2
FROM PROJECT
WHERE DEPTNO IN('A01','C01','E01')
UNION ALL
SELECT WORKDEPT AS DEPTNO,EMPNO AS INFO,LASTNAME,3
FROM EMPLOYEE
WHERE WORKDEPT IN('A01','C01','E01')
ORDER BY DEPTNO,4;
---------+---------+---------+---------+---------+---------+--
DEPTNO INFO DEPTNAME
---------+---------+---------+---------+---------+---------+--
A01 DEPARTMENT ECE 1
A01 PR001 INVENTORY 2
A01 PR002 AIRLINE 2
A01 E4502 E 3
C01 DEPARTMENT PROD 1
C01 PR005 TRAFFIC 2
C01 E4509 V 3
E01 DEPARTMENT CHEM 1
E01 PR007 HOSPITAL 2
E01 E4510 K 3
E01 E4579 L 3

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

4. SELECT EMPNO,LASTNAME, SALARY


FROM EMPLOYEE
WHERE SALARY>ANY
(SELECT AVG(SALARY)FROM EMPLOYEE
WHERE WORKDEPT IN('C01','E01','A01')
GROUP BY WORKDEPT);
---------+---------+---------+---------+---------+--------
EMPNO LASTNAME SALARY
---------+---------+---------+---------+---------+--------
E4500 DEEP 50000.00
E4502 E 25000.00
E4579 L 15000.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

SELECT CHAR(HIREDATE) FROM EMPLOYEE WHERE


FIRSTNAME='JAIKUM';
---------+---------+---------+---------+---------+---------+-

---------+---------+---------+---------+---------+---------+-
1998-02-05

SELECT CHAR(CURRENT_TIME) AS CUR FROM


SYSIBM.SYSDUMMY1;
---------+---------+---------+---------+---------+-------
CUR
---------+---------+---------+---------+---------+-------
06.12.48

DATE

SELECT DATE('1989061') FROM SYSIBM.SYSDUMMY1;


---------+---------+---------+---------+-------

---------+---------+---------+---------+-------
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

SELECT DAYS('1989061') FROM SYSIBM.SYSDUMMY1;


---------+---------+---------+---------+---------+---------+---

---------+---------+---------+---------+---------+---------+---
726163

SELECT DAYS('2004010')-DAYS('2004004') FROM


SYSIBM.SYSDUMMY1;
---------+---------+---------+---------+---------+---------+---

---------+---------+---------+---------+---------+---------+---
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

S-ar putea să vă placă și