Data Percieved As Tables: Relational Database Management System
Data Percieved As Tables: Relational Database Management System
LANGUAGE TO MANIPULATE
DATA
SQL SQL
STRUCTURED
QUERY
LANGUAGE
ENGLISH LIKE
EASY TO WRITE,
READ, AND UNDERSTAND
SQL COMPONENTS SQL
CONTROL
GRANT
REVOKE
QUERY SQL
REQUIRED SEQUENCE:
SELECT NAME, YEARS, Tells which
SALARY column(s) to use
FROM STAFF Tells which
table(s) to use
WHERE DEPT = 38 Tells which
row(s) to use
ORDER BY NAME Tells how to
sequence the result
FREE FROM QUERY SQL
EXAMPLE
FROM ORG
WHERE DEPT = 20
20 Sanders MGR --
20 Pernal SALES 612.45
20 James CLERK 128.20
20 Sneider CLERK 126.50
WHERE EXAMPLES SQL
A column that is –
NOT NULL must be given a value
Blanks or zeros are acceptable
- NOT ZERO
A VALUE of NULL is: - NOT BLANK
- UNKNOWN
NULL SELECTION SQL
To select by null value
SELECT NAME, JOB, COMM
FROM STAFF
WHERE COMM IS NULL
Result: NAME JOB COMM
Sanders MGR --
Marenghi MGR --
Hanes MGR --
Plotz MGR --
same as
Examples:
WHERE NAME LIKE ‘G%’ includes: Graham
Gonzalez
Gafney
WHERE NAME LIKE ‘%SON’ “ Wilson
WHERE NAME LIKE ‘%M%N%’ “ Marenghi
Rothman
Molinare
WHERE NAME LIKE ‘_ _’ “ Lu
WHERE NAME LIKE ‘_R%’ “ Fraye
Graham
NEGATION SQL
To reverse the test:
ORDER BY
SELECT DISTINCT
ORDER BY SQL
To put the rows into a specified sequence:
ADVANCED SELECT
COLUMN FUNCTIONS SQL
Reduce data from a column into a single value
Result contains no detail of individual
underlying rows
Numeric data only
SUM Total of the values in a column
AVG Average of the values in a column
Any data type
MIN Lowest value in a column
MAX Highest value in a column
COUNT Number of occurrences
SUM AVG MAX MIN SQL
EXAMPLE:
SELECT SUM(SALARY), AVG(SALARY),
MIN(COMM), MAX(COMM)
FROM STAFF
WHERE DEPT = 66
Result:
86076.20 17215.2400 55.50 844.00
Result contains no detail from individual
rows
Nulls are excluded
Decimal precision and scale derived from
underlying column
Can use expression
AVG (SALARY + COMM)
COUNT SQL
COUNT (*) Number of rows meeting the
search conditions
COUNT (DISTINCT column-name)
Number of unique values in that column. Null
value not counted.
Result: DEPT
15 41269.53 1468.70
20 45928.60 867.15
30 59778.80 1913.30
* * *
* * *
* * *
GROUP BY...
ORDER BY SQL
To change the sort order of the results:
SELECT DEPT, SUM(SALARY), SUM(COMM)
FROM STAFF
WHERE JOB <> ‘MGR’
GROUP BY DEPT
ORDER BY 3
Result: DEPT
20 45928.60 867.15
* * *
* * *
15 41269.53 1468.70
* * *
* * *
38 59778.80 1913.30
COMMENTS
SQL
Primary Foreign
Key Key
ID NAME DEP
T
10 Sanders 20
20 Pernal 20
30 Marenghi 38
40 O’Brien 38 Primary Foreign
50 Hanes 15 Key Key
60 Quigley 38 DEPT DEPTNAME MANAGE
70 Rothman 15 NUMB R
80 James 20 10 Head office 160
90 Koonitz 42 15 New England 50
100 Plotz 42 20 Mid Atlantic 10
110 Nigan 15 38 South Atlantic 30
* * * 42 Great Lekes 100
* * * 51 Plains 140
* * * 66 Pacific 270
84 Mountain 290
JOIN SQL
Plains 140 * * *
* * * * *
MULTIPLE TABLES SQL
Result: DEPTNAME NAME
Mid Atlantic Sanders
South Atlantic Marenghi
New England Hanes
Great Lakes Plotz
Plains Fraye
Head Office Molinare
Pacific Lea
Mountain Quill
A1 A2 A3 R1 R2 B1 B2 B3
A A X X
B A Y Y
C B X
B Y
C X
C Y
JOINING MORE THAN
TWO TABLES SQL
SELECT ID, NAME, DEPT, DEPTNAME,
ORDERNO
FROM STAFF, ORG, SALES
WHERE DEPT = DEPTNUMB AND ID =
SALESREPNO
Result:
ID NAME DEPT DEPTNAME ORDERNO
20 Pernal 20 Mid Atlantic 3456
20 Pernal 20 Mid Atlantic 6667
20 Pernal 20 Mid Atlantic 3580
20 Pernal 20 Mid Atlantic 7010
40 O’Brien 38 South Atlantic 4567
SUBQUERY SQL
SUBQUERY
SUBQUERY SQL
EMP DEPT
LASTNAME WORKDEPT DEPTNO ADMRDEPT
STAFF
NAME SALARY
CREATE TABLES
TABLE TERMS SQL
COLUMNS
KEY
DEPT DEPT
MGR
TABLE
NO NAME NO
ROWS CO1 INFO 030
E11 OPER 090
ENTITY: DEPARTMENT
CREATE TABLE SQL
• 1 to 10 characters: A-Z $ #
@ 0-9 _
(DB2, SQL/DS and OS/2 EE support up to
18 characters
DEPARTMENT
CREATE TABLE DEPARTMENT
(DEPTNO CHAR(3) NOT NULL,
DEPTNAME CHAR (20),
MGRNO CHAR(5)
“KEY” GUIDELINES SQL
PRIMARY KEY
• SHOULD NOT ALLOW NULLS
• SHOULD HAVE UNIQUE INDEX
FOREIGN KEY
• MAY ALLOW NULLS
• SHOULD HAVE NON-UNIQUE INDEX
OBJECTS SQL
OBJECTS
INDEX SQL
AN ORDERED LIST used by the database
manager to locate row(s) of a table
containing a given value.
INDEX
TABLE
CREATE INDEX SQL
A logical table
with rows & columns
from one or more tables
OPTIONAL PARAMETER
(Not SAA, but in DB2 and OS/2 EE):
WITH CHECK OPTION
ASSUMED COLUMN
NAMES SQL
VIEW:
BASE TABLE:
VIEW:
Creating a VIEW
CREATE VIEW MYPROJ AS
SELECT PRSTDATE FROM PROJ
WHERE (DEPTNO = ‘A11’ OR DEPTNO = ‘A17’)
AND PRENDATE < ’01/01/1988’
Using a VIEW
SELECT PRSTDATE FROM MYPROJ
VIEW AS SECURITY SQL
CREATE VIEW VEMP AS
SELECT EMPNO, JOBCODE, LASTNAME
FROM EMP WHERE WORKDEPT = ‘A17’
Base Table EMP
ADD
column_name data_type
01 Aaa 8
02 SSS 7
03 Mnn 12
ALTER TABLE TABX
ADD D CHAR(3)
A B C D
01 Aaa 8
02 SSS 7
03 Mnn 12
DROP SQL
TABLE tablename
DROP INDEX indexname
VIEW viewname
CONTROL
GRANT SQL
Example:
REVOKE SELECT ON EMPL FROM PUBLIC
MAINTAINING DATA SQL
MAINTAINING DATA
UPDATE TESTPROJ
SET PRSTAFF = PRSTAFF*2, PRENDATE = NULL,
PRSTDATE = ‘1987-06-01’ WHERE DEPTNO =
‘B01’
UPDATE Columns SQL
AFTER:
A subset of rows:
UPDATE PERS SET
SALARY = SALARY + 300 WHERE
JOB = ‘CLERK’
All rows:
UPDATE PERS SET
YEARS = YEARS +1
DELETE rows SQL
BEFORE:
PROJ PROJ DEPT RESP PR PRST PREN
NO NAME NO EMP STAFF DATE DATE
*** *** *** *** *** *** ***
MA2113 D11 000090 0005.00 19840215 19870201
PL2100 B01 000020 0001.00 19870101 ?
*** *** *** *** *** *** ***
OP2012 E21 000330 001.00 19820101 19880201
OP2013 E21 000340 001.00 19820101 19880201
MA2114 B01 ? 19870601 ?
SQL IN PROGRAMS
EMBEDDED SQL–
EXAMPLE 1 SQL
NON-CURSOR PROCESSING
UPDATE STAFF
EXEC SQL
SET SALARY = :NEWSAL
WHERE ID = :EMPNO
END-EXEC
SELECT AVG(SALARY)
EXEC SQL
INTO: AVESAL
FROM STAFF
WHERE DEPT =
:DPTNO
EXEC SQL