Académique Documents
Professionnel Documents
Culture Documents
Linguagem SQL
4.1 Introduo
O modelo relacional encontra-se padronizado pela
indstria de informtica. Ele chamado de padro
SQL (Structured Query Language).
O padro SQL define precisamente uma interface
SQL para a definio de tabelas, para as operaes
sobre as mesmas (seleo, projeo, juno, e
outras) e para a definio de regras de integridade
de bancos de dados.
A interface SQL , portanto, implementada em
todos os sistemas de bancos de dados relacionais
existentes.
Por qu a indstria tem interesse em padronizar os
sistemas de bancos de dados? A razo muito
simples: a existncia de padres facilita a
interoperabilidade (comunicao entre mquinas,
entre programas).
4.1 Introduo
Como vimos, um SGBD possui duas linguagens:
DDL: Linguagem de Definio de Dados. Usada para
definir os esquemas, atributos, vises, regras de
integridade, ndices, etc.
DML: Linguagem de Manipulao de Dados. Usada
para se ter acesso aos dados armazenados no BD.
Sintaxe:
Sintaxe:
DROP TABLE <nomeTabela>
Ex.:
DROP TABLE Peca
4.2 SQL - DDL
Especificando ndices em SQL
- SQL possui comandos para criar e remover ndices em atributos
de relaes base (faz parte da SQL DDL)
- Um ndice uma estrutura de acesso fsico que especificado
em um ou mais atributos de um arquivo, permitindo um acesso
mais eficiente aos dados.
- Se os atributos usados nas condies de seleo e juno de
uma query so indexados, o tempo de execuo da query
melhorado.
- O Oracle cria automaticamente ndices em chaves primrias e
colunas com UNIQUE
4.2 SQL - DDL
Ex.: Criar um ndice no atributo nome da relao
Empregado.
Esquemas do BD Empresa:
Empregado(matricula, nome, endereco,
salario, supervisor, depto)
Departamento(coddep, nome, gerente,
dataini)
Projeto(codproj, nome, local, depart)
Alocacao(matric,codigop, horas)
4.3 SQL - DML
SQL interativo
As operaes de manipulao sem cursor so:
SELECT, INSERT, UPDATE, DELETE
O comando Select:
A forma bsica do comando Select :
SELECT matricula
FROM Empregados
4.3 SQL - DML: Exemplos
Q6. Faa o produto cartesiano, seguido de projeo
de Empregados X Departamento retornando a
matrcula do empregado e o nome do departamento
SELECT matricula, d.nome
FROM Empregado, Departamento d
SELECT e.nome
FROM empregado e, dependente d
WHERE e.matricula = d.matricula and
e.nome = d.nome and e.sexo = d.sexo
4.3 SQL - DML: Exemplos
A construo EXISTS
usada para verificar se o resultado de uma
consulta aninhada vazia ou no. sempre usado
em conjunto com um query aninhada.
A construo exists retorna o valor true se o
argumento da subquery no vazio.
exists r r
not exists r r =
4.3 SQL - DML: Exemplos
A construo EXISTS
A consulta Q13 poderia ser:
SELECT e.nome
FROM empregado e
WHERE EXISTS (SELECT *
FROM dependente
WHERE e.matricula = matricula
and e.nome = nome and e.sexo = sexo)
SELECT mat
FROM empregado e
WHERE NOT EXISTS (
( SELECT codproj FROM alocacao WHERE mat = 800)
EXCEPT
( SELECT codproj FROM alocacao a WHERE a.mat = e.mat)
)
Note que X Y = X Y
OBS.: No Oracle o operador diferena minus
4.3 SQL - DML: Exemplos
Podemos verificar valores nulos atravs de IS
NULL e IS NOT NULL:
Q17. Selecione os nomes de todos os
empregados que no tm supervisores
SELECT nome
FROM empregado
WHERE supervisor IS NULL
4.3 SQL - DML: Exemplos
Funes
SQL fornece 5 funes embutidas:
COUNT: retorna o nmero de tuplas ou valores
especificados numa query
SUM: retorna a soma os valores de uma coluna
AVG: retorna a mdia dos valores de uma coluna
MAX: retorna o maior valor de uma coluna
MIN: identifica o menor valor de uma coluna
SELECT e.nome
FROM empregado e
WHERE (SELECT COUNT(*)
FROM Dependente d
WHERE e.matricula = d.matricula) >= 2)
4.3 SQL - DML: Exemplos
Ex.: Uso da funo max numa query dentro
de um SELECT de outra query:
Ex.:
y BETWEEN x AND Z equivale a x <= y <= z
Ex.
Exemplo
4
(5 = all 5 ) = false
4
(5 all 6 ) = true (since 5 4 and 5 6)
Definio de ANY (SOME)
F <comp> some r t r s.t. (F <comp> t)
Where <comp> can be:
0
(5< some 5 ) = true
(l-se: 5 < alguma tupla na relao)
6
0
(5< some 5 ) = false
0
(5 = some 5 ) = true
0
(5 some 5 ) = true (uma vez que 0 5)
4.3 SQL - DML: Exemplos
Quantificadores
Exemplo com agrupamento
Quais departamentos tm mais empregados?
SELECT depto
FROM empregado
GROUP BY depto
HAVING COUNT(*) >= ALL
(SELECT COUNT(*)
FROM empregado GROUP BY depto)
4.3 SQL - DML: Exemplos
Quantificadores
Exemplo com agrupamento
Quais empregados no ganham o menor salrio
pago pela empresa?
SELECT mat
FROM empregado
WHERE salario > ANY
(SELECT salario FROM empregado)
4.3 SQL - DML: Exemplos
Quantificadores
Exemplo com agrupamento
Quais empregados no ganham o menor salrio?
SELECT matricula
FROM empregado
WHERE salario > ANY
(SELECT salario FROM empregado)
Juno em SQL:1999
Vimos como fazer juno em SQL-92. O padro
SQL:1999 (e o 92) especifica vrios tipos de juno:
Clssica (tabelas separadas por vugulas como vimos)
cross-joins
natural joins
conditions joins
column name join
outer joins (left, right, ou full)
Expresses Baseadas em Juno
H vrias maneiras possveis
Podem ser usadas ou stand-alone (em lugar de um select-
from-where) ou para definir uma relao na clusula FROM.
R NATURAL JOIN S
R JOIN S ON condition
i.e., condition: R.B=S.B
R OUTER JOIN S
R CROSS JOIN S
SELECT *
FROM T1 NATURAL JOIN T2
Junes
SELECT *
FROM T1 CROSS JOIN T2
Junes
Exemplos: Condition Join
usa a clusula ON para especificar a condio de
juno
SELECT *
FROM T1 JOIN T2
ON T1.C1 = T2.C1
equivalente a:
SELECT *
FROM T1, T2
WHERE T1.C1 = T2.C1
Junes
Exemplos: Column name Join
deixa claro quais colunas vo participar da juno
(vimos que natural join usa todas as colunas com
mesmo nome das relaes envolvidas)
SELECT *
FROM T1 JOIN T2
USING (c1, c2)
Junes
Exemplos: Outer Join
preserva no resultado valores que no casam com
Motivao: as vezes precisamos mostrar estes
valores que no casam
ex. Tabelas empregado e departamento onde o
cdigo do departamento em empregado chave
estrangeira, portanto, pode haver valores nulos.
Se quisermos uma lista de todos os empregados
com os nomes dos respectivos departamentos,
usando uma juno natural eliminaria os
empregados sem departamento (com valores
null)
Junes
Exemplos: Left Outer Join
C1 C2 C3 C4 C1 C2 C3 C4
10 15 10 BB
10 15 10 BB
20 25 Null Null
20 25 15 DD
SELECT *
FROM T1 LEFT OUTER JOIN T2
ON T1.C1 = T2.C3
Junes
Exemplos: Right Outer Join
SELECT *
FROM T1 RIGHT OUTER JOIN T2
ON T1.C1 = T2.C3
Junes
Exemplos: Full Outer Join
SELECT *
FROM T1 FULL OUTER JOIN T2
ON T1.C1 = T2.C3
A clusula With
Permite vises serem definidas localmente a uma
query, ao invs de globalmente como veremos
adiante.
Ex.: Mostre os funcionrios que ganham o maior
salrio
WITH max-sal(sal) as
SELECT MAX(salario)
FROM empregado
SELECT mat
FROM empregado e, max-sal m
WHERE e.salario = m.sal
Relaes derivadas
No SQL:1999
SELECT depto
FROM
(SELECT depto, AVG(salario)
FROM empregado
GROUP BY depto) resultado(depto, media)
WHERE media > 100;
No Oracle:
SELECT depto
FROM
(SELECT depto, AVG(salario) as media
FROM empregado
GROUP BY depto) Resultado
WHERE Resultado.media > 100;
4.3 SQL - DML: Exemplos
O comando INSERT
Usado para adicionar uma tupla a uma relao
Sintaxe:
INSERT INTO tabela [ (lista colunas) ] fonte
Onde fonte pode ser uma especificao de pesquisa
(SELECT) ou uma clusula VALUES da forma:
VALUES (lista de valores atmicos)
UPDATE Departamento
SET nome=Informatica
WHERE nome=Computao
UPDATE Empregado
SET salario=salario*1.1
WHERE depto in (SELECT coddep
FROM Departamento
WHERE nome=Pesquisa)
4.3 SQL - DML: Exemplos
O comando CASE
Permite mudar o valor de um dado, por exemplo,
poderiamo ter codificado o atributo sexo como 1 =
masculino, 2 = feminino, 0 = indefinido , e ento
ao fazermos um select queremos expressar os valores
por extenso ao invs de usar cdigo.
Exemplo:
CREATE VIEW nomeViso AS expresso_de_consulta
SELECT nomeE
FROM Alocacao1
WHERE nomeP = Informatizacao
4.4 Vises
Ex.2: Criar uma viso que contm
informaes gerenciais sobre um
departamento, contendo o nome do depto,
total de empregados e total de salrios.
Ex.:
DROP VIEW Alocacao1
UPDATE Projeto
SET nome = ProdutoX
=> Como o SGBD vai WHERE
escolhernome
qual=UPDATE
ProdutoYcomputar?
4.4 Vises
Considere a viso alocao1 se tentarmos fazer:
INSERT INTO Alocacao1
VALUES (Jos, SIG, 10)
Ex.:
UPDATE InfoDepto
SET totsal = 10.000
WHERE nomed = Pesquisa
4.4 Vises
Observaes:
1) Uma viso definida numa nica tabela atualizvel
se os atributos da viso contm a chave primria.