RELATIONAL DATABASE
MANAGEMENT SYSTEM SQL
DATA PERCIEVED AS TABLES
LANGUAGE TO MANIPULATE
DATA
SQL SQL
STRUCTURED
QUERY
LANGUAGE
ENGLISH LIKE
EASY TO WRITE,
READ, AND UNDERSTAND
SQL COMPONENTS SQL
DML - DATA MANIPULATION LANGUAGE
SELECT
UPDATE
INSERT
DELETE
DDL – DATA DEFINITION LANGUAGE
CREATE
ALTER
DROP
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
SELECT NAME, YEARS, SALARY
FROM STAFF
WHERE DEPT = 38 ORDER BY NAME
SELECT...FROM SQL
SELECT some of the columns from a table
• Name the column(s) that you want in the result, in left-
to-right sequence
• Commas separate multiple names
FROM names the table(s)
• Simple: EMP
• Fully Qualified: AUTHID.EMP
EXAMPLE
SELECT DEPTNAME, DEPTNUMB
FROM ORG
Result: DEPTNAME DEPTNUMB
HEAD OFFICE 10
NEW ENGLAND 15
MID ATLANTIC 20
SOUTH ATLANTIC 38
SELECT ALL OF
THE COLUMNS SQL
To select all of the columns from a table in
the same left-to-right sequence as originally
defined:
SELECT *
FROM ORG
Result:
DEPTNUMB DEPTNAME MANAGER DIVISION LOCATION
10 Head Office 160 Corporate New York
15 New England 50 Eastern Boston
20 Mid Atlantic 10 Eastern Washington
38 South Atlantic 30 Eastern Atlanta
* * * * *
* * * * *
ROW CONTROL SQL
RETRIEVES CERTAIN ROWS
STATES THE CONDITIONS
List only the employees in department 20
SELECT DEPT, NAME, JOB, COMM
FROM STAFF
WHERE DEPT = 20
Result: DEPT NAME JOB COMM
20 Sanders MGR --
20 Pernal SALES 612.45
20 James CLERK 128.20
20 Sneider CLERK 126.50
WHERE EXAMPLES SQL
Select rows by numeric data
SELECT DEPT. NAME, JOB
FROM STAFF
WHERE DEPT = 20
Select row by character data
SELECT NAME, JOB, COMM
FROM STAFF
WHERE
NAME = ‘SANDERS’
COMPARISON
OPERATORS SQL
= Equal
< > or ¬ = Not equal
> Greater than
>= Greater than or equal
< Less than
<= Less than or equal
¬> Not greater than
¬< Not less than
SELECT ID, COMM
FROM STAFF
WHERE
COMM > = 1000
SELECT NAME, DEPT, YEARS
FROM STAFF
WHERE
JOB <> ‘MGR’
NULL
CHARACTERISTICS SQL
A column that is –
NOT NULL must be given a value
Blanks or zeros are acceptable
NULLABLE does not require a value and is
marked NULL
- 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 --
To select by not null value
SELECT NAME, JOB, COMM
FROM STAFF
WHERE COMM
Result: NAME IS NOTCOMM
JOB NULL
Pernal SALES 612.45
O’Brien SALES 846.55
Quigley SALES 650.25
Rothman SALES 1152.00
James SALES 128.20
MULTIPLE CONDITIONS SQL
Multiple condition retrieval:
AND -- OR
Given two conditions:
JOB = SALES SALARY< 17000
To have both conditions met: AND
WHERE JOB = ‘SALES’ AND SALARY < 17000
Result: NAME JOB SALARY
Quigley SALES 16808.30
Rothman SALES 16502.83
To have either or both conditions met: OR
WHERE JOB = ‘SALES’ OR SALARY < 17000
Result: NAME JOB SALARY
Pernal SALES 18171.25
Quigley SALES 16808.30
Rothman SALES 16502.83
James SALES 13504.60
MULTIPLE CONDITIONS SQL
WHERE (JOB = ‘SALES’ AND COMM > 1200)
OR YEARS > 10
Result: NAME JOB YEARS COMM
Koonitz SALES 6 1386.70
Jones SALES 12 --
Graham SALES 13 200.30
Edwards SALES 7 1285.00
NOT THE SAME AS –
WHERE JOB = ‘SALES’ AND (COMM > 1200
OR YEARS > 10)
Result: NAME JOB YEARS COMM
Koonitz SALES 6 1386.70
Graham SALES 13 200.30
Edwards SALES 7 1285.00
IN SQL
To match one of the list of values
WHERE DEPT (38,
IN20, 42)
same as
Multiple Ors on the same column:
WHERE DEPT = 38 OR DEPT = 20 OR DEPT = 42
BETWEEN SQL
To select a range of values
SELECT NAME, JOB, YEARS
FROM STAFF
WHERE YEARS BETWEEN
9 AND 11
same as
SELECT NAME, JOB, YEARS
FROM STAFF
WHERE YEARS >= 9
AND YEARS <= 11
Result: NAME JOB YEARS
Hanes MGR 10
Lu MGR 10
Lea MGR 9
Wilson MGR 9
Quill MGR 10
PARTIAL SEARCH SQL
To search on a subset of characters: LIKE
% Zero or any number of characters ignored
_ Exactly one character ignored
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:
WHERE NAME NOT LIKE ‘G%’
excludes: Graham
Gonzalez
Gafney
WHERE YEARS NOT BETWEEN 9 AND 11
excludes YEARS 9 through 11
RESULT TABLE ROWS SQL
To Sequence the Rows
ORDER BY
To Discard Duplicate Rows
SELECT DISTINCT
ORDER BY SQL
To put the rows into a specified sequence:
Alphabetic list of persons in department 84
SELECT NAME, JOB,YEARS
FROM STAFF
WHERE DEPT = 84
ORDER BY NAME
Result: NAME JOB YEARS
Davis SALES 5
Edwards SALES 7
Gafney SALES 5
Quill SALES 10
ORDER BY SQL
Specify culumn name(s) and whether ASCending
(default) or DESCending sequence
SELECT NAME, JOB, YEARS
FROM STAFF
WHERE DEPT = 84
ORDER BY JOB, YEARS DESC
Result: NAME JOB YEARS
Gafney CLERK 5
Quill MGR 10
Edwards SALES 7
Davis SALES 5
ORDER BY YEARS DESC, JOB
Result: NAME JOB YEARS
Quill MGR 10
Edwards SALES 7
Gafney CLERK 5
Davis SALES 5
SELECT DISTINCT
SQL
SELECT DEPT DEPT
FROM STAFF 20
20
38
38
15
38
10
*
*
_________________________________________________________
To eliminate duplicate rows DEPT
SELECT DISTINCT DEPT 10
FROM STAFF 15
20
38
*
*
*
SELECT DISTINCT
SQL
Multi-columns DEPT JOB
SELECT DISTINCT DEPT, JOB 10 MGR
FROM STAFF 15 CLERK
15 MGR
15 SALES
20 CLERK
20 MGR
20 SALES
38 CLERK
* *
* *
* *
‘DISTINCT’ COMMENTS SQL
The keyword DISTINCT must immediately follow the SELECT
Result Rows are sequenced in columns from left to right
‘ORDER BY’ can be used to control sequencing
Example:
SELECT DISTINCT DEPT, JOB
FROM STAFF
ORDER BY JOB
DEPT JOB
15 CLERK
20 CLERK
38 CLERK
*
*
*
10 MGR
15 MGR
20 MGR
*
*
*
15 SALES
20 SALES
*
*
*
‘ORDER BY’ COMMENTS SQL
All ‘ORDER BY’ columns must be selected
Result rows are sequenced on ‘ORDER
BY’ columns
Nulls sort high
VALUES
SQL
+ ADD * MULTIPLY
- SUBTRACT / DIVIDE
Total earnings for each person in DEPT 20
SELECT ID, SALARY, COMM, SALARY + COMM
FROM STAFF
WHERE DEPT = 20
Result: ID SALARY COMM
10 18357.50 - -
20 18171.25 612.45 18783.70
80 13504.60 128.20 13632.80
190 14252.75 126.50 14379.25
CONDITION ON
CALCULATED VALUES SQL
Persons whose salary plus commission esceeds $20,000
SELECT NAME, SALARY + COMM
FROM STAFF
WHERE SALARY + COMM > 20000
Result: NAME
Williams 20094.15
Graham 21200.30
‘ORDER BY’
CALCULATED VALUES SQL
Example 1:
SELECT NAME, SALARY + COMM
FROM STAFF
WHERE SALARY + COMM > 20000
ORDER BY 2 DESC
Result: NAME
Graham 21200.30
Williams 20094.15
Example 2:
SELECT JOB, SALARY + COMM
FROM STAFF
ORDER BY JOB, 2
ADVANCED SELECT SQL
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.
Count the departments, and persons, where
the person’s total salary exceed $18,000
And list their average salary.
SELECT COUNT(DISTINCT DEPT),
COUNT(*), AVG(SALARY)
FROM STAFF
WHERE SALARY > 18000
Result:
8 16 19604.190625000
GROUP BY SQL
With GROUP BY, a column function results
in a single value for each group for each
function.
SELECT SUM(SALARY), SUM(COMM)
FROM STAFF
WHERE JOB <>’MGR’
GROUP BY DEPT
_________________________
41269.53 1468.70
45928.60 867.15
59778.80 1913.30
* *
* *
* *
GROUP BY SQL
SELECT DEPT, SUM(SALARY),
SUM(COMM)
FROM STAFF
WHERE JOB <> ‘MGR’
GROUP BY DEPT
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
‘GROUP BY’ can be on multiple columns
• GROUP BY DEPT, JOB
‘GROUP BY’ columns need not be
selected
Selected column must be in column
function or in ‘GROUP BY’
One row of summary results for each
‘GROUP BY’ value
All nulls are a single group
GROUP BY... HAVING SQL
TO PUT CONDITIONS ON GROUPS
SELECT. . . FROM . .
WHERE . . .
FILTERS
GROUP BY . . .
HAVING . . .
WHERE chooses rows
HAVING chooses groups
‘HAVING’ EXAMPLES SQL
SELECT DEPT, SUM(SALARY)
FROM STAFF
GROUP BY DEPT
DEPT
10 83463.45
15 61929.33
20 64286.10
38 77285.55
42 58369.05
* *
* *
* *
SELECT DEPT, SUM(SALARY)
FROM STAFF
GROUP BY DEPT
HAVING SUM(SALARY) > 65000
DEPT
10 83463.45
38 77285.55.
* *
* *
* *
‘HAVING’ EXAMPLES SQL
Average non-management salary by
department for all departments having more
than 3 non-managers
SELECT DEPT, AVG(SALARY)
FROM STAFF
WHERE JOB <> ‘MGR’
GROUP BY DEPT
HAVING COUNT (*) > 3
Average non-management salary by
department for that no one with less than 5
years experience. Organize the result with
highest average salary first.
SELECT DEPT, AVG(SALARY)
FROM STAFF
WHERE JOB <> ‘MGR’
GROUP BY DEPT
HAVING MIN(YEARS) >= 5
ORDER BY 2 DESC
COLUMN FUNCTIONS
SUMMARY SQL
Column functions may be specified only in
SELECT
HAVING
SELECT may specify only
Column functions
Column specified in ‘GROUP BY’
HAVING may specify
Any column function on any column in a table
being queried. This column need not be in the
SELECT.
Column FUNCTIONS may not be
nested
JOINING TABLES 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
Join implemented by FROM
Result can contain columns from any tables
named in the FROM clause
Tables related by common data
• “Join predicate” of WHERE clause
Guideline: The join predicate should be
primary key of one table equals
foreign key of other table (e.g.,
DEPTNUMB = DEPT or
MANAGER = ID)
MULTIPLE TABLES SQL
List the name of each department with the
name of its manager
SELECT DEPTNAME, NAME
FROM STAFF, ORG
WHERE MANAGER =ID
ORG STAFF
DEPT- MANA- DIVISION ID NAME
NAME GER
140 Fraye
* * *
* *
* * *
270 Lea
Pacific 270 Western
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
List the department name and manager’s name
for each department in the Western Division
SELECT DEPTNAME, NAME
FROM STAFF, ORG
WHERE DIVISION = ‘WESTERN’
AND MANAGER = ID
WHERE CLAUSE SQL
WARNING: Don’t join tables without a join
predicate.
SELECT A1, B1 FROM TBLA, TBLB
TBLA RESULT TBLB
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
A SELECT WITHIN A SEARCH
CONDITION OF ANOTHER SELECT...
RESULTS of SUBQUERY ARE TO BE
USED AS VALUE(S) WITHIN THE
“OUTER” SELECT
SUBQUERY EXAMPLE SQL
List employees whose work department is under
administrative department ‘A00’
EMP DEPT
LASTNAME WORKDEPT DEPTNO ADMRDEPT
SELECT LASTNAME, WORKDEPT
FROM EMP
WHERE WORKDEPT IN (SELECT
DEPTNO FROM DEPT WHERE
ADMRDEPT = ‘A00’)
USER SEES RESULTS ONLY SUBQUERY VALUES
FROM HIGHEST LEVEL RETURNED TO HIGHER
SELECT LEVEL SELECT
COMMENTS ON
SUBQUERY SQL
CAN BE IN WHERE CLAUSE or in HAVING
CLAUSE
CAN BE NESTED
MUST BE on RIGHT SIDE of SEARCH
CONDITION
MUST BE ENCLOSED in PARENTHESES
CAN RETURN SINGLE OR MULTIPLE
VALUES FROM ONLY ONE COLUMN
NUMBER OF VALUES SUBQUERY CAN
RETURN DETERMINES OPERATOR IN OUTER
SELECT
CANNOT CONTAIN UNION, UNION ALL, or
ORDER BY
SUBQUERY A
SINGLE VALUE SQL
List the employees whose salaries are higher
than the company average
STAFF
NAME SALARY
Find average salary for the company (SUBQUERY)
SELECT AVG(SALARY) FROM STAFF
16675
Compare each employees salary to the result
SELECT NAME, SALARY FROM STAFF WHERE
SALARY > (SELECT AVG(SALARY) FROM STAFF)
Result: NAME SALARY
Sanders 18357.50
Pernal 18171.25
* *
* *
* *
SUBQUERY A
SINGLE VALUE SQL
List the employee with the maximum salary
SELECT NAME, SALARY
FROM STAFF
WHERE SALARY = (SELECT MAX(SALARY)
FROM STAFF)
Result: NAME SALARY
Molinare 22959.20
SUBQUERY A LIST
OF VALUES:ALL SQL
List alphabetically employees whose salaries are
higher than the average salaries for each
and every department
Find average salary for each department
(SELECT AVG(SALARY) FROM STAFF
GROUP BY DEPT)
Result: 20865.862500000
15482.332500000
16071.525000000
*
14592.262500000
*
*
SUBQUERY A LIST
OF VALUES:ALL SQL
Compare each employee’s salary to the list
of department averages
SELECT NAME, SALARY FROM STAFF
WHERE SALARY > ALL (SELECT
AVG(SALARY) FROM STAFF
GROUP BY DEPT)
ORDER BY NAME
Result: NAME SALARY
Fraye 21150.00
Molinare 22959.20
Jones 21234.00
Graham 21000.00
SUBQUERY A LIST OF
VALUES: ANY or SOME SQL
List alphabetically employees whose salaries are
higher than the average salary of any department
Find average salary for each department
SELECT AVG(SALARY) FROM STAFF
GROUP BY DEPT
Result: 20865.862500000
15482.332500000
16071.525000000
*
14592.262500000
*
*
SUBQUERY A LIST OF
VALUES: ANY or SOME SQL
Compare each employee’s salary to the list
of department averages
SELECT NAME, SALARY FROM STAFF WHERE
SALARY > ANY (SELECT AVG(SALARY) FROM
STAFF GROUP BY DEPT)
ORDER BY NAME
Result: NAME SALARY
Daniels 19260.25
Davis 15454.50
Edwards 17844.00
Fraye 21150.00
Gonzalez 16858.20
Graham 21000.00
* *
* *
IN SQL
List managers in the Western Division
SELECT DEPT, NAME FROM STAFF WHERE
ID = ANY (SELECT MANAGER FROM
ORG WHERE DIVISION =
‘WESTERN’)
RESULT of the SUBQUERY is a list of
MANAGERS from the Western Division
departments (270 and 290)
‘IN’ is equivalent to a series of ‘OR...=‘ on a
single column
IN can be substituted for = ANY
SELECT DEPT, NAME FROM STAFF
WHERE ID IN (SELECT MANAGER FROM ORG
WHERE DIVISION = ‘WESTERN’)
SUBQUERY within
HAVING CLAUSE SQL
List those departments where average of
non-managers salary is above the company
average of non-managers. Include the
average salary with the highest first
SELECT DEPT, AVG(SALARY)
FROM STAFF WHERE JOB <> ‘MGR’
GROUP BY DEPT
HAVING AVG(SALARY) > (SELECT
AVG(SALARY) FROM STAFF WHERE
JOB <> ‘MGR’)
ORDER BY 2 DESC
Result: DEPT
66 16880.175000000
51 16235.200000000
84 15443.000000000
20 15309.530000000
CORRELATED
SUBQUERY SQL
List employees whose salaries are higher
than the average salary for their department
SELECT NAME, SALARY FROM STAFF
CN WHERE SALARY >
(SELECT AVG(SALARY) FROM
STAFF WHERE DEPT =
CN.DEPT)
A correlated subquery is executed for
each row retrieved by the outer select
SUBQUERY TO TEST
TRUE/FALSE SQL
List information about managers making
less than $18,000 if there are any managers
making more than $22,000
SELECT ID, NAME, SALARY, DEPT
FROM STAFF WHERE JOB = ‘MGR’ AND
SALARY < $18,000 AND EXISTS (SELECT *
FROM STAFF WHERE JOB = ‘MGR’ AND
SALARY > $22,000)
ID NAME SALARY DEPT
30 Marenghi 17506.75 38
TRUE/FALSE ON INNER ‘SELECT’
Decide if first ‘select’ takes place
CREATE TABLES SQL
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
CREATE TABLE table_name
(col_name . . . )
• 1 to 10 characters: A-Z $ #
@ 0-9 _
(DB2, SQL/DS and OS/2 EE support up to
18 characters
• First character must be alphabetic
CREATE TABLE
EXAMPLE SQL
DEPTNO DEPTNAME MGRNO
(3) (20) (5)
... ... ...
CO1 Information 00030
Center
E11 Operations 00090
... ... ...
DEPARTMENT
CREATE TABLE DEPARTMENT
(DEPTNO CHAR(3) NOT NULL,
DEPTNAME CHAR (20),
MGRNO CHAR(5)
“KEY” GUIDELINES SQL
PRIMARY KEY – FOREIGN KEY
• DATA TYPES AND LENGHTS SHOULD BE
IDENTICAL
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
CREATE INDEX index_name
ON table_name
(col_name ASC|DESC,
col_name ASC|DESC,
...)
Optional Parameter: UNIQUE –
prevents the index from containing two or
more rows with the same key
CREATE INDEX
EXAMPLES SQL
CREATE INDEX IXEMPD ON
EMP(WORKDEPT)
CREATE UNIQUE INDEX IXEMPN
ON EMP(EMPNO)
CREATE INDEX IXPROJ
ON PROJ(PROJNO DESC)
CREATE UNIQUE INDEX IXDADM
ON DEPT(DEPTNO, ADMRDEPT)
VIEW SQL
A logical table
with rows & columns
from one or more tables
defined through SELECT
view data not separately stored
simplifies SQL
provides security
‘CREATE VIEW’
FORMAT SQL
CREATE VIEW view_name
(col_name, col_name, . . . )
AS SELECT select_stmt
OPTIONAL PARAMETER
(Not SAA, but in DB2 and OS/2 EE):
WITH CHECK OPTION
ASSUMED COLUMN
NAMES SQL
CREATE VIEW MYPROJ AS
SELECT PROJNO, PRSTDATE, PRENDATE
FROM PROJ
BASE TABLE:
PROJNO PROJNAME PRSTDATE PRENDATE
VIEW:
PROJNO PRSTDATE PRENDATE
ASSIGNING COLUMN
NAMES SQL
CREATE VIEW MYPROJ
(PROJNO, START, ENDD)
AS SELECT PROJNO, PRSTDATE, PRENDATE
FROM PROJ
BASE TABLE:
PROJNO PROJNAME PRSTDATE PRENDATE
VIEW:
PROJNO START ENDD
VIEW AS
CONVENIENCE SQL
Using Base Table
SELECT PRSTDATE FROM PROJ
WHERE (DEPTNO = ‘A11’ OR DEPTNO = ‘A17’)
AND PRENDATE < ’01/01/1988’
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
LAST JOB WORK
EMPNO NAME CODE SALARY DEPT
Columns do not exist
in VIEW “VEMP”
View VEMP
EMPNO JOBCODE LASTNAME
Rows are for dept A17 only
ALTER TABLE SQL
table_name
ALTER TABLE
ADD
column_name data_type
To ADD multiple column, code multiple
ALTER statemets
ADDed columns must accept NULL or
NOT NULL WITH DEFAULT values
ALTER TABLE EXAMPLE SQL
TABX
A B C
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
Dropping an object causes its dependents to be
dropped
CONTROL SQL
CONTROL
GRANT SQL
Used to grant privileges on an object to users.
Table or view privileges:
ALTER (Table only)
DELETE
INDEX (Table only)
INSERT
SELECT
UPDATE
Example:
GRANT SELECT ON EMPL TO PUBLIC
REVOKE SQL
Used to revoke previously granted
privileges on an object from users.
Example:
REVOKE SELECT ON EMPL FROM PUBLIC
MAINTAINING DATA SQL
MAINTAINING DATA
INSERT UPDATE DELETE
INSERT A Single Row SQL
INSERT INTO PROJ
VALUES (‘MA2114’, ’’, ‘B01’,’’, NULL, CURRENT DATE,
NULL)
-or-
INSERT INTO PROJ
(DEPTNO, PROJNO, PROJNAME, RESPEMP, PRSTDATE)
VALUES (‘B01’, ‘MA2114’,
’’, ’’, CURRENT DATE)
Result:
PROJ PROJ DEPT RESP PR PRST PREN
NO NAME NO EMP STAFF DATE DATE
*** *** *** *** *** *** ***
*** *** *** *** *** *** ***
OP2011 SCP E21 000320 001.00 19820101 19880201
SYSTEM
SUPORT
OP2012 APPLICA E21 000330 001.00 19820101 19880201
T’N
SUPORT
OP2013 DB/DC E21 000340 001.00 19820101 19880201
SUPORT
*** *** *** *** *** *** ***
MA2114 B01 ? 19880920 ?
INSERT Multiple Rows SQL
TESTPROJ
PROJ RESP PR PRST PREN
PROJNO NAME DEPTNO EMP STAFF DATE DATE
INSERT INTO TESTPROJ SELECT * FROM PROJ
WHERE DEPTNO LIKE ‘B%’ OR DEPTNO IN
(‘E11’, ‘E21’, ‘E31’)
Result:
PROJ PROJ DEPT RESP PR PRST PREN
NO NAME NO EMP STAFF DATE DATE
PL2100 B01 000020 001.00 19870101 19870915
OP1010 E11 000090 005.00 19860101 19880501
OP2010 E21 000100 004.00 19820101 19880201
OP2011 E21 000320 001.00 19820101 19880201
OP2012 E21 000330 001.00 19820101 19880201
OP2013 E21 000340 001.00 19820101 19880201
UPDATE Columns SQL
BEFORE:
PROJN PROJ DEPT RESP PR PRST PREN
O NAME NO EMP STAFF DATE DATE
*** *** *** *** *** *** ***
MA2113 D11 000090 0005.00 19840215 19870201
PL2100 B01 000020 0001.00 19870101 19870215
*** *** *** *** *** *** ***
OP2012 E21 000330 001.00 19820101 19880201
OP2013 E21 000340 001.00 19820101 19880201
MA2114 B01 ? ? ?
UPDATE TESTPROJ
SET PRSTAFF = PRSTAFF*2, PRENDATE = NULL,
PRSTDATE = ‘1987-06-01’ WHERE DEPTNO =
‘B01’
UPDATE Columns SQL
AFTER:
PROJN PROJ DEPT RESP PR PRST PREN
O NAME NO EMP STAFF DATE DATE
*** *** *** *** *** *** ***
MA2113 D11 000090 0005.00 19840215 19870201
PL2100 B01 000020 0002.00 19870601 ?
*** *** *** *** *** *** ***
OP2012 E21 000330 001.00 19820101 19880201
OP2013 E21 000340 001.00 19820101 19880201
MA2114 B01 ? 19870601 ?
UPDATE Columns SQL
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 ?
DELETE FROM TESTPROJ
WHERE DEPTNO = ‘B01’
AFTER:
PROJ PROJ DEPT RESP PR PRST PREN
NO NAME NO EMP STAFF DATE DATE
*** *** *** *** *** *** ***
MA2113 D11 000090 0005.00 19840215 19870201
*** *** *** *** *** *** ***
OP2012 E21 000330 001.00 19820101 19880201
OP2013 E21 000340 001.00 19820101 19880201
DELETE All Rows SQL
BEFORE:
PROJ PROJ DEPT RESP PR PRST PREN
NO NAME NO EMP STAFF DATE DATE
*** *** *** *** *** *** ***
MA2113 D11 000090 0005.00 19840215 19870201
*** *** *** *** *** *** ***
OP2012 E21 000330 001.00 19820101 19880201
OP2013 E21 000340 001.00 19820101 19880201
DELETE FROM TESTPROJ
AFTER:
PROJ RESP PR PRST PREN
PROJNO NAME DEPTNO EMP STAFF DATE DATE
SQL IN PROGRAMS SQL
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
SELECT IS VALID ONLY FOR A SINGLE
RESULT ROW
PLACES RESULT(S) IN “HOST VARIABLE(S)”
EMBEDDED SQL–
EXAMPLE 2 SQL
CURSOR PROCESSING
EXEC SQL DECLARE ABC CURSOR FOR
SELECT NAME, SALARY, COMM FROM
STAFF WHERE DEPT =
:DEPTNO
EXEC SQL OPEN ABC;
EXEC SQL FETCH ABC;
•
INTO :NAME, :SAL, :COM;
•
•
VALID FOR RESULT TABLES WITH ANY
NUMBER OF ROWS
FETCH RETRIEVES ONE ROW OR RESULT
TABLE AND PLACES IN “HOST VARIABLE(S)”
FETCH AFTER LAST RESULT ROW RETURNS
SQL CODE + 100