| SQL |
|---|
| Specifying Updates |
|---|
| DELETE |
|---|
| UPDATE |
|---|
| Relational Views in SQL |
|---|
| Queries On Views |
|---|
| View Processing |
|---|
| Updating Of Views |
|---|
| Creating indexes in SQL |
|---|
| Embedded SQL |
|---|
| Cursors |
|---|
| Specifying Updates |
|---|
| INSERT | DELETE | UPDATE |
|---|
INSERT INTO EMPLOYEE VALUES ( 'Richard', 'K', 'Marini', '653298653', '30-DEC-52', '98 Oak Forest,Katy,TX', 'M', 37000, '987654321', 4 ) |
|---|
Insert a tuple for a new EMPLOYEE for whom we only know the FNAME, LNAME, and SSN attributes. |
|---|
INSERT INTO EMPLOYEE (FNAME, LNAME, SSN)
VALUES ('Richard', 'Marini', '653298653')
|
|---|
Suppose we want to create a temporary table that has the name, number of employees, and total salaries for each department. A table DEPTS-INFO is created by U3A, and is loaded with the summary information retrieved from the database by the query in U3B. |
|---|
CREATE TABLE DEPTS_INFO (DEPT_NAME VARCHAR(10), NO_Of_EMPS INTEGER, TOTAL_SAL INTEGER); |
|---|
INSERT INTO EEPTS_INFO (DEPT_NAME, NO_OF_EMPS, TOTAL_SAL) SELECT DNAME, COUNT (*), SUM (SALARY) FROM DEPARTMENT, EMPLOYEE WHERE DNUMBER=DNO GROUP BY DNAME; |
|---|
| DELETE |
|---|
DELETE FROM EMPLOYEE WHERE LNAME='Brown' |
|---|
DELETE FROM EMPLOYEE WHERE SSN='l23456789' |
|---|
DELETE FROM EMPLOYEE WHERE DNO IN (SELECT DNUMBER FROM DEPARTMENT WHERE DNAME='Research') |
|---|
DELETE FROM EMPLOYEE |
|---|
| UPDATE |
|---|
Change the location and controlling department number of project number 10 to 'Bellaire` and 5, respectively. |
|---|
UPDATE PROJECT SET PLOCATION = 'Bellaire', DNUM = 5 WHERE PNUMBER=10 |
|---|
Give all employees in the 'Research' department a 10% raise in salary. |
|---|
UPDATE EMPLOYEE
SET SALARY = SALARY *1.1
WHERE DNO IN (SELECT DNUMBER
FROM DEPARTMENT
WHERE DNAME='Research')
|
|---|
| Relational Views in SQL |
|---|
CREATE VIEW WORKS_ON1 AS SELECT FNAME,LNAME,PNAME,HOURS FROM EMPLOYEE, PROJECT, WORKS_ON WHERE SSN=ESSN AND PNO=PNUMBER; |
|---|
| view name: WORKS_ON1 | |||
|---|---|---|---|
| FNAME | LNAME | PNAME | HOURS |
| relation name: EMPLOYEE | ||||||
|---|---|---|---|---|---|---|
| FNAME | MNAME | LNAME | SSN | |||
| relation name: PROJECT | |||
|---|---|---|---|
| PNAME | PNUM | PLOCATION | DNUM |
| relation name: WORK_ON | ||
|---|---|---|
| ESSN | PNO | HOURS |
CREATE VIEW DEPT_INFO (DEPT_NAME, NO_OF_EMPS, TOTAL_SAL) AS SELECT DNAME, COUNT (*), SUM (SALARY) FROM DEPARTMENT, EMPLOYEE WHERE DNUMBER=DNO GROUP BY DNAME; |
|---|
| view name: DEPT_INFO | |||
|---|---|---|---|
| DEPT_NAME | NO_OF_EMPS | TOTAL_SAL | |
| Queries On Views |
|---|
Retrieve the last name and First name of all employees who work on 'ProjectX'. |
|---|
| view name: WORKS_ON1 | |||
|---|---|---|---|
| FNAME | LNAME | PNAME | HOURS |
SELECT PNAME,FNAME,LNAME FROM WORKS_ON1 WHERE PNAME='ProjectX'; |
|---|
V1A: DROP VIEW WORKS_ON1; |
|---|
V2A: DROP VIEW DEPT_INFO; |
|---|
| View Processing |
|---|

| Updating Of Views |
|---|
Suppose we issue the command in UV1 to update the WORKS_ON1 view by modifying the PNAME attribute of 'John Smith' from 'ProductX' to 'ProductY'. |
|---|
| view name: WORKS_ON1 | |||
|---|---|---|---|
| FNAME | LNAME | PNAME | HOURS |
UPDATE WORKS_ON1
SET PNAME = 'productY'
WHERE LNAME='Smith' AND FNAME='John' AND
PNAME='productX'
|
|---|
UPDATE PROJECT SET PNAME = 'ProductY' WHERE PNAME = 'productX' |
|---|
| WORK_ON1 | FNAME | LNAME | PNAME | HOURS |
|---|
| EMPLOYEE | FNAME | MNAME | LNAME | SSN |
|---|
| PROJECT | PNAME | PNUM | PLOCATION | DNUM
| | 123 | Taipei | 703
| ProductY
| 456
| KaoHsiung
| 201
| |
|---|
| WORK_ON | ESSN | PNO | HOURS |
|---|
UPDATE WORKS_ON
SET PNO= (SELECT PNUMBER FROM PROJECT
WHERE PNAME='ProductY')
WHERE ESSN = (SELECT SSN FROM EMPLOYEE
WHERE LNAME='Smith' AND FNAME='John')
AND PNO = (SELECT PNUMBER FROM PROJECT
WHERE PNAME='ProductX')
|
|---|
| WORK_ON1 | FNAME | LNAME | PNAME | HOURS
| John
| Smith
| Database
| 20
| |
|---|
| EMPLOYEE | FNAME | MNAME | LNAME | SSN | |||
|---|---|---|---|---|---|---|---|
| John | C. | Smith | 9876543 |
| PROJECT | PNAME | PNUM | PLOCATION | DNUM
| ProductX
| 123
| Taipei
| 703
| ProductY
| 456
| KaoHsiung
| 201
| |
|---|
| WORK_ON | ESSN | PNO | HOURS
| 9876543
|
| 20
| |
|---|
MODIFY DEPT INFO SET TOTAL_SAL=100000 WHERE DNAME='Research'; |
|---|
| view name: DEPT_INFO | |||
|---|---|---|---|
| DEPT_NAME | NO_OF_EMPS | TOTAL_SAL | |
| Creating indexes in SQL |
|---|
CREATE INDEX LNAME INDEX ON EMPLOYEE ( LNAME ); |
|---|
CREATE INDEX NAMES INDEX ON EMPLOYEE ( LNAME ASC, FNAME DESC, MINIT ); |
|---|
CREATE UNIQUE INDEX SSN-INDEX ON EMPLOYEE ( SSN ); |
|---|
CREATE INDEX DNO_INDEX
ON EMPLOYEE ( DNO )
CLUSTER;
|
|---|
DROP INDEX DNO INDEX: |
|---|
| Embedded SQL |
|---|
Write a program segment (loop) that reads a social security number and prints out some information from the corresponding EMPLOYEE tuple |
|---|
LOOP:='Y';
while LOOP = 'Y' do
begin
writeln('input social security number:');
readln(SOC_SEC_NUM);
$SELECT FNAME, MINIT, LNAME, SSN, BDATE, ADDRESS,
SALARY
INTO %E.FNAME, %E.MINIT, %E.LNAME, %E.SSN,
%E.BDATE, %E.ADDRESS, %E.SALARY
FROM EMPLOYEE
WHERE SSN= %SOC_SEC_NUM;
writeln( E.FNAME, E.MINIT, E.LNAME, E.SSN, E.BDATE,
E.ADDRESS, E.SALARY);
writeln('more social security numbers (Y or N)? ');
readln(LOOP)
end;
|
|---|
| Cursors |
|---|
Write a program segment tyat reads (inputs) a department name, then lists the names of employees who work in that department, one at a time. The program reads a raise amount for each employee and updates the employee`s salary by that amount. |
|---|
writeln('enter the department name:');
readln(DNAME);
$SELECT DNUMBER INTO %DNUMBER
FROM DEPARTMENT
WHERE DNAME=%DNAME;
$DECLARE EMP CURSOR FOR
SELECT SSN, FNAME, MINIT, LNAME, SALARY
FROM EMPLOYEE
WHERE DNO= %DNUMBER
FOR UPDATE OF SALARY;
$OPEN EMP;
$FETCH EMP INTO %E.SSN, %E.FNAME, %E.MINIT,
%E.LNAME, %E.SAL;
while SQLCODE = 0 do
begin
writeln('employee name:', E.FNAME, E.MINIT, E.LNAME);
writeln('enter raise amount: ');
readln(RAISE);
$UPDATE EMPLOYEE SET SALARY = SALARY + %RAISE
WHERE CURRENT OF EMP;
$FETCH EMP INTO %E.SSN, %E.FNAME, %E.MINIT,
%E.LNAME, %E.SAL;
end;
$CLOSE CURSOR EMP;
|
|---|