Beruflich Dokumente
Kultur Dokumente
SQL
Manipulao e controle de bancos de
dados relacionais
Acesso ao banco de dados:
Ambiente interativo de consultas
Embutida em linguagens hospedeiras
Recursos:
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
CHAR(5),
AreaD
VARCHAR(20),
PreReqD CHAR(5),
UNIQUE (NomeD),
10
OOOPS !!!
11
13
14
Consultas ao banco
16
INSERT
INTO Professor (CodP, NomeP, CidadeP, TituloP)
VALUES(P1', 'Joaquim', 'Rib Preto', 'Mestre')
17
19
Exerccios
Considere o esquema da Empresa:
Func (cod_func, nome, dta_nasc, salrio,
nro_depto, cod_superv)
Depto (nro_depto, nome, cod_ger)
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.
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.
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.
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.
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
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)
TO_NUMBER (char)
TO_DATE (char)
Converses
FROM Disciplina
NomeD
TLP1
Clculo1
Ingls
Ed Fsica
G Analtica
Projeto Final
28
SELECT Sala
FROM Grade
Sala
305
305
305
201
204
204
207
29
Sala
305
201
204
207
30
CodP
P1
P3
31
FROM Grade
WHERE CodC = 'C4'
CodC
C4
C4
CodD
D1
D3
CodP
P5
P3
Sala
201
204
32
FROM Curso
NomeC
Anlise Sist
Eng Mecatrnica
Cincia Comp
Eng Eltrica
Turismo
DuracaoC * 12
48
60
60
60
36
33
NomeC
Anlise Sist
Cincia
Comp
Turismo
34
CargaD
5
35
NomeC
Eng Mecatrnica
Eng Eltrica
36
Sala
201
204
207
37
38
NomeD
TLP1
Ingls
Ed Fsica
39
40
Duracao_Meses
48
60
60
60
36
41
Info_Curso
Anlise Sist 400 reais
Eng Mecatrnica 600 reais
Cincia Comp 450 reais
Eng Eltrica 600 reais
Turismo 350 reais
42
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)
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.
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)
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 *
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
SELECT - Juno
Cdigo, nome, carga horria, sala e curso das
disciplinas que esto na grade:
SELECT Grade.CodD, NomeD, CargaD, Sala, CodC
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
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)
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.
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
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
CodD
D3
D4
AND CodD IN
(SELECT CodD
FROM Grade
CodD
D4
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
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
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)
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.
66
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.
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
75
REMOO DE VISES
Sintaxe:
DROP VIEW nome_viso
76
Exerccios
Considere o esquema da Empresa:
Func (cod_func, nome, dta_nasc, salrio,
nro_depto, cod_superv)
Depto (nro_depto, nome, cod_ger)
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.