Anda di halaman 1dari 54

SQL/400

Structured Query Language

Overview
This is used to communicate with data base
management system. With SQL data manipulation such as display, insert, update and delete operations can be performed. It is an ANSII standard language. The SQL commands can be given on an editor which can be obtained by STRSQL command.
2

SELECT Statement
SELECT statement is used for displaying
all/certain columns. A simple select statements looks like this SELECT * FROM USRLIB/FILEA This would display all the records in with all the fields in FILEA.

SELECT Statement
A complex SELECT statement looks like this.
SELECT ENAME, ESAL FROM USRLIB/EMPMST WHERE EDEPT = AS/400 ORDER BY ENO The above statement would select the field values of ENAME, ESAL from EMPMST file for the records whose EDEPT value is
4

SELECT Statement
AS/400 and they would be retrieved in the sequential order of ENO. The SELECT also has grouping on a field value, defining new fields, arithmetic expressions support, multiple conditions using logical operators like AND and OR. The output of a SELECT statement can be directed to a printer file or to a physical file. This done by going to screen Change Session Attributes by pressing <F13>.
5

INSERT Statement
INSERT is used to create a new record with the values given. Ex : INSERT INTO EMPMST (ENO, ENAME, EDEPT, ESAL) VALUES(4023, KAMAL, AS/400, 25000) The values given in values braces are stored in corresponding fields.

UPDATE Statements
UPDATE is used to update one or more
records in a file. Ex : UPDATE EMPMST SET ESAL = 28500 WHERE ENO = 4023 This query updates the employee record for ESAL whose ENO is 4023.

DELETE Statement
This statement is used to delete one or
more records in a file. Ex : DELETE FROM EMPMST WHERE ENO = 4023 This query deletes the record whose ENO field value is 4023.

SQL STATEMENTS
SELECT EMPNO, LASTNAME, WORKDEPT SELECT * SELECT DEPTNAME, MGRNO INTO :PGM-DEPTNAME, :PGMMGRNO FROM CORPDATA.DEPARTMENT WHERE DEPTNO = :PGM-DEPT
9

SQL STATEMENTS
WHERE NOT WORKDEPT = 'C01' OR WHERE WORKDEPT <> 'C01' INSERT INTO CORPDATA.EMPTIME (EMPNUMBER, PROJNUMBER, STARTDATE, ENDDATE) SELECT EMPNO, PROJNO, EMSTDATE, EMENDATE FROM CORPDATA.EMP_ACT
10

SQL STATEMENTS
WHERE HIREDATE BETWEEN '1987-0101'AND '1987-12-31 WHERE HIREDATE >= '1987-01-01' AND HIREDATE <= '1987-12-31 WHERE WORKDEPT IN ('A00', 'C01', 'E21') WHERE ADDRESS LIKE '%MINNEAPOLIS% WHERE TOWN LIKE 'SAN%'
11

SQL STATEMENTS
WHERE WORKDEPT = 'D21' AND HIREDATE > '1987-12-31 WHERE WORKDEPT = 'C01' OR WORKDEPT = 'D11 WHERE WORKDEPT = 'E11' AND NOT JOB = 'ANALYST' WHERE EDLEVEL > 12 AND (WORKDEPT = 'E11' OR WORKDEPT = 'E21')
12

SQL STATEMENTS
SELECT DISTINCT JOB SELECT * FROM EMPLOYEE SELECT EMPNO, LASTNAME, WORKDEPT, DEPTNAME FROM EMPLOYEE, DEPARTMENT WHERE WORKDEPT = DEPTNO AND YEAR(BIRTHDATE) < 1930

13

SQL STATEMENTS
SELECT JOB, MIN(SALARY), MAX(SALARY) FROM EMPLOYEE GROUP BY JOB HAVING COUNT(*) > 1 AND MAX(SALARY) >= 27000 SELECT * FROM EMP_ACT WHERE EMPNO IN (SELECT EMPNO FROM EMPLOYEE WHERE WORKDEPT = 'E11')
14

SQL STATEMENTS
SELECT WORKDEPT, MAX(SALARY) FROM EMPLOYEE GROUP BY WORKDEPT HAVING MAX(SALARY) < (SELECT AVG(SALARY) FROM EMPLOYEE)

15

SQL STATEMENTS
SELECT WORKDEPT, MAX(SALARY) FROM EMPLOYEE EMP_COR GROUP BY WORKDEPT HAVING MAX(SALARY) < (SELECT AVG(SALARY) FROM EMPLOYEE WHERE NOT WORKDEPT = EMP_COR.WORKDEPT)

16

SQL STATEMENTS
SELECT PROJNAME, PRSTDATE, PRENDATE FROM PROJECT ORDER BY PRENDATE DESC SELECT WORKDEPT, AVG(SALARY) FROM EMPLOYEE GROUP BY WORKDEPT ORDER BY 2

17

SQL STATEMENTS
DECLARE UP_CUR CURSOR FOR SELECT PROJNO, PRSTDATE, PRENDATE FROM PROJECT FOR UPDATE OF PRSTDATE, PRENDATE OPTIMIZE FOR 2 ROWS ;

18

SQL STATEMENTS
The following SQL will delete the records RRN 1 thru RRN 9,999 DELETE FROM LIB1 / FILE1 FLDA WHERE RRN(FLDA) < 10000

19

SCALAR FUNCTIONS
SELECT AVG(PRSTAFF) INTO :AVERAGE FROM PROJECT WHERE DEPTNO = 'D11' SELECT COUNT(*) INTO :FEMALE FROM EMPLOYEE WHERE SEX = 'F' SELECT COUNT(DISTINCT WORKDEPT) INTO :FEMALE_IN_DEPT FROM EMPLOYEE WHERE SEX='F'
20

SCALAR FUNCTIONS
SELECT MAX(SALARY) / 12 INTO :MAX_SALARY FROM EMPLOYEE SELECT MAX(COMM) - MIN(COMM) INTO :COMM_SPREAD FROM EMPLOYEE WHERE WORKDEPT = 'D11' SELECT STDDEV(SALARY) INTO :DEV FROM EMPLOYEE WHERE WORKDEPT = 'A00';
21

SCALAR FUNCTIONS
SELECT SUM(BONUS) INTO :JOB_BONUS FROM EMPLOYEE WHERE JOB = 'CLERK' SELECT VAR(SALARY) INTO :VARNCE FROM EMPLOYEE WHERE WORKDEPT = 'A00 ABSVAL(:PROFIT) CONCAT(FIRSTNME, LASTNAME)
22

SCALAR FUNCTIONS
CURDATE() CURTIME() CHARACTER_LENGTH(:ADDRESS) SUBSTR(:NAME, :SURNAME_POS, 1) SELECT * FROM PROJECT WHERE SUBSTR(PROJNAME,1,10) = 'OPERATION '
23

SCALAR FUNCTIONS
TRANSLATE ('abcdef') STRIP(:HELLO)

24

SELECT -UNION
SELECT EMPNO FROM EMPLOYEE WHERE WORKDEPT LIKE 'E%' UNION SELECT EMPNO FROM EMP_ACT WHERE PROJNO IN('MA2100', 'MA2110', 'MA2112')

25

SELECT UNION ALL


SELECT EMPNO FROM EMPLOYEE WHERE WORKDEPT LIKE 'E%' UNION ALL SELECT EMPNO FROM EMP_ACT WHERE PROJNO IN('MA2100', 'MA2110', 'MA2112')

26

Interactive Select
The selection of files, fields, conditions etc can be selected by pressing <F4> on the query editor. The command to be used can be selected and the corresponding screen appears.

27

Join Operation
The joining of two tables is done based on a common column values. Ex : SELECT * FROM EMPMST, EMPDET WHERE ENO = EMPNO This would select the records from cartesian product where specified key is matching in the two tables.
28

INNER JOIN

With an inner join, column values from one row of a table are combined with column values from another row of another (or the same) table to form a single row of data

29

INNER JOIN
Inner Join Using JOIN Syntax SELECT EMPNO, LASTNAME, PROJNO FROM CORPDATA.EMPLOYEE INNER JOIN CORPDATA.PROJECT ON EMPNO = RESPEMP WHERE LASTNAME > 'S'
30

INNER JOIN
Inner Join Using the WHERE Clause SELECT EMPNO, LASTNAME, PROJNO FROM CORPDATA.EMPLOYEE, CORPDATA.PROJECT WHERE EMPNO = RESPEMP AND LASTNAME > 'S'
31

LEFT OUTER JOIN

A left outer join will return all the rows that an inner join returns plus one row for each of the other rows in the first table that did not have a match in the second table.

32

LEFT OUTER JOIN


SELECT EMPNO, LASTNAME, PROJNO FROM CORPDATA.EMPLOYEE LEFT OUTER JOIN CORPDATA.PROJECT ON EMPNO = RESPEMP WHERE LASTNAME > 'S'

33

EXCEPTION JOIN

An exception join returns only the records from the first table that do NOT have a match in the second table.

34

EXCEPTION JOIN
SELECT EMPNO, LASTNAME, PROJNO FROM CORPDATA.EMPLOYEE EXCEPTION JOIN CORPDATA.PROJECT ON EMPNO = RESPEMP WHERE LASTNAME > 'S'

35

CROSS JOIN
A cross join (or Cartesian Product join) will return a result table where each row from the first table is combined with each row from the second table. The number of rows in the result table is the product of the number of rows in each table.
36

CROSS JOIN

SELECT * FROM A CROSS JOIN B SELECT * FROM A, B

37

Sub Queries
It is used for nested queries. A query selection is based on another queries output. Ex : SELECT * FROM EMPMST WHERE ENO IN (SELECT EMPNO FROM EMPDET) The above query gives details of all employees from EMPMST whose details 38 are available in EMPDET.

CURSORS
C/EXEC SQL C+ DECLARE C1 DYNAMIC SCROLL CURSOR FOR SELECT FLD1, FLD2 FROM C+ COGUSER/@FILE1 WHERE FLD1 LIKE '%2%' C/END-EXEC

39

CURSORS
C/EXEC SQL C+ OPEN C1 C/END-EXEC

40

CURSORS
C/EXEC SQL C+ FETCH FIRST FROM C1 INTO :FIELD1, :FIELD2 C/END-EXEC

41

CURSORS
C SQLCOD DOWLT 100

C/EXEC SQL C+ FETCH NEXT FROM C1 INTO :FIELD1, :FIELD2 C/END-EXEC

42

CURSORS
C/EXEC SQL C+ CLOSE C1 C/END-EXEC

43

Embedded SQL
SQL statements can be included in a high level language. Ex : SQL used in RPGLE. C/EXEC SQL C+ DELETE FROM USRLIB/EMPMST C+ WHERE ENO = 4023 C/END-EXEC
44

Embedded SQL
SQL statements would be written in C specification. Between EXEC SQL and END-EXEC the SQL statement would be written. An RPGLE program with embedded SQL statements would be of type SQLRPGLE and be compiled with CL command CRTSQLRPGI.

45

Usage of Cursor
The subset of records selected from an embedded query in a high level language program is called cursor. Ex : C/EXEC SQL C+ Declare Empcursor Cursor C+ For Select * From EMPMST order by ENO C/END-EXEC
46

Usage of Cursor
C/EXEC SQL C+ Open Empcursor C/END-EXEC C/EXEC SQL C+ Fetch Next C+ from Empcursor C+ Into :ENUMB, :ENAM, :EDEPAT, C+ :ESALAR C/END-EXEC
47

Usage of Cursor
C/EXEC SQL C+ Close Empcursor C/END-EXEC Declare is used to declare the name of the cursor followed by the SQL statement. Open statement is used to make the cursor ready to use in the program.
48

Usage of Cursor
Fetch statement is used to read the cursor records into the program fields which are given with : before them. Close statement is used to close the cursor. After a cursor is closed, records cannot be fetched from the cursor.

49

DYNAMIC SQL
C/EXEC SQL C+ PREPARE S1 FROM :FLD1 C/END-EXEC C/EXEC SQL C+ EXECUTE S1 C/END-EXEC
50

DYNAMIC SQL
C/EXEC SQL C+ EXECUTE IMMEDIATE :FLD1 C/END-EXEC

51

DYNAMIC SQL
C/EXEC SQL C+ EXECUTE IMMEDIATE :FLD1 C/END-EXEC

52

RUNSQLSTM

The Run Structured Query Language Statement (RUNSQLSTM) command processes a source file of SQL statements.

53

Thank You

54

Anda mungkin juga menyukai