[USflag] The American Programmer [USflag]
Home Programming Books for Computer Professionals Privacy Terms
           Home   > Programming   > Just Enough   > Examples used in DB2/SQL course
           Home   > Programming   > Manuals   > SQL Manuals   > Examples used in DB2/SQL course

Books on DB2 and SQL

DB2 and SQL Manuals



Examples used in DB2/SQL course
This accompanies the SQL course

--------------Examples shown in the course
--            you may copy and paste these into a mainframe file and execute them
--EX0001
--Sample SQL Query
        SELECT EMPNO, LASTNAME,
       SALARY, COMM
       FROM EMP --A comment
       WHERE EMPNO = '000010'
       OR    EMPNO = '000020';

--EX0002
SELECT WORKDEPT, SUM(SALARY)
  FROM EMP

  WHERE JOB    > 'MANAGER'
    AND SALARY > 20000

  GROUP BY WORKDEPT
    HAVING SUM(SALARY) > 20000

ORDER BY WORKDEPT 
FETCH FIRST 1 ROW ONLY -- v7
OPTIMIZE FOR 1 ROW
FOR READ ONLY-- /FOR UPDATE 
WITH UR --/ RR / RS / CS
;

--EX0003
SELECT WORKDEPT, SUM(SALARY)
  FROM EMP

  WHERE JOB    > 'MANAGER'
    AND SALARY > 20000

  GROUP BY WORKDEPT
    HAVING SUM(SALARY) > 20000

  ORDER BY WORKDEPT 
;

--EX0004
SELECT *
  FROM EMP
;

--EX0005
-- Show some columns, and all rows
SELECT EMPNO, LASTNAME
  FROM EMP
;

--EX0006

SELECT DISTINCT JOB
  FROM EMP
;

--EX0007

SELECT DISTINCT WORKDEPT, JOB
  FROM EMP
;

--EX0008
--Show total of salary 
--and commission.

SELECT SALARY + COMM, LASTNAME
  FROM EMP
;

--EX0009
--Give everyone a 5% raise
SELECT SALARY * 1.05, LASTNAME
  FROM EMP
;

--EX0010
-- Show total of salary and commission
SELECT 'TOTAL COMPENSATION:', SALARY + COMM, LASTNAME
  FROM EMP
;

--EX0011
-- glue name and job
SELECT LASTNAME CONCAT JOB
  FROM EMP
;

--EX0012
SELECT *
  FROM EMP
  WHERE LASTNAME = 'STERN'
;

--EX0013
--WHERE WITH NUMERIC DATATYPE
SELECT * 
  FROM EMP 
  WHERE SALARY > 19999
;

--EX0014
--WHERE WITH CHARACTER DATATYPE
SELECT * 
  FROM EMP 
  WHERE LASTNAME = ‘SMITH’
;

--EX0015
--Show managers with more than 14 years
SELECT LASTNAME, JOB, EDLEVEL
  FROM EMP
  WHERE JOB = 'MANAGER'
  AND   EDLEVEL > 14
;

--EX0016
--Show employees with 14, 15, or 16 years
SELECT LASTNAME, EDLEVEL
  FROM EMP
  WHERE EDLEVEL = 14
  OR    EDLEVEL = 15
  OR    EDLEVEL = 16
;

--EX0017
-- using Parentheses
SELECT LASTNAME, JOB, SALARY, COMM
  FROM EMP
  WHERE JOB = 'CLERK'
  AND   (SALARY > 20000 OR COMM > 3000)
;

--EX0018
-- without parentheses
SELECT LASTNAME, JOB, SALARY, COMM
  FROM EMP
  WHERE JOB = 'CLERK'
  AND    SALARY > 20000 OR COMM > 3000
-- interpreted as: WHERE (JOB = 'CLERK'  AND    SALARY > 20000)
--  OR COMM > 3000

;

--EX0019
SELECT *
  FROM DEPT
  WHERE MGRNO = '000030'
;

--EX0020
SELECT *
  FROM DEPT
  WHERE MGRNO <> '000030'
;

--EX0021
--You have to ask explicitly if it IS NULL.
--show people who don’t have a manager
SELECT *
  FROM DEPT
  WHERE MGRNO IS NULL
;

--EX0022
--show people who do have a manager
SELECT *
  FROM DEPT
  WHERE MGRNO IS NOT NULL
;

--EX0023
--If there’s a percent sign or underscore in the data string, 
--you have to use an escape character.

SELECT * FROM DEPT
 WHERE DEPTNAME LIKE '%DEPT 110!%%' ESCAPE '!' --(NONE LIKE THAT)
;


--EX0024
--Show employees who have worked from 15 to 17 years.
SELECT LASTNAME, EDLEVEL
  FROM EMP
  WHERE EDLEVEL BETWEEN 15 AND 17
;

--EX0025
--Show employees who work in departments A00 or D21
SELECT LASTNAME, WORKDEPT
  FROM EMP
  WHERE WORKDEPT IN ('A00', 'D21')--   ANY ORDER OK
 -- You use Parentheses and commas.
;

--EX0026
--show whole dept Table; sort by MGRNO in reverse order
SELECT *
  FROM DEPT
  ORDER BY MGRNO DESC --NOTICE WHAT HAPPENS WITH THE NULLS IN MGRNO
;

--EX0027
--show managers higher than 10; sort by manager in reverse order
SELECT *
  FROM DEPT
  WHERE MGRNO > '000010'
  ORDER BY MGRNO DESC
;

--EX0028
--show lastname and job; sort by lastname and job
SELECT LASTNAME, JOB
  FROM EMP
  ORDER BY LASTNAME, JOB
;

--EX0029
SELECT LASTNAME, SALARY + COMM
  FROM EMP
  ORDER BY 2 --2 MEANS THE SECOND "COLUMN" SELECTED
;

--EX0030
SELECT LASTNAME AS EMPLOYEE, SALARY AS PAY_AMOUNT
  FROM EMP
;

--EX0031
SELECT LASTNAME, SALARY + COMM AS TOTAL_PAY
  FROM EMP
;

--EX0032
--SHOW LASTNAME, DEPARTMENT, AND DEPARTMENT NAME
SELECT LASTNAME, WORKDEPT, DEPTNO, DEPTNAME
  FROM EMP, DEPT -- TWO TABLES, INDICATES A JOIN
  WHERE WORKDEPT = DEPTNO-- THIS IS THE JOIN CONDITION
;

--EX0033
--what are the departments for each person?
SELECT DEPTNAME, EMPNO, LASTNAME
  FROM EMP, DEPT
  WHERE WORKDEPT = DEPTNO -- THE JOIN CONDITION
;

--EX0034
--what are the departments for each person
-- for administrative dept D01 only
SELECT LASTNAME, EMPNO, DEPTNAME 
  FROM EMP, DEPT
  WHERE WORKDEPT = DEPTNO -- THE JOIN CONDITION
    AND ADMRDEPT = 'D01'
;


--EX0035
INSERT INTO DEPT (DEPTNO, DEPTNAME, MGRNO, ADMRDEPT) VALUES
( 'A99',  'NEW DEPARTMENT',       '123456','A98');
;
SELECT D.DEPTNAME, D.MGRNO, E.EMPNO, E.LASTNAME                  
FROM DEPT D                                              
     LEFT OUTER JOIN EMP E                               
     ON D.MGRNO = E.EMPNO                                        
     ORDER BY D.MGRNO                                            
;

--EX0036
-- show departments and the names of their manager
-- also show any department without a manager (actually none)	
--  “who's in dept but not on emp (no one)”
-- also show any employee who is not a manager with Nulls (most)	
--  “who's on emp but not a manager on dept”
SELECT D.DEPTNAME, D.MGRNO, E.EMPNO, E.LASTNAME                  
FROM DEPT D                                              
     FULL OUTER JOIN EMP E                               
     ON D.MGRNO = E.EMPNO                                        
     WHERE E.SEX = 'F' -- TO CUT DOWN ON OUTPUT                  
     ORDER BY D.MGRNO                                            
;

--EX0037
-- What is highest salary?
SELECT MAX(SALARY)
  FROM EMP
;

--EX0038
-- how many different jobs are there? (not-what are the jobs?)
SELECT COUNT(DISTINCT JOB)
  FROM EMP
;

--EX0039
-- Give average salary for each department
SELECT WORKDEPT, AVG(SALARY)
  FROM EMP
  GROUP BY WORKDEPT 
;

--EX0040
SELECT WORKDEPT, AVG(SALARY)
  FROM EMP
  GROUP BY WORKDEPT HAVING AVG(SALARY) > 30000
;

--EX0041
SELECT SUBSTR(DEPTNAME,1,1)
   FROM DEPT
;

--EX0042
INSERT INTO DEPT (DEPTNO, DEPTNAME, MGRNO, ADMRDEPT) -- column names
VALUES
( 'A99',  'Y3K COMPLIANT PROGRAMS', '000099','A01') --data values
;

--EX0043
DELETE FROM EMP
  WHERE JOB = 'MANAGER'
;

--EX0044
DELETE FROM EMP
  WHERE WORKDEPT  IN
   (SELECT DEPTNO FROM DEPT
     WHERE DEPTNAME = 'PLANNING')
;

--EX0045
UPDATE EMP
  SET SALARY = SALARY + 1.50,
        LASTNAME = 'OLIVIA'
  WHERE COMM > 4000
;

--EX0046
--WHO MAKES MORE THAN LUTZ?
SELECT LASTNAME FROM EMP
WHERE SALARY > (SELECT SALARY FROM EMP
       WHERE LASTNAME = 'LUTZ')
;

--EX0047
--FIRST, FIND OUT HOW MUCH LUTZ MAKES
SELECT SALARY FROM EMP
  WHERE LASTNAME = 'LUTZ'
;


--EX0048
--THEN, FIND OUT THE NAMES OF THOSE WHO MAKE MORE THAN 29840
SELECT LASTNAME
  FROM EMP
   WHERE SALARY > 29840.00
;

--EX0049
--SHOW PEOPLE WHOSE DEPARTMENT HAS A MANAGER (EMP TABLE)
SELECT LASTNAME, WORKDEPT
  FROM EMP E
  WHERE EXISTS
   (SELECT *
   FROM EMP EE
   WHERE JOB = 'MANAGER' AND E.WORKDEPT = EE.WORKDEPT)
;

--EX0050
--SHOW DEPARTMENTS WITH NO EMPLOYEES
SELECT *
FROM DEPT D
WHERE NOT EXISTS
  (SELECT * FROM EMP E
   WHERE E.WORKDEPT = D.DEPTNO)
;

--EX0051
--UNION ALL DOES NOT SORT, 
--DOES NOT ELIMINATE DUPLICATES

SELECT LASTNAME, 'MALE'
  FROM EMP
  WHERE SEX = 'M'

UNION ALL

SELECT LASTNAME, 'FEMALE'
  FROM EMP
  WHERE SEX = 'F'
;

--EX0052
--UNION SORTS, 
--ELIMINATES DUPLICATES

SELECT LASTNAME, 'MALE'
FROM EMP
WHERE SEX = 'M'

UNION

SELECT LASTNAME, 'FEMALE'
FROM EMP
WHERE SEX = 'F'
;

--EX0053
CREATE VIEW EMPV
     AS SELECT EMPNO, LASTNAME, SALARY, COMM
        FROM EMP
        WHERE SALARY > 30000
     WITH CHECK OPTION
;

--EX0054
SELECT LASTNAME, SALARY, 
   CASE JOB
    WHEN ‘MANAGER’   THEN ‘SUP’
    WHEN ‘CLERK’     THEN ‘CLRK’
    WHEN ‘PRES’      THEN ‘BIG CHEESE’
   END
  FROM EMP

;

--EX0055
SELECT LASTNAME, 
  CASE 
   WHEN SALARY = 41250 THEN NULL 
   ELSE SALARY 
  END
FROM EMP
;

--ex0056
UPDATE EMP SET SALARY = 0              
WHERE LASTNAME = 'SMITH';              
                                       
SELECT LASTNAME, COMM, SALARY          
  FROM EMP                             
  WHERE                                
        (CASE WHEN SALARY = 0 THEN 0   
              ELSE COMM / SALARY       
         END)                          
        > .0799999                     
;                                      
ROLLBACK;   

--EX0057
SELECT HIREDATE + 5 YEARS
  FROM EMP;



SELECT LASTNAME
  FROM EMP
  WHERE (CURRENT-DATE - HIREDATE) > 5 YEARS;



UPDATE EMP
  SET HIREDATE = HIREDATE - 5 YEARS;


Top of Page




















































































List of books on JCL and other mainframe topics

[Books Computer]

Home Programming Books for Computer Professionals Privacy Terms Contact |
Site Map and Site Search Programming Manuals and Tutorials The REXX Files Top of Page |

[link page]