Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% found this document useful (0 votes)
47 views

Data Percieved As Tables: Relational Database Management System

The document discusses SQL (Structured Query Language) which is used to manage data in relational database management systems. SQL allows users to define and manipulate the structure and data of databases through components like DML (Data Manipulation Language) and DDL (Data Definition Language). Key elements of SQL covered include SELECT statements to retrieve data, WHERE clauses to filter rows, ORDER BY to sequence result rows, and DISTINCT to eliminate duplicate rows.
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
47 views

Data Percieved As Tables: Relational Database Management System

The document discusses SQL (Structured Query Language) which is used to manage data in relational database management systems. SQL allows users to define and manipulate the structure and data of databases through components like DML (Data Manipulation Language) and DDL (Data Definition Language). Key elements of SQL covered include SELECT statements to retrieve data, WHERE clauses to filter rows, ORDER BY to sequence result rows, and DISTINCT to eliminate duplicate rows.
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 92

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

You might also like