Sie sind auf Seite 1von 81

Unidade 2: SQL

SQL
Manipulao e controle de bancos de
dados relacionais
Acesso ao banco de dados:
Ambiente interativo de consultas
Embutida em linguagens hospedeiras

Recursos:

Alto poder de consulta


Gerenciamento de ndices
Construo de vises
Execuo de instrues em blocos
2

Grupos de comandos SQL


Linguagem de Definio de Dados (DDL):
comandos para definir, alterar e remover
tabelas e ndices;

Linguagem de Manipulao de Dados


(DML): comandos para inserir, remover,
atualizar e consultar os dados armazenados
nas tabelas;
Linguagem de Controle de Dados (DCL):
comandos para se trabalhar em ambiente
multi-usurio, permitindo estabelecer nveis
de segurana e manipular transaes.
3

Tabelas Exemplo

Curso
CodC

NomeC

DuracaoC

MensC

C1

Anlise Sist

400

C2

Eng Mecatrnica

600

C3

Cincia Comp

450

C4

Eng Eltrica

600

C5

Turismo

350

Tabelas Exemplo

Disciplina
CodD

NomeD

CargaD

AreaD

PreReqD

D1

TLP1

Computao

D2

D2

Clculo1

Matemtica

null

D3

Ingls

Humanas

null

D4

Ed Fsica

Sade

null

D5

G Analtica

Matemtica

D2

D6

Projeto Final

null

D1
5

Tabelas Exemplo

Professor
CodP

NomeP

CidadeP

TituloP

P1

Joaquim

Rib Preto

Mestre

P2

Paulo

Batatais

Espec

P3

Andr

Rib Preto

Doutor

P4

Gil

S Carlos

Doutor

P5

Juliana

S Carlos

Ps Doc

Tabelas Exemplo

Grade
CodC

CodD

CodP

Sala

C1

D6

P1

305

C2

D2

P2

305

C3

D2

P2

305

C4

D1

P5

201

C4

D3

P3

204

C5

D4

P3

204

C5

D4

P4

207
7

Linguagem de Definio de Dados (DDL)

Tipos de dados mais usuais:


- CHAR(n) ou CHARACTER(n): cadeia de caracteres de tamanho fixo,
com o tamanho n definido pelo usurio;
- VARCHAR(n): cadeia de caracteres de tamanho varivel, com o
tamanho mximo n definido pelo usurio;
- INT ou INTEGER: nmero inteiro, geralmente de -32768 a 32767;
- SMALLINT: nmero inteiro pequeno, geralmente de 0 a 65535;
- NUMERIC(t,d): nmero de ponto decimal fixo, que consiste de t dgitos
totais e d dgitos direita do ponto decimal, com t e d definidos pelo
usurio;
- REAL: nmero de ponto flutuante, geralmente de 1.17E-38 a 3.4E+38;
- DOUBLE PRECISION: nmero de ponto flutuante de dupla preciso,
geralmente de 2.2E-308 a 1.7E+308;
- FLOAT(n): nmero de ponto flutuante com a preciso n definida pelo
usurio;
- DATE: formato de data, contendo dia, ms e ano;
- TIME: formato de horrio, contendo horas, minutos e segundos.
8

Criao de uma tabela


Sintaxe:
CREATE TABLE nome_tabela
(nome_coluna tipo [NOT NULL] [SET DEFAULT valor],
.... ,
PRIMARY KEY (nome_colunas),
[UNIQUE (nome_coluna)],
[FOREIGN KEY (nome_coluna)
REFERENCES nome_tabela (nome_coluna)
ON DELETE CASCADE/SET NULL/SET DEFAULT
ON UPDATE CASCADE/SET NULL/SET DEFAULT ]
[CHECK condio])

Criao de uma tabela


Exemplo 1 : Criao da tabela Disciplina
CREATE TABLE Disciplina
( CodD

CHAR(5),

NomeD VARCHAR(20) NOT NULL,


CargaD

INTEGER NOT NULL,

AreaD

VARCHAR(20),

PreReqD CHAR(5),
UNIQUE (NomeD),

PRIMARY KEY (CodD)


CHECK CargaD > 0 AND CargaD <= 6)

10

Criao de uma tabela


Exemplo 2: Criao da tabela Grade
CREATE TABLE Grade
( CodC CHAR(5),
CodD CHAR(5),
CodP CHAR(5),
Sala INTEGER,
PRIMARY KEY (CodC, CodD, CodP),
FOREIGN KEY (CodC) REFERENCES Curso (CodC)
ON DELETE CASCADE,
FOREIGN KEY (CodD) REFERENCES Disciplina (CodD)
ON DELETE CASCADE,
FOREIGN KEY (CodP) REFERENCES Professor (CodP)
ON DELETE SET NULL)

OOOPS !!!

11

Alterao de uma tabela


Sintaxe:
ALTER TABLE nome_tabela
[ADD COLUMN nome_coluna tipo [NOT NULL] ]
[DROP COLUMN nome_coluna
[CASCADE/RESTRICT] ]
Exemplo : Adio da coluna MensC tabela
Curso

ALTER TABLE Curso


ADD COLUMN MensC NUMERIC(6,2);
12

Remoo de uma tabela


Sintaxe:
DROP TABLE nome_tabela
CASCADE/RESTRICT ;

13

Truncando uma tabela


Sintaxe:
TRUNCATE TABLE nome_tabela;

14

Criao e remoo de ndices


Sintaxe para criao:
CREATE INDEX nome_ndice
ON nome_tabela ( nome_coluna [ASC|DESC],...);
Exemplo : Criao de ndice sobre a coluna
CidadeP da tabela Professor
CREATE INDEX Xcidadeprof
ON Professor (CidadeP ASC);
Sintaxe para remoo:
DROP INDEX nome_ndice
15

Linguagem de Manipulao de Dados (DML)


Incluso de tuplas
Alterao de tuplas
Remoo de tuplas

Consultas ao banco

16

Incluso de tuplas em uma tabela


Sintaxe:
INSERT
INTO nome_tabela ( nome_coluna, .....)
VALUES (valor, ...)
Exemplo: Inserir a linha 1 da tabela Professor

INSERT
INTO Professor (CodP, NomeP, CidadeP, TituloP)
VALUES(P1', 'Joaquim', 'Rib Preto', 'Mestre')

17

Atualizao dos dados de uma tabela


Sintaxe:
UPDATE nome_tabela
SET nome_coluna = valor, .....
WHERE (condio de localizao)
Exemplo : Alterar o valor da mensalidade do
curso de Cincia da Computao para 650,00
UPDATE Curso
SET MensC = 650
WHERE(NomeC=CinciaComp)
18

Remoo de dados de uma tabela


Sintaxe:
DELETE FROM nome_tabela
WHERE (condio de localizao)
Exemplo 1 : Remover da tabela Professor todos
os professores que tm ttulo de Doutor
DELETE FROM Professor
WHERE (TituloP=Doutor)

19

Exerccios
Considere o esquema da Empresa:
Func (cod_func, nome, dta_nasc, salrio,
nro_depto, cod_superv)
Depto (nro_depto, nome, cod_ger)

Projeto (cod_proj, nome, durao,


nro_depto)
Participa (cod_proj, cod_func, horas_trab)
20

Exerccios
1. Criar a tabela Func1 e Projeto1 com o
mesmo layout das tabelas Func e Projeto.
2. Adicionar a coluna dta_inicio tabela
Projeto1.
3. Criar ndice para a o atributo dta_nasc da
tabela Func1.

4. Inserir valores na tabela Projeto1 e Func1.


5. Zerar a durao de todos os projetos do
depto 5.

6. Remover todas as participaes em projetos


do funcionrio 20.
7. Remover a tabela Projeto1 e Func1.

21

Conceito de Transao
Uma TRANSAO uma unidade de execuo
programada que acessa e provavelmente atualiza vrios
itens de dados.
Uma transao deve acessar uma base de dados
consistente.
Durante a execuo da transao possvel que a base de
dados passe por um estado de inconsistncia
Quando a transao confirmada (COMMIT), a base de
dados dever estar consistente.

O gerenciamento de transaes lida com 2 situaes


principais:
Falhas de vrios tipos: hardware, energia, travamento
de aplicaes, etc.
Execuo concorrente de mltiplas transaes
22

Propriedades ACID
Para preservar a integridade dos dados, o SGBD deve assegurar:
Atomicidade. Ou todas ou nenhuma das operaes da
transao sero devidamente refletidas na base de dados.
Consistncia. Aps a execuo de uma transao, a
base de dados dever retornar a um estado consistente
dos dados.

Isolamento. Apesar de mltiplas transaes poderem ser


executadas concorrentemente, cada uma delas dever
estar isolada dos efeitos da execuo das outras.
Resultados intermedirios de uma transao devero ficar
ocultos para as outras.
Durabilidade. Depois que uma transao termina com
sucesso, as alteraes que ela realizou sobre o bd
persistiro mesmo que haja falhas do sistema.
23

Controle de Transaes
Todas as transaes realizadas com o banco
devero ser confirmadas pelo usurio para que
sejam realmente efetivadas, ou ento
descartadas, caso o usurio deseje.
Para confirmar uma transao - ou um bloco de
transaes - utiliza-se o comando COMMIT.

Para descartar uma transao - ou um bloco de


transaes - utiliza-se o comando ROLLBACK.
O bloco de transaes definido a partir da ltima
ocorrncia de COMMIT, ou a partir do incio da
seo.
24

Comando SELECT
Sintaxe:
SELECT
[DISTINCT] nome_coluna,....
FROM nome_tabela, ....
[WHERE (condies) [ sub-select] ]
[GROUP BY nome_coluna, ....]
[HAVING (condies)]
[{INTERSECT | MINUS | UNION} comando_select]
[ORDER BY nome_coluna {ASC | DESC}, ....]

25

SELECT - Operadores
Aritmticos
Lgicos

AND

Relacionais

Conjunturais

IN

Conjuntos

UNION

OR

<>

<

<=

IS NULL

NOT

>

>=

ANY

INTERSECT

LIKE

BETWEEN

ALL

EXISTS
MINUS

26

SELECT Algumas Funes


Grupo

Agregao

Caracter

Nmeros

Data/Hora

Funo
AVG (col)
SUM (col)
MAX (col)
MIN (col)
COUNT
UPPER (col)
LOWER (col)
SUBSTR (col, pos, n)

Descrio
mdia dos valores da coluna
soma de valores da coluna
valor mximo da coluna
valor mnimo da coluna
total de tuplas
converte caracteres minsculos em maisculos
converte caracteres maisculos em minsculos
substring da coluna, iniciando em pos, com n caracteres

ROUND (col/const, n)
TRUNC (col/const, n)
ABS (col/const)
MONTH (data)
YEAR (data)
MINUTE (hora)
TO_CHAR (num/data)

arredondamento em n da coluna (ou da constante


truncamento em n da coluna (ou da constante)
valor absoluto da coluna ou da constante
ms da data
ano da data
minuto da hora
nmero (ou data) para caracter

TO_NUMBER (char)
TO_DATE (char)

caracter para nmero


caracter para data

Converses

SELECT Consulta Simples


Nomes das disciplinas:
SELECT NomeD

FROM Disciplina

NomeD
TLP1
Clculo1
Ingls
Ed Fsica
G Analtica
Projeto Final

28

SELECT Consultas Simples


Salas onde as aulas sero ministradas:

SELECT Sala
FROM Grade

Sala
305
305
305
201
204
204
207

29

SELECT Consultas Simples


Salas onde as aulas sero ministradas,
sem repetio:

SELECT DISTINCT Sala


FROM Grade

Sala
305
201
204
207

30

SELECT Consultas Simples


Nome e cdigo dos professores de
Ribeiro Preto:
SELECT NomeP, CodP
FROM Professor
WHERE CidadeP = 'Rib Preto'
NomeP
Joaquim
Andr

CodP
P1
P3
31

SELECT Consultas Simples


Todas as colunas da grade do curso C4:
SELECT *

FROM Grade
WHERE CodC = 'C4'
CodC
C4
C4

CodD
D1
D3

CodP
P5
P3

Sala
201
204

32

SELECT Uso de Operadores


Nome e durao em meses de cada curso:
SELECT NomeC, (DuracaoC * 12)

FROM Curso
NomeC
Anlise Sist
Eng Mecatrnica
Cincia Comp
Eng Eltrica
Turismo

DuracaoC * 12
48
60
60
60
36
33

SELECT Uso de Operadores


Nomes dos cursos cuja mensalidade
inferior a 500 reais:
SELECT NomeC
FROM Curso
WHERE MensC < 500

NomeC
Anlise Sist
Cincia
Comp
Turismo

34

SELECT Uso de Operadores


Cdigo e carga horria das disciplinas da
rea de Matemtica, com carga horria
maior ou igual a 5:
SELECT CodD, CargaD
FROM Disciplina
WHERE AreaD = 'Matemtica' AND
CargaD >= 5
CodD
D5

CargaD
5

35

SELECT Uso de Operadores


O cdigo e o nome de todos os cursos de
engenharia:
SELECT CodC, NomeC
FROM Curso
WHERE NomeC LIKE 'Eng%'
CodC
C2
C4

NomeC
Eng Mecatrnica
Eng Eltrica
36

SELECT Uso de Operadores


As salas do segundo andar (nro fica na casa
dos 200) onde sero ministradas aulas:
SELECT DISTINCT Sala
FROM Grade
WHERE TO_CHAR(Sala) LIKE '2__'

Sala
201
204
207

37

SELECT Uso de Operadores


Cdigo dos cursos cuja mensalidade est
entre 400 e 550 reais:
SELECT CodC
FROM Curso
WHERE MensC BETWEEN 400 AND 550
CodC
C1
C3

38

SELECT Uso de Operadores


Nome das disciplinas que so da rea de
Computao ou de Humanas ou de Sade:
SELECT NomeD
FROM Disciplina
WHERE AreaD IN ('Computao',
'Humanas', 'Sade')

NomeD
TLP1
Ingls
Ed Fsica

39

SELECT Uso de Operadores


Nome das disciplinas que no pertencem a
nenhuma rea especfica:
SELECT NomeD
FROM Disciplina
WHERE AreaD IS NULL
NomeD
Projeto Final

40

SELECT Uso de Alias


Nome e durao em meses de cada curso:
SELECT NomeC AS Curso,

(DuracaoC * 12) AS Durao_Meses


FROM Curso
Curso
Anlise Sist
Eng Mecatrnica
Cincia Comp
Eng Eltrica
Turismo

Duracao_Meses
48
60
60
60
36
41

SELECT Concatenao de campos


Cdigos dos cursos com seu nome e
mensalidade concatenados:
SELECT CodC,

NomeC || MensC || ' reais' AS Info_Curso


FROM Curso
CodC
C1
C2
C3
C4
C5

Info_Curso
Anlise Sist 400 reais
Eng Mecatrnica 600 reais
Cincia Comp 450 reais
Eng Eltrica 600 reais
Turismo 350 reais
42

SELECT Ordenao do resultado


Nomes dos cursos ordenados de forma
ascendente:
SELECT NomeC
FROM Curso
ORDER BY NomeC ASC

NomeC
Anlise Sist
Cincia Comp
Eng Eltrica
Eng
Mecatrnica
Turismo
43

Exerccios
Considere o esquema da Empresa:
Func (cod_func, nome, dta_nasc, salrio,
nro_depto, cod_superv)
Depto (nro_depto, nome, cod_ger)

Projeto (cod_proj, nome, durao, nro_depto)


Participa (cod_proj, cod_func, horas_trab)

44

Exerccios
1. Nome e salrio dos funcionrios do departamento 5.
2. Nome e salrio dos funcionrios do departamento 5,
com salrio na faixa entre 1000 e 2000.
3. Todas as informaes sobre projetos do departamento
5.

4. Salrio lquido (85% do salrio bruto) dos funcionrios


supervisionados pelo funcionrio 23.
5. Cdigo dos funcionrios que so supervisores.
6. Cdigo dos funcionrios que no tm supervisores.
7. Nome completo, em ordem alfabtica, dos funcionrios
que tm MAR no nome.
8. Nome, durao e depto dos projetos FATURAMENTO,
NTRANET e NOVOS PRODUTOS.

45

SELECT Funes
Valor mnimo, mximo e mdio das mensalidades
dos cursos cuja durao de 4 anos:
SELECT MIN(MensC), MAX(MensC), AVG(MensC)
FROM Curso
WHERE DuracaoC = 4
MIN(MensC)
400

MAX(MensC)
600

AVG(MensC)
483
46

SELECT - Agrupamentos
Carga horria total de cada rea:
SELECT AreaD, SUM(CargaD)

FROM Disciplina
GROUP BY AreaD
AreaD
SUM(CargaD)
Computao
2
Matemtica
9
Humanas
2
Sade
3
Null
6
47

SELECT - Agrupamentos
Salas que so utilizadas para mais de uma
aula e as respectivas quantidades de aulas:
SELECT Sala, COUNT(*)
FROM Grade
GROUP BY Sala
HAVING COUNT(*) > 1

Sala COUNT(*)
305
3
204
2

48

Exerccios
Considere o esquema da Empresa:
Func (cod_func, nome, dta_nasc, salrio,
nro_depto, cod_superv)
Depto (nro_depto, nome, cod_ger)

Projeto (cod_proj, nome, durao, nro_depto)


Participa (cod_proj, cod_func, horas_trab)

49

Exerccios
1. O maior e o menor salrio da
empresa.
2. O maior e o menor salrio de cada
depto.
3. O maior e o menor salrio dos deptos
cuja mdia salarial maior ou igual a
2000.
4. Total de horas trabalhadas de cada
projeto.
50

SELECT - Juno
Todas as informaes sobre a grade e as
disciplinas do curso C4:
SELECT *

FROM Grade, Disciplina


WHERE CodC = 'C4' AND
Disciplina.CodD = Grade.CodD
CodC CodD CodP Sala CodD NomeD CargaD AreaD
C4
D1
P5
201 D1
TLP1
2
Computao
C4
D3
P3
204 D3
Ingls
2
Humanas
51

SELECT Juno Natural


Todas as informaes sobre a grade e as
disciplinas do curso C4, sem repetio de
colunas:

SELECT *
FROM Grade NATURAL JOIN Disciplina
ON Grade.CodD = Disciplina.CodD
WHERE CodC = 'C4'
CodC CodD CodP Sala
C4
D1
P5
201
C4
D3
P3
204

NomeD CargaD AreaD


TLP1
2
Computao
Ingls
2
Humanas
52

SELECT - Juno
Cdigo, nome, carga horria, sala e curso das
disciplinas que esto na grade:
SELECT Grade.CodD, NomeD, CargaD, Sala, CodC

FROM Disciplina, Grade


WHERE Disciplina.CodD = Grade.CodD
CodD
D1
D2
D2
D3
D4
D4
D6

NomeD CargaD
TLP1
2
Clculo1 4
Clculo1 4
Ingls
2
Ed Fsica 3
Ed Fsica 3
Projeto Final 6

Sala
201
305
305
204
204
207
305

CodC
C4
C2
C3
C4
C5
C5
C1

53

SELECT - Juno
Nome das disciplinas e dos respectivos
professores do curso C4:
SELECT NomeD, NomeP

FROM Disciplina, Grade, Professor


WHERE CodC = 'C4' AND
Disciplina.CodD = Grade.CodD AND
Grade.CodP = Professor.CodP
NomeD
TLP1
Ingls

NomeP
Juliana
Andr
54

SELECT Auto-Juno
Nomes das disciplinas cujo pr-requisitoClculo1:
SELECT Disc1.NomeD
FROM Disciplina AS Disc1, Disciplina AS Disc2
WHERE Disc2.CodD = Disc1.PreReqD AND
Disc2.NomeD = Clculo1
Disc1.NomeD
LP1
G Analtica
55

SELECT Auto-Juno
Pares de professores que so da mesma cidade:
SELECT X.NomeP, Y.NomeP
FROM Professor AS X, Professor AS Y
WHERE X.CidadeP = Y.CidadeP AND
X.CodP <> Y.CodP
X.NomeP
Joaquim
Andr
Gil
Juliana

Y.NomeP
Andr
Joaquim
Juliana
Gil
56

Exerccios
Considere o esquema da Empresa:
Func (cod_func, nome, dta_nasc, salrio,
nro_depto, cod_superv)
Depto (nro_depto, nome, cod_ger)

Projeto (cod_proj, nome, durao, nro_depto)


Participa (cod_proj, cod_func, horas_trab)

57

Exerccios
1. Nomes dos deptos e nomes dos respectivos gerentes.
2. Nomes dos funcionrios que participaram de projetos
e respectivos cdigos dos projetos e horas
trabalhadas, somente das participaes que
excederam 50 horas.
3. Nomes dos funcionrios que participaram de projetos
e respectivos totais de horas trabalhadas.
4. Nomes de todos os funcionrios e respectivos totais
de horas trabalhadas.
5. Nomes dos funcionrios que participaram de projetos
e nomes dos respectivos projetos.

6. Nomes dos funcionrios e nomes dos respectivos


supervisores.
7. Pares de deptos que possuem o mesmo gerente.

58

SELECT - Subconsulta
Nome e rea das disciplinas do curso C4:
SELECT NomeD, AreaD

FROM Disciplina
WHERE CodD IN

NomeD
TLP1
Ingls

AreaD
Computao
Humanas

(SELECT CodD
FROM Grade

CodD
D1
D3

WHERE CodC = 'C4')


59

SELECT - Subconsulta
Nome das disciplinas que so ministradas
simultaneamente pelos professores P3 e P4:
SELECT NomeD
FROM Disciplina

NomeD
Ed Fsica

WHERE CodD IN
(SELECT CodD
FROM Grade

WHERE CodP = 'P3')

CodD
D3
D4

AND CodD IN
(SELECT CodD

FROM Grade

CodD
D4

WHERE CodP = 'P4')


60

SELECT - Exists
Nomes dos professores que ministram
alguma disciplina:
SELECT NomeP
FROM Professor
WHERE EXISTS
(SELECT *

NomeP
Joaquim
Paulo
Andr
Gil
Juliana

FROM Grade
WHERE Grade.CodP = Professor.CodP)
61

SELECT - Exists
Nomes das disciplinas que no fazem parte
da grade:
SELECT NomeD
FROM Disciplina

NomeD
G Analtica

WHERE NOT EXISTS


(SELECT *
FROM Grade
WHERE Grade.CodD = Disciplina.CodD)
62

SELECT - ALL
Nomes dos cursos que possuam durao maior
que todos os cursos de mensalidade inferior a 500
reais:

SELECT NomeC
FROM Curso

Nomec
Eng Mecatronica

WHERE DuracaoC > ALL


(SELECT DuracaoC
FROM Curso
WHERE MensC < 500)

DuracaoC
4
4
3
63

SELECT - ANY
Nomes dos cursos que possuam durao maior
que qualquer um dos cursos de mensalidade
inferior a 500 reais:
Nomec
SELECT NomeC
Anlise Sist
Eng Mecatrnica
FROM Curso
Cincia Comp
WHERE DuracaoC > ANY Eng Eltrica
(SELECT DuracaoC
FROM Curso
WHERE MensC < 500)

DuracaoC
4
4
3
64

Exerccios
Considere o esquema da Empresa:
Func (cod_func, nome, dta_nasc, salrio,
nro_depto, cod_superv)
Depto (nro_depto, nome, cod_ger)

Projeto (cod_proj, nome, durao, nro_depto)


Participa (cod_proj, cod_func, horas_trab)

65

Exerccios
1. Lista com nome e salrio dos funcionrios
cujo salrio maior que a mdia salarial da
empresa.
2. Cdigos dos projetos onde trabalharam
juntos os funcionrios 19 e 20.
3. Nomes dos funcionrios que no so
gerentes.

4. Cdigos dos projetos cuja durao foi


menor que a durao de todos os projetos
do depto 5.
5. Cdigos dos funcionrios que so
supervisores e so gerentes de depto.

66

Linguagem de Controle de Dados (DCL)


Comandos de administrao de acesso:
Grant
Revoke

Privilgios para cada usurio, de acesso


a um banco de dados, definidos para
diferentes operaes sobre o mesmo:

SELECT
INSERT
UPDATE
ALTER
etc
67

GRANT
Sintaxe:
GRANT privilgio(s)
ON objeto
TO usurio(s)
Exemplo: Liberar o acesso ao usurio Joao
para realizar consultas tabela Disciplina:
GRANT SELECT
ON Disciplina

TO Joao
68

GRANT
Permitir a todos os usurios realizar atualizaes das
colunas CidadeP e TituloP da tabela Professor:
GRANT UPDATE (CidadeP, TituloP)
ON Professor
TO PUBLIC
Permitir todos os privilgios na tabela Grade ao usurio
Joao, permitindo tambm que o mesmo possa liberar esses
privilgios a outros usurios:
GRANT ALL
ON Grade

TO Joao
WITH GRANT OPTION
69

REVOKE
Sintaxe:
REVOKE privilgio(s)
ON tabela ou viso
FROM usurio(s)
Exemplo: Retirar todos os privilgios na
tabela Grade para os usurios Joao e Paulo:
REVOKE ALL

ON Grade
FROM Joao, Paulo
70

VISES
Uma viso um objeto do Banco de Dados criado a partir
da execuo de uma consulta sobre outras tabelas
existentes.
Aps a sua criao, as consultas viso podem ser
realizadas de forma idntica s tabelas comuns do banco.
As vises podem ser muito teis em vrias situaes:
- substituio de consultas longas e complexas por
outras mais simples, obtendo-se o mesmo resultado;
- utilizao de funes de agregao na definio de
condies de pesquisa;
- delimitao prtica do acesso dos usurios a um
conjunto especfico dos dados contidos nas tabelas do
71
banco, tornando os outros inacessveis e invisveis;

CRIAO DE VISES
Sintaxe:
CREATE VIEW nome_viso [(nome_coluna, ...)]
AS SELECT ...
O comando SELECT de criao da viso no pode conter
a clusula ORDER BY.

Exemplo 1 : Viso para alunos consultarem os


dados dos cursos, sem mostrar os valores das
respectivas mensalidades
CREATE VIEW Vis_Curso_Aluno (Cdigo,
Curso, Durao)

AS SELECT CodC, NomeC, DuracaoC FROM


Curso
72

CRIAO DE VISES
Exemplo 2 : Viso para a secretria consultar
a grade de forma amigvel e e eficiente
CREATE VIEW Vis_Grade_Secr (Cod_Curso,
Curso, Cod_Disciplina, Disciplina,
Cod_Professor, Professor, Sala)
AS SELECT CodC, NomeC, CodD, NomeD,
CodP, NomeP, Sala

FROM Grade, Curso, Disciplina, Professor


WHERE Grade.CodC = Curso.CodC AND
Grade.CodD = Disciplina.CodD AND
Grade.CodP = Professor.CodP
73

ATUALIZAES ATRAVS DAS VISES


Os dados do banco podem ser atualizados atravs da
viso, ou seja, uma vez executado um comando INSERT,
UPDATE ou DELETE sobre a viso, os dados da tabela
que originou a mesma tambm sero atualizados.
Porm essas operaes somente podero ser realizadas
se a viso atender aos seguintes requisitos:
- no possuir junes, ou seja, ter sido criada sobre uma
nica tabela;
- no possuir colunas derivadas de funes de agregao;
- no possuir a clusula DISTINCT na sua consulta;

- no possuir as clusulas GROUP BY ou HAVING na sua


consulta.
74

ATUALIZAES ATRAVS DAS VISES


Caso contrrio, a viso ser "read-only" e
as atualizaes devero ser realizadas
sobre as tabelas originais.
A viso do exemplo 1 poder ser usada
para atualizar a tabela Curso, desde que o
usurio possua privilgios para isso.
Porm, a viso do exemplo 2 "read-only",
pois formada a partir de uma juno.

75

REMOO DE VISES
Sintaxe:
DROP VIEW nome_viso

Exemplo: Remover a viso


Vis_Curso_Aluno
DROP VIEW Vis_Curso_Aluno

76

Exerccios
Considere o esquema da Empresa:
Func (cod_func, nome, dta_nasc, salrio,
nro_depto, cod_superv)
Depto (nro_depto, nome, cod_ger)

Projeto (cod_proj, nome, durao, nro_depto)


Participa (cod_proj, cod_func, horas_trab)

77

Exerccios
1. Crie uma viso chamada Func_Proj, contendo o nome
do funcionrio, nome do seu departamento e nome
dos projetos que ele participou.
2. Crie um usurio chamado Pedro.
3. Crie privilgios para o usurio Pedro poder se
conectar, acessar recursos e consultar dados da viso
Func_Proj.
4. Crie privilgios para o usurio Pedro poder se inserir
dados na tabela Func, podendo repassar estes direitos.
5. Crie privilgios para que todos possam consultar a
coluna nome da tabela projeto.
6. Elimine todos os privilgios do usurio Pedro.
78

EXERCCIOS PROPOSTOS
1) Crie a tabela Aluno, contendo dados pessoais dos alunos e o
curso onde esto inscritos.
2) Crie a tabela Matricula, relacionando cada aluno com as
disciplinas que o mesmo j cursou ou est cursando.
3) Armazene, altere e remova dados das tabelas criadas.
4) Altere a tabela Disciplina, acrescentando uma coluna para
armazenar o cdigo da disciplina que pr-requisito da disciplina
corrente (suponha que uma disciplina possui no mximo um prrequisito).
5) Crie um ndice para a coluna Pre_req da tabela Disciplina.
6) Crie uma viso para a consulta dos alunos ao seu histrico.
7) Crie privilgios para o usurio Slvio poder consultar e inserir
dados na tabela Matricula.
8) Elimine todos os privilgios do usurio Slvio.

79

EXERCCIOS PROPOSTOS
9) Crie as seguintes consultas em SQL:
a) Cdigo e nome das disciplinas com carga horria entre 3 e 5
inclusive e que no sejam da rea de Sade.
b) Nome das disciplinas com carga horria menor que 5 e que
sejam ministradas por professores doutores.
c) Salas onde haver aulas cujos cursos possuam durao
superior a 3 anos e cujas disciplinas no sejam nem da rea
de Matemtica, nem de Sade e nem de Humanas e cujo
professor seja o Paulo, o Joaquim ou a Juliana.
d) Nome dos cursos e das disciplinas oferecidas em cada curso.
e) Nomes dos professores que no ministram nenhuma
disciplina.

f) Nomes das disciplinas e o nome dos respectivos prrequisitos. Considere a tabela Disciplina resultante do
exerccio 4.
80

EXERCCIOS PROPOSTOS
g) Nome das disciplinas que possuam carga horria maior que
todas as disciplinas da rea de Matemtica.
h) Cdigo de cada disciplina, com a quantidade de cursos em
que a mesma oferecida.

i) Carga horria mdia das reas com carga horria mdia


maior ou igual a 3.
j) Nome das disciplinas que no tm pr-requisito e que no so
pr-requisito.

k) Nome dos cursos que tm a mesma durao do curso de


Engenharia Eltrica.
l) Nome dos cursos que tm a mesma durao do curso de
Engenharia Eltrica e que tm mensalidade maior que a sua.
m) Nome dos cursos que tm mensalidade maior que a mdia
de todos os cursos.
81

Das könnte Ihnen auch gefallen