Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

SQL - DML
 Comandos DML da linguagem SQL
– INSERT
– UPDATE
– DELETE
SQL – Inserir registos
 INSERT INTO <nome da tabela> [(coluna1, coluna2,...)]
VALUES (valor1, valor2, ...);
 Exemplos:
Insert into album
Values (964,’Broken Bells’,523,’./media/2007 – Broken 
Bells/Cover.jpg’)
 Pode inserir-se um registo de cada vez ou um conjunto deles 
(quando se indica os valores explicitamente no comando)
 Pode omitir-se a lista de nomes de colunas desde que se 
respeite a ordem das colunas definida na tabela e não se omita 
nenhum valor
 Pode inserir-se apenas alguns campos de um registo
SQL – Inserir registos
 INSERT INTO <nome da tabela> [(coluna1, coluna2,...)]
SELECT (lista)
FROM <tabela(s)>
WHERE <condição>;
 Exemplo:
Insert into album (titulo,artista)
Select (nomealbum,idartista)
From albuns_emprestados
Where nome_artista=‘Broken Bells’;
 O número de itens na lista do SELECT tem de ser igual ao 
número de colunas referidas no comando INSERT 
SQL – Actualizar registos
 UPDATE <nome da tabela> [pseudónimo]
SET coluna = (valor, expressão,..),
coluna = (valor, expressão,..), ....
WHERE <condição>;
 Exemplo:
Update faixas, artista
Set faixas.bitrate=320
Where faixas.artista=artista.artista_id and artista.nome=‘Broken Bells’
 Se a cláusula WHERE for omitida todos os registos da tabela 
são actualizados.
 Os valores a actualizar podem ser o resultado de subconsultas
ou expressões.
SQL – Apagar registos
 DELETE FROM <nome de tabela>
WHERE <condição>;
 Exemplo:
 Delete From faixas
 Where genero=25
 Se a cláusula WHERE for omitida todos os registos da tabela 
são apagados.
SQL – Preservação de integridade
 Restrições de integridade são definidas
– na criação de tabelas;
– na alteração de tabelas.
 Restrições de integridade são verificadas na execução de
– INSERT;
– UPDATE;
– DELETE.
SQL – Violação de integridade
CREATE TABLE ALUNO
(A_NUM NUMBER(4) PRIMARY KEY,
NOME CHAR(60) NOT NULL,
END CHAR(120),
TEL NUMBER(8),
BI NUMBER(4) UNIQUE);
CREATE TABLE DISCIPLINA
(NOME CHAR(60) UNIQUE,
D_CODIG CHAR(6) PRIMARY KEY,
ANO NUMBER(1) CHECK ((ANO >= 1) AND (ANO <= 5)),
SEM NUMBER(1) CHECK (SEM IN (1,2)));
CREATE TABLE A_D
(A_NUM NUMBER(4),
D_CODIG CHAR(6),
EPOCA CHAR(6),
NOTA NUMBER(2) CHECK ((NOTA >= 0) AND (NOTA <= 20)),
CONSTRAINT A_D_CE1 FOREIGN KEY (A_NUM) REFERENCES ALUNO (A_NUM),
CONSTRAINT A_D_CE2 FOREIGN KEY (D_CODIG) REFERENCES DISCIPLINA
SQL – Violação de integridade
INSERT INTO A_D
VALUES ( 1004, ‘ELEC’, ‘Julho’, 12);
INSERT INTO ALUNO
VALUES (1002, ‘A. Cavaco’, ‘R. de Baixo, 
23’, 987654)
INSERT INTO A_D
VALUES ( 1002, ‘ALGB’, ‘Set’);
INSERT INTO DISCIPLINA
VALUES ( ‘Física’, ‘FISC’, 0, 1);
Erro: viola a integridade referencial pois 
um valor numa de chave externa -
1004 - não tem correspondência na 
tabela de referência – Aluno -
Erro: viola restrição de chave única na 
coluna BI
Correcto, apesar de NOTA ficar a Null
Erro: viola teste de integridade na coluna 
Ano
SQL – Violação de integridade
UPDATE ALUNO
SET NOME = ‘D. Mendes’,
A_NUM = 1006
WHERE A_NUM = 1008;
UPDATE A_D
SET D_CODG = ‘ELEC’,
NOTA = 14
WHERE A_NUM=1008;
DELETE FROM ALUNO
WHERE A_NUM = 1008;
Erro: viola a integridade referencial pois altera 
dado de referência correspondente à chave 
externa A_NUM da tabela A_D
Correcto, pois a chave externa D_CODG é 
alterada mas mantem um valor que existe 
na tabela Disciplina
Erro: viola a integridade referencial pois há 
dados dependentes do registo a apagar na 
tabela A_D
SQL – Violação de integridade
 Regras para a manipulação de dados na tabela de referência e 
as acções a desencadear sobre os dados dependentes:
– RESTRICT 
 Não é permitido actualizar ou apagar dados de referência.
– SET TO NULL 
 Se os dados de referência são apagados todos os dados dependentes 
ficam a Null.
– SET TO DEFAULT
 Idem, com a excepção de que os dados dependentes ficam com um 
valor por defeito.
– CASCADE 
 Quando os dados de referência são alterados todos os dados 
dependentes são actualizados.
SQL – Violação de integridade
 Exemplo
CREATE TABLE A_D (
A_NUM NUMBER(4),
D_CODIG CHAR(6),
EPOCA CHAR(6),
NOTA NUMBER(2) CHECK ((NOTA >= 0) AND (NOTA <= 20)),
CONSTRAINT A_D_CP PRIMARY KEY (A_NUM, D_CODIG, EPOCA), CONSTRAINT 
A_D_CE1 FOREIGN KEY (A_NUM) REFERENCES ALUNO (A_NUM) ON DELETE 
CASCADE,
CONSTRAINT A_D_CE2 FOREIGN KEY (D_CODIG) REFERENCES DISCIPLINA 
(D_CODIG) ON DELETE CASCADE;
SQL – Subconsultas
LMD do SQL
Comandos de Manipulação de dados do SQL 
Subconsultas -Subquery 
Operando escalar
ANY, IN, SOME, ALL
Vectores
Exists
Comparações usando Subconsultas
Subconsultas correlacionadas
SubConsultas na cláusula FROM
Joins como alternativa
SQL – Subconsultas
 Subconsultas – SubQuery
 Uma das pesquisas mais comuns é encontrar, por exemplo, 
dados de empregado que possui maior salário.
 Para obter essa informação é preciso fazer duas coisas: 
– primeiro, determinar qual é o maior salário da empresa
– seleccionar o empregado com o salário igual a esse valor. 

 Este problema e toda a sua classe de problemas (encontrar a 
informação em dois ou mais passos) resolve-se com uma 
técnica chamada subconsulta (Comando SELECT dentro de 
comando SELECT)
 .
SQL – Subconsultas
 Sintaxe de Subconsultas 
 SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);
 Cláusula/Consulta externa (outer query (or outer
statement)) 
 -> SELECT * FROM t1 WHERE column1
 Consulta interna / Sub Consulta (subquery) 
 -> SELECT column1 FROM t2
SQL – Subconsultas
 Subconsultas – Exemplo 
 Utilização da sintaxe de acordo com o SQL standard (suportado MySQL) 
 DELETE 
 FROM t1
 WHERE s11 > ANY
 (SELECT COUNT(*) /* no hint */ 
 FROM t2
 WHERE NOT EXISTS
 (SELECT * 
 FROM t3
 WHERE ROW(5*t2.s1,77)=
 (SELECT 50,11*s1 
 FROM t4 UNION SELECT 50,77 FROM
 (SELECT * FROM t5) AS t5)));
SQL – Subconsultas
 RESTRIÇÕES na utilização de subconsultas 
– (VER Section F.3, “Restrictions on Subqueries”)
 Uma subconsulta pode conter qualquer cláusula típica do 
comando 
 - SELECT: 
 - DISTINCT, 
 - GROUP BY, 
 - ORDER BY, 
 - LIMIT, 
 - UNION constructs,
 - JOINS
SQL – Subconsultas
 RESTRIÇÃO 1:
– consulta externa deve ser um dos comandos: 
 - SELECT, 
 - INSERT, 
 - UPDATE, 
 - DELETE, 
 - SET, ou 
 - DO.
SQL – Subconsultas
 RESTRIÇÃO 2
– Não se deve modificar uma tabela que está a ser alvo de uma 
subconsulta. Esta restrição aplica-se a comandos como:
 - DELETE, 
 - INSERT, 
 - REPLACE, 
 - UPDATE, 
 - LOAD DATA INFILE
SQL – Subconsultas
 VANTAGENS das subconsultas
 Permite a utilização de comandos estruturados de forma que é 
possível isolar cada parte da comando
 Funciona como uma alternativa à realização de operações que 
requerem junções e uniões complexas
 Sintaxe mais amigável que a de junções e uniões
SQL – Subconsultas
 RESULTADOS das subconsultas
 operando escalar (um valor único) – Scalar subqueriy
 operando vectorial
– uma linha– row subquer
– uma coluna – column subquery
 operando matricial 
– tabela - uma ou mais linhas para uma ou mais coluna – Table
subquery
SQL – Subconsultas
Subconsulta como OPERANDO escalar – Exemplo 
 
CREATE TABLE t1 (s1 INT, s2 CHAR(5) NOT NULL); 
INSERT INTO t1 VALUES(100, 'abcde'); 
 
Tabela t1 
S1 S2 
100 abcde 
 
Commando: 
SELECT (SELECT s2 FROM t1) 
 
Resultado: 
S2 
abcde 
 
SQL – Subconsultas
 Utilização de Subconsultasem comparações
– Forma mais utilizada de subqueries
 non_subquery_operand comparison_operator (subquery)
 operando_não_subquery operador_de_comparação (subquery)
 Operadores de comparação: 
 = 
 > 
 < 
 >=
 <= 
 <>
SQL – Subconsultas
 Utilização de SubConsultas em comparações - EXEMPLOS
'a' = (SELECT column1 FROM t1)
 Originalmente esta era a forma permitida de utilização de 
subconsultas. Actualmente os SGBD permitem outras utilizações.
 Utilização de SubConsultas em comparações – EXEMPLOS
 Encontrar valores numa tabela t1 que sejam iguais ao valor máximo 
da tabela t2 (impossível de conseguir com Joins)

 SELECT column1 FROM t1
 WHERE column1 = (SELECT MAX(column2) FROM t2);
SQL – Subconsultas
 Utilização de SubConsultas em comparações – EXEMPLOS
 Encontrar todos os registos numa tabela t1 que tenham um valor que 
ocorra 2 vezes numa dada coluna (Subconsulta correlacionada 
(selfjoin)
 SELECT * FROM t1 AS t
 WHERE 2 = (SELECT COUNT(*) FROM t1 WHERE t1.id = t.id);
SQL – Subconsultas
 UTILIZAÇÃO de Subqueryies – subconsultas simples e 
subconsultas correlacionada
 –> subconsultas simples 
 Uma subconsulta simples é uma consulta dentro de outra consulta em 
que os resultados da consulta interna vão influenciar os da externa. 
 Numa subconsulta simples o SELECT interno é executado primeiro e 
o(s) seu(s) valor(es) é/são passado(s) para o SELECT externo para 
efeitos de teste. 
 O SELECT interno pode representar por si só uma consulta bastante 
complicada, fazendo uso das cláusulas WHERE, GROUP BY e HAVING
 –> subconsultas correlacionada
 A consulta externa influencia a consulta interna
SQL – Subconsultas
 Exemplo:
– Quais os empregados com salário superior à média dos salários do seu 
departamento. 
SELECT nemp, nome, sal, ndep
FROM emp e
WHERE sal > (SELECT avg(sal)
FROM emp
WHERE ndep = e.ndep)
ORDER BY ndep, sal DESC;
– A subconsulta é correlacionada porque o SELECT interno usa a informação 
e.ndep proveniente do SELECT externo para saber sobre que pessoas 
calcular a média (as do mesmo departamento).
– (Obs. Tente fazer o mesmo sem subconsulta correlacionada)
Resultado 
NEMP NOME SAL NDEP 
1839 Jorge Sampaio 890000 10 
1788 Maria Dias 565000 20 
1566 Augusto Reis 450975 20 
1902 Catarina Silva 435000 20 
1698 Duarte Guedes 380850 30 
1654 Ana Rodrigues 221250 30 
1521 Nelson Neves 212250 30 
 
SQL – Subconsultas
 Exemplo:
– Listar cada Instituição, com referência ao curso com melhor nota do último 
colocado e qual foi essa nota:

SELECT a.Instituicao, tblCursos.Curso, NotaUltimoColocado
FROM tblConcursos, tblEscolas, tblCursos, tblInstituicoes a, tblCursoConcurso
WHERE tblConcursos.CodigoLinha = tblCursoConcurso.CodLinha
AND tblCursoConcurso.CodCurso = tblCursos.CodigoCurso
AND tblCursos.Escola = tblEscolas.CodEscola
AND tblEscolas.Instituicao = a.CodInstituicao
AND NotaUltimoColocado = ( SELECT max( NotaUltimoColocado ) 
FROM tblConcursos, tblEscolas, tblCursos, tblInstituicoes b, tblCursoConcurso
WHERE tblConcursos.CodigoLinha = tblCursoConcurso.CodLinha
AND tblCursoConcurso.CodCurso = tblCursos.CodigoCurso
AND tblCursos.Escola = tblEscolas.CodEscola
AND tblEscolas.Instituicao = b.CodInstituicao
AND a.CodInstituicao = b.CodInstituicao
GROUP BY b.Instituicao );
SQL – Subconsultas
 Operador EXISTS
– Para além dos operadores lógicos e operadores SQL, é frequente aparecer 
nas subconsultas correlacionadas o operador EXISTS.
– O operador EXISTS devolve verdade se a subconsulta produzir uma ou 
mais linhas e devolve falso caso contrário. Obviamente, se a consulta não 
fosse correlacionada, o SELECT interno seria executado apenas uma vez, e 
assim o seu valor seria o mesmo para todos os registos do SELECT 
externo.
 Tradicionalmente, uma subconsulta com EXISTS inicia-se com 
SELECT *, mas qualquer outra projecção para além de * seria 
irrelevante, pois o MySQL ignora a lista numa subconsulta com 
EXISTS.
SQL – Subconsultas
 Exemplo:
 Quais os departamentos nos quais existem empregados?
SELECT *
FROM dep d
WHERE EXISTS (SELECT *
FROM emp
WHERE ndep = d.ndep);
Resultado 
NDEP NOME LOCAL 
10 Contabilidade Condeixa 
20 Investigação Mealhada 
30 Vendas Coimbra 
 
SQL – Subconsultas
 O operador NOT continua a poder ser aplicado.
 Exemplo:
 Quais os departamentos nos quais não existem quaisquer 
empregados?
SELECT *
FROM dep d
WHERE NOT EXISTS (SELECT *
FROM emp
WHERE ndep = d.ndep);

Mais conteúdos dessa disciplina