National University of Computer and Emerging Sciences, Lahore Campus
Course: Database Systems
Program: BS(Computer Science)
Instructor: Muhammad Ishaq Raza
Practice Problem: SQL (1) - SOLUTION
EMP (Empno, Ename, Job, Mgr, Hiredate, Sal, Comm, Deptno)
DEPT (Deptno, Dname, Loc)
SALGRADE (Grade, LoSal, HiSal)
Exercise 1
1. SELECT * FROM SALGRADE;
2. SELECT * FROM EMP;
3. SELECT * FROM EMP
WHERE SAL BETWEEN 1000 AND 2000;
4. SELECT DEPTNO, DNAME FROM DEPT
ORDER BY DNAME;
5. SELECT DISTINCT JOB FROM EMP;
6. SELECT * FROM EMP
WHERE DEPTNO = 10 OR DEPTNO = 20
ORDER BY ENAME;
7. SELECT ENAME, JOB FROM EMP
WHERE DEPTNO = 20 AND UPPER(JOB) = ‘CLERK’;
8. SELECT ENAME FROM EMP
WHERE ENAME LIKE ‘%TH%’ OR ENAME LIKE ‘%LL%’;
9. SELECT * FROM EMP
WHERE MGR IS NOT NULL;
10. SELECT ENAME, ISNULL(SAL,0) + ISNULL(COMM,0) AS “Remuneration”
FROM EMP;
11. SELECT * FROM EMP
WHERE YEAR(HIREDATE) = ‘1983’;
12. SELECT ENAME, SAL * 12 “Annual Salary”, COMM
FROM EMP
WHERE UPPER(JOB)=’SALESMAN’ AND SAL > ISNULL(COMM,0)
ORDER BY SAL DESC;
13. SELECT * FROM EMP ORDER BY MGR;
Exercise 2
1. SELECT ENAME, ROUND(SAL*1.15) AS INC_SAL FROM EMP;
2. SELECT ENAME, HIREDATE FROM EMP
WHERE DEPTNO=20;
3. SELECT ENAME, HIREDATE, DATEADD(YEAR, 1, HIREDATE) AS REVIEWDATE
FROM EMP ORDER BY DATEADD(YEAR, 1, HIREDATE);
4. (SELECT EMPNO, ENAME, 'Below 1500' AS SALARY
FROM EMP WHERE SAL < 1500)
UNION
(SELECT EMPNO, ENAME, 'On Target'
FROM EMP WHERE SAL = 1500)
UNION
(SELECT EMPNO, ENAME, CONVERT(VARCHAR, SAL)
FROM EMP WHERE SAL > 1500);
5. SELECT DATENAME(DW, HIREDATE)
FROM EMP;
6. SELECT ENAME, HIREDATE,
NEXT_DAY(LAST_DAY(ROUND(HIREDATE,’MONTH’))-7,’FRIDAY’) AS PAYDATE
FROM EMP ORDER BY HIREDATE;
7. SELECT EMPNO, ENAME,
ROUND(MONTHS_BETWEEN(SYSDATE, HIREDATE)) || ‘ months’ AS TIMELEN
FROM EMP;
Exercise 3
1. SELECT MIN(SAL) FROM EMP;
2. SELECT MIN(SAL), MAX(SAL), AVG(SAL) FROM EMP;
3. SELECT JOB, MIN(SAL), MAX(SAL)
FROM EMP GROUP BY JOB;
4. SELECT COUNT(DISTINCT MGR) FROM EMP;
5. SELECT JOB, AVG(SAL), AVG(SAL+ISNULL(COMM,0)) AS “AVG(RENUMERATION)”
FROM EMP GROUP BY JOB;
6. SELECT MAX(SAL) – MIN(SAL) FROM EMP;
7. SELECT DNAME FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
GROUP BY DNAME
HAVING COUNT(EMPNO) > 3;
8. SELECT DECODE(COUNT(EMPNO) - COUNT(DISTINCT EMPNO), 0, ‘Unique’, ‘Not Unique’)
FROM EMP;
9. SELECT MGR, EMPNO, ENAME, SAL
FROM EMP
WHERE (MGR,SAL) IN (SELECT MGR, MIN(SAL)
FROM EMP GROUP BY MGR
HAVING MIN(SAL) >= 1000 );
Exercise 4
1. SELECT ENAME, DNAME
FROM EMP JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO
ORDER BY DNAME;
2. SELECT ENAME, EMP.DEPTNO, DNAME
FROM EMP JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO
3. SELECT ENAME, LOC, DNAME
FROM EMP JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO
WHERE SAL > 1500;
4. SELECT EMPNO, ENAME, GRADE
FROM EMP JOIN SALGRADE ON SAL BETWEEN LOSAL AND HISAL;
5. SELECT EMPNO, ENAME
FROM EMP JOIN SALGRADE ON SAL BETWEEN LOSAL AND HISAL
WHERE GRADE = 3;
6. SELECT EMPNO, ENAME
FROM EMP JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO
WHERE UPPER(LOC) = ‘DALLAS’;
7. SELECT ENAME, JOB, SAL, GRADE, DNAME
FROM EMP JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO JOIN SALGRADE ON SAL
BETWEEN LOSAL AND HISAL
WHERE UPPER(JOB) <> ‘CLERK’
ORDER BY SAL DESC;
8. SELECT * FROM DEPT
WHERE DEPTNO NOT IN ( SELECT DISTINCT DEPTNO FROM EMP );
9. SELECT E.EMPNO EmpNo, E.ENAME EmpName,
M.EMPNO MgrNo, M.ENAME MgrName
FROM EMP E JOIN EMP M ON E.MGR = M.EMPNO;
10. SELECT E.EMPNO EmpNo, E.ENAME EmpName,
M.EMPNO MgrNo, M.ENAME MgrName
FROM EMP E RIGHT JOIN EMP M ON E.MGR = M.EMPNO;
11. SELECT DISTINCT E1.JOB JOB
FROM EMP E1 JOIN EMP E2 ON E1.JOB = E2.JOB
WHERE MONTHS_BETWEEN(E1.HIREDATE, ‘01-JAN-1983’) < 6
AND MONTHS_BETWEEN(E2.HIREDATE, ‘01-JAN-1984’) < 6;
12. SELECT E.EMPNO, E.ENAME
FROM EMP E JOIN EMP M ON E.MGR = M.EMPNO AND E.HIREDATE < M.HIREDATE;
Exercise 5
1. SELECT ENAME, HIREDATE FROM EMP
WHERE ENAME <> ‘Blake’
AND DEPTNO IN ( SELECT DEPTNO FROM EMP
WHERE UPPER(ENAME) = ‘BLAKE’);
2. SELECT EMPNO, ENAME FROM EMP
WHERE SAL > ( SELECT AVG(SAL) FROM EMP )
ORDER BY SAL DESC;
3. SELECT EMPNO, ENAME FROM EMP
WHERE DEPTNO IN ( SELECT DISTINCT DEPTNO
FROM EMP WHERE ENAME LIKE ‘%T%’ );
4. SELECT ENAME, DEPTNO, JOB FROM EMP
WHERE DEPTNO IN ( SELECT DEPTNO FROM DEPT WHERE UPPER(LOC)=’DALLAS’ );
5. SELECT ENAME, SAL FROM EMP
WHERE MGR IN ( SELECT EMPNO FROM EMP
WHERE LOWER(ENAME) = ‘king’ );
6. SELECT DEPTNO, ENAME, JOB FROM EMP
WHERE DEPTNO = ( SELECT DEPTNO FROM DEPT WHERE DNAME = ‘SALES’ );
7. SELECT ENAME, DEPTNO, SAL FROM EMP
WHERE (DEPTNO, SAL) IN ( SELECT DEPTNO, SAL FROM EMP
WHERE COMM IS NOT NULL );
8. SELECT ENAME, DEPTNO, SAL FROM EMP
WHERE (SAL, COMM) IN ( SELECT SAL, COMM FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
AND UPPER(LOC) = ‘DALLAS’ );
9. SELECT ENAME, HIREDATE, SAL FROM EMP
WHERE (SAL, COMM) IN ( SELECT SAL, COMM FROM EMP
WHERE LOWER(ENAME) = ‘scott’ );
10. SELECT * FROM EMP
WHERE SAL > ALL ( SELECT DISTINCT SAL FROM EMP WHERE JOB=’CLERK’ )
ORDER BY SAL DESC;