Escolar Documentos
Profissional Documentos
Cultura Documentos
LMD:
SELECT, INSERT, UPDATE, DELETE
LCD:
GRANT, REVOKE
Apostilas Ideal
SUPERSSN
CHAR(9),
DNO
INT
NOT NULL,
PRIMARY KEY (SSN),
FOREIGN KEY (SUPERSSN) REFERENCES EMPLOYEE (SSN)
ON DELETE SET NULL,
FOREIGN KEY (DNO) REFERENCES DEPARTMENT (DNUMBER));
Alternativamente:
CREATE DOMAIN D_NUMBER AS INTEGER
CHECK (D_NUMBER > 0 AND D_NUMBER < 21);
CREATE TABLE DEPARTMENT
(DNAME
VARCHAR(15) NOT NULL,
DNUMBER
D_NUMBER
NOT NULL,
...);
Apostilas Ideal
Apostilas Ideal
SUPERSSN
CHAR(9),
DNO INT NOT NULL DEFAULT 1,
PRIMARY KEY (SSN),
FOREIGN KEY (SUPERSSN) REFERENCES
EMPLOYEE (SSN) ON DELETE SET NULL,
FOREIGN KEY (DNO) REFERENCES
DEPARTMENT (DNUMBER) ON DELETE SET DEFAULT
ON UPDATE CASCADE);
Apostilas Ideal
Apostilas Ideal
Exemplo:
SELECT BDATE, ADDRESS
FROM EMPLOYEE
WHERE FNAME=John AND
MINIT=B AND
LNAME=Smith;
condio de juno
Apostilas Ideal
Apostilas Ideal
equivalente consulta
SELECT FNAME, LNAME, ADDRESS
FROM EMPLOYEE, DEPARTMENT
WHERE DNO=DNUMBER AND DNAME=Research;
Apostilas Ideal
FROM EMPLOYEE
WHERE DNO=5);
Apostilas Ideal
10
Apostilas Ideal
11
Facilidades Adicionais
Uso do operador JOIN
SELECT FNAME, LNAME, ADDRESS
FROM (EMPLOYEE JOIN DEPARTMENT
ON DNO=DNUMBER)
WHERE DNAME=Research;
SELECT DNAME, DLOCATION
FROM (DEPARTMENT NATURAL JOIN DEPT_LOCATIONS);
SELECT FNAME, LNAME, DEPENDENT_NAME
FROM (EMPLOYEE LEFT OUTER JOIN DEPENDENT
ON SSN=ESSN);
Facilidades Adicionais
Funes de agregao
SELECT SUM(SALARY), MAX(SALARY), MIN(SALARY),
AVG(SALARY)
FROM EMPLOYEE;
SELECT SUM(SALARY), MAX(SALARY), MIN(SALARY),
AVG(SALARY)
FROM EMPLOYEE, DEPARTMENT
WHERE DNO=DNUMBER AND DNAME=Research;
SELECT COUNT(*)
FROM EMPLOYEE, DEPARTMENT
WHERE DNO=DNUMBER AND DNAME=Research;
Apostilas Ideal
12
Facilidades Adicionais
Agrupamento
SELECT DNO, COUNT(*), AVG(SALARY)
FROM EMPLOYEE
GROUP BY DNO;
Facilidades Adicionais
Agrupamento com a clusula HAVING
SELECT PNUMBER, PNAME, COUNT(*)
FROM PROJECT, WORKS_ON
WHERE PNUMBER=PNO
GROUP BY PNUMBER, PNAME
HAVING COUNT(*) > 2;
Apostilas Ideal
13
3
3
3
3
Apostilas Ideal
14
Atualizaes em SQL
Comando INSERT
INSERT INTO EMPLOYEE
VALUES (Richard,K,Marini,653258653,1962-12-30,
98 Oak Forest, Katy, TX,37000,987654321,4);
INSERT INTO EMPLOYEE(FNAME, LNAME, SSN, DNO)
VALUES (Richard,Marini,653258653,4);
INSERT INTO EMPLOYEE(FNAME, LNAME, SSN, DNO)
SELECT * FROM INPUT;
Atualizaes em SQL
Comando DELETE
DELETE FROM EMPLOYEE
WHERE LNAME=Brown;
DELETE FROM EMPLOYEE
WHERE DNO IN (SELECT DNUMBER
FROM DEPARTMENT
WHERE DNAME=Research);
DELETE FROM EMPLOYEE;
Apostilas Ideal
15
Atualizaes em SQL
Comando UPDATE
UPDATE PROJECT
SET PLOCATION=Bellaire, DNUM=5
WHERE PNUMBER=10;
UPDATE EMPLOYEE
SET SALARY=SALARY*1.1
WHERE DNO IN (SELECT DNUMBER
FROM DEPARTMENT
WHERE DNAME=Research);
Vises em SQL
Uma viso em SQL uma tabela derivada de
tabelas base (definidas no esquema) de um
banco de dados ou de vises previamente
definidas
Comando CREATE VIEW
CREATE VIEW <nome da viso> [(<atributos>)]
AS <comando SELECT>;
Apostilas Ideal
16
Vises em SQL
Exemplos:
WORKS_ON1(FNAME, LNAME, PNAME, HOURS)
CREATE VIEW WORKS_ON1
AS SELECT FNAME, LNAME, PNAME, HOURS
FROM EMPLOYEE, PROJECT, WORKS_ON
WHERE SSN=ESSN AND PNO=PNUMBER;
DEPT_INFO (DEPT_NAME, NO_OF_EMPS, TOTAL_SAL)
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;
Vises em SQL
Vises podem ser consultadas como qualquer
outra tabela
SELECT LNAME, HOURS
FROM WORKS_ON1
WHERE PNAME=ProductX;
Apostilas Ideal
17
Implementao de Vises
Processamento de uma consulta sobre uma
viso depende da estratgia adotada para
sua implementao
Materizalizao da viso (view materialization)
A consulta executada diretamente sobre a viso
materializada
Implementao de Vises
Estratgia de modificao da consulta
SELECT LNAME, HOURS
FROM WORKS_ON1
WHERE PNAME=ProductX;
Apostilas Ideal
18
Atualizao de Vises
Em geral, vises no podem ser atualizadas
Por exemplo, seja a seguinte operao de
atualizao sobre a viso WORKS_ON1:
UPDATE WORKS_ON1
SET PNAME=ProductY
WHERE LNAME=Smith AND FNAME=John AND
PNAME=ProductX;
Como propagar esta atualizao para as tabelas base?
Atualizao de Vises
Opes para atualizao de WORKS_ON1
Opo 1:
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);
Apostilas Ideal
19
Atualizao de Vises
Vises definidas sobre uma nica tabela so
atualizveis se seus atributos incluem a chave
primria (ou uma das chave alternativas) da
tabela base
Vises definidas sobre mltiplas relaes
atravs de junes em geral no so
atualizveis
Vises definidas usando-se agrupamento e
funes de agregao no so atualizveis
Clusula CHECK
CREATE DOMAIN D_NUMBER AS INTEGER
CHECK (D_NUMBER > 0 AND D_NUMBER < 21);
Apostilas Ideal
20