Adbd0305 SQLDML
Adbd0305 SQLDML
Pág. 1 De 39
SQL (Structured Query Language)
Inserção de Dados
➢ A tabela recém-criada não contém dados
➢ A primeira ação a ser realizada para o banco de dados ter utilidade é
inserir dados
➢ Conceitualmente, os dados são inseridos uma linha de cada vez
➢ É claro que é possível inserir mais de uma linha, mas não existe maneira
de inserir menos de uma linha por vez
➢ Mesmo que se conheça apenas o valor de algumas colunas, deve ser
criada uma linha completa
Pág. 2 De 39
SQL (Structured Query Language)
Qual o comando para Inserir Dados?
➢ Para criar uma linha é utilizado o comando INSERT
➢ Este comando requer o nome da tabela, e um valor para cada coluna da
tabela. Por exemplo, considere a tabela produtos:
CREATE TABLE produtos (
cod_prod integer,
nome text,
preco numeric
);
➢ Um exemplo de comando para inserir uma linha é:
INSERT INTO produtos VALUES (1, 'Queijo', 9.99);
Pág. 3 De 39
SQL (Structured Query Language)
Inserção de Dados
➢ Os valores dos dados são colocados na mesma ordem que as colunas se
encontram na tabela, separados por vírgula
➢ Geralmente os valores dos dados são literais (constantes), mas também
são permitidas expressões escalares
➢ A sintaxe anterior tem como desvantagem ser necessário conhecer a
ordem das colunas da tabela
➢ Para evitar isto, as colunas podem ser relacionadas explicitamente.
Exemplo:
INSERT INTO produtos (cod_prod, nome, preco) VALUES (1, 'Queijo',
9.99);
INSERT INTO produtos (nome, preco, cod_prod) VALUES ('Queijo', 9.99,
1);
➢
Pág. 4 De 39
SQL (Structured Query Language)
Inserção de Dados
➢ Muitos usuários consideram boa prática escrever sempre os nomes das
colunas
➢ Se não forem conhecidos os valores de todas as colunas, as colunas com
valor desconhecido podem ser omitidas
➢ Neste caso, estas colunas são preenchidas com seu respectivo valor
padrão. Por exemplo:
INSERT INTO produtos (cod_prod, nome)
VALUES (1, 'Queijo');
INSERT INTO produtos VALUES (1, 'Queijo');
Pág. 5 De 39
SQL (Structured Query Language)
Inserção de Dados
➢ A segunda forma é uma extensão do PostgreSQL, que preenche as
colunas a partir da esquerda com quantos valores forem fornecidos, e as
demais com o valor padrão
➢ Para ficar mais claro, pode ser requisitado explicitamente o valor padrão
da coluna individualmente, ou para toda a linha:
INSERT INTO produtos (cod_prod, nome, preco) VALUES (1, 'Queijo',
DEFAULT);
INSERT INTO produtos DEFAULT VALUES;
➢ Dica: Para realizar "cargas volumosas", ou seja, inserir muitos dados,
consulte o comando COPY. Este comando não é tão flexível quanto o
comando INSERT, mas é mais eficiente.
➢
➢
Pág. 6 De 39
SQL (Structured Query Language)
Como funciona a consulta de dados?
➢ A consulta é realizada pelo comando SELECT
➢ A forma básica do SELECT é:
SELECT <lista de atributos>
FROM <lista de tabelas>
WHERE <condição>;
➢ <lista de atributos>: é uma lista de nomes de atributos cujos valores
devem ser recuperados pela consulta
➢ <lista de tabelas>: é uma lista dos nomes de relações (tabelas ou
visões) exigidos para processar a consulta
➢ <condição>: é uma expressão condicional (booleana) que identifica as
tuplas a serem recuperadas pela consulta
Pág. 7 De 39
SQL (Structured Query Language)
Exemplos de Consulta SELECT
➢ SELECT CODIGO, NOME FROM CLIENTES
➢ SELECT * FROM CLIENTES
Pág. 8 De 39
SQL (Structured Query Language)
E o asterisco?
➢ Especificar um asterisco (*)
✔ Recuperar todos os valores de atributo das tuplas selecionadas
Pág. 9 De 39
SQL (Structured Query Language)
E as condições?
➢ A cláusula WHERE permite ao comando SQL passar condições de
filtragem. Exemplos:
SELECT CODIGO, NOME FROM CLIENTES
WHERE CODIGO = 10;
Pág. 11 De 39
SQL (Structured Query Language)
Parênteses podem influenciar
➢ Os parênteses corretamente utilizados dão mais poder as consultas,
conforme exemplo abaixo:
Pág. 12 De 39
SQL (Structured Query Language)
Parênteses podem influenciar
➢ Agora veja o exemplo a seguir:
Pág. 13 De 39
SQL (Structured Query Language)
Pesquisa de Strings
➢ Para busca parcial de string, o SELECT fornece o operador LIKE. Veja o
exemplo abaixo:
SELECT CODIGO, NOME FROM CLIENTES
WHERE NOME LIKE ‘VIGARISTA%’
➢ Neste comando, todos os clientes cujos nomes iniciam com VIGARISTA
serão retornados. Se quisermos retornar os nomes que contenham
‘VIGARISTA’ também no meio, pode-se usar:
SELECT CODIGO, NOME FROM CLIENTES
WHERE NOME LIKE ‘%VIGARISTA%’
➢ O uso de máscara no início e no fim da string fornece maior poder de
busca, mas causa considerável perda de performance. Este recurso deve
ser utilizado com critério.
Pág. 14 De 39
SQL (Structured Query Language)
E as subcadeias e operadores aritméticos?
➢ Operador de comparação LIKE
✔ Usado para combinação de padrão de cadeia
✔ % substitui um número qualquer de zero ou mais caracteres
✔ Sublinhado (_) substitui um único caractere
➢ Operadores aritméticos padrão:
✔ Adição (+), subtração (–), multiplicação (*) e divisão (/)
➢ Operador de comparação BETWEEN
Pág. 15 De 39
SQL (Structured Query Language)
E ordenação dos resultados?
➢ Use a cláusula ORDER BY
✔ Palavra-chave DESC para ver o resultado em uma ordem decrescente
de valores
✔ Palavra-chave ASC para especificar a ordem crescente explicitamente
✔ ORDER BY D.Dnome DESC, F.Unome ASC, F.Pnome ASC
Pág. 16 De 39
SQL (Structured Query Language)
Como Ordenar uma Consulta?
➢ A ordenação pode ser definida com o comando ORDER BY
➢ Assim como no comando WHERE, o campo de ordenação não precisa
estar listado como campo de visualização. Veja o exemplo:
Pág. 17 De 39
SQL (Structured Query Language)
Como Ordenar de modo Descendente?
➢ A utilização da palavra DESC garante a ordenação invertida:
Pág. 18 De 39
SQL (Structured Query Language)
Como fazer Junção de tabelas?
➢ O SELECT permite juntar duas ou mais tabelas no mesmo resultado. Isso
pode ser feito de várias formas. Uma delas segue abaixo:
Pág. 19 De 39
SQL (Structured Query Language)
Como fazer Junção de tabelas?
➢ Repare que os nomes dos campos passam a ser prefixados pelo nome
das tabelas, resolvendo duplicidades. Uma versão resumida desse
comando pode ser como abaixo:
Pág. 20 De 39
SQL (Structured Query Language)
Exemplo de Junção
➢ No comando abaixo temos várias tabelas unificadas em uma mesma
cláusula. Veja a Listagem 3.
SELECT A.CODIGO, A.NOME, B.DATA,
B.VALOR, C.QTD, D.DESCRICAO
FROM CLIENTES A, PEDIDOS B,
ITENS C, PRODUTOS D
WHERE A.CODIGO = B.CODCLIENTE
AND B.CODIGO = C.CODPEDIDO
AND C.CODPRODUTO = D.CODIGO
Pág. 21 De 39
SQL (Structured Query Language)
Outro Exemplo de Junção
SELECT A.CODIGO, A.NOME, B.DATA, B.VALOR
FROM CLIENTES A, PEDIDOS B
WHERE A.CODIGO = B.CODCLIENTE0
AND A.UF = ‘RS’
➢ A junção através da igualdade de campos traz como resultado somente
os registros que possuem referências nas duas tabelas. Observe o
comando:
SELECT A.CODIGO, A.DESCRICAO, B.DESCRICAO
FROM PROUTOS A, COMPONENTES B
WHERE A.CODIGO = B.CODPRODUTO
➢ Os produtos que não possuem componentes não são selecionados, caso
seja necessário criar uma listagem incluindo também os registros que
não possuem correspondência, deve-se utilizar o comando JOIN.
Pág. 22 De 39
SQL (Structured Query Language)
Como trazer os dados de forma distinta?
➢ SQL não elimina automaticamente tuplas duplicadas nos resultados das
consultas
➢ Usa-se a palavra-chave DISTINCT na cláusula SELECT
✔ Apenas as tuplas distintas deverão permanecer no resultado
Pág. 23 De 39
SQL (Structured Query Language)
E as uniões e exceções?
➢ Operações de conjunto
• UNION, EXCEPT (diferença), INTERSECT
• Operações multiconjuntos correspondentes: UNION ALL, EXCEPT ALL,
INTERSECT ALL)
Criar uma lista de todos os
números de projeto para
aqueles que envolvam um
funcionário cujo último nome é
'Silva', seja como um
trabalhador ou como um
gerente de departamento que
controla o projeto.
Pág. 24 De 39
SQL (Structured Query Language)
Comando Join
➢ A junção de tabelas no comando SELECT também pode ser feita com o
comando JOIN
➢ Este comando deve ser utilizado com a palavra reservada INNER ou com
a palavra OUTER
➢ INNER: Semelhante ao uso do operador “=” na junção de tabelas. Aqui
os registros sem correspondências não são incluídos. Esta cláusula é
opcional e pode ser omitida no comando JOIN
➢ OUTER: Os registros que não se relacionam também são exibidos. Neste
caso, é possível definir qual tabela será incluída na seleção, mesmo não
tendo correspondência.
Pág. 25 De 39
SQL (Structured Query Language)
Exemplo Join
➢ Para exemplificar, temos as tabelas abaixo:
SELECT A.CODIGO, A.DESCRICAO,
B.DESCRICAO, B.QTD
FROM PRODUTOS A
INNER JOIN COMPONENTES B
ON (A.CODIGO = B.CODPRODUTO)
➢ Este comando pode ser escrito na versão resumida abaixo:
SELECT A.CODIGO, A.DESCRICAO, B.DESCRICAO
FROM PRODUTOS A
JOIN COMPONENTES B
ON (A.CODIGO = B.CODPRODUTO)
Pág. 26 De 39
SQL (Structured Query Language)
Exemplo Join
SELECT A.CODIGO, A.DESCRICAO,
B.DESCRICAO, B.QTDE
FROM PRODUTOS A
LEFT OUTER JOIN COMPONENTES B
ON (A.CODIGO = B.CODPRODUTO)
➢ Neste comando todos os produtos serão incluídos na seleção,
independente de possuírem um componente. Observe que a palavra
LEFT se refere à primeira tabela do relacionamento. Mesmo comando:
SELECT A.CODIGO, A.DESCRICAO, B.DESCRICAO
FROM COMPONENTES A
RIGHT OUTER JOIN PRODUTOS B
ON (A.CODIGO = B.CODPRODUTO)
Pág. 27 De 39
SQL (Structured Query Language)
Exemplo Join
➢ A ordem das tabelas foi invertida mas o resultado é o mesmo. Observe
mais alguns exemplos:
SELECT A.CODIGO, A.DESCRICAO,
B.DESCRICAO, B.QTDE
FROM PRODUTOS A
JOIN COMPONENTES B
ON (A.CODIGO = B.CODPRODUTO)
WHERE A.CATEGORIA = 1
➢ Outro exemplo:
SELECT A.CODIGO, A.DESCRICAO, B.DESCRICAO
FROM PRODUTOS A JOIN COMPONENTES B
ON (A.CODIGO = B.CODPRODUTO)
WHERE A.CATEGORIA = 1 OR A.CATEGORIA = 2
ORDER BY A.CATEGORIA, A.DESCRICAO
Pág. 28 De 39
SQL (Structured Query Language)
FULL OUTER JOIN
➢ Podemos ainda combinar o uso de INNER e OUTER através do comando
FULL OUTER JOIN
➢ Neste caso, todos os registros das duas tabelas envolvidas serão
exibidos, tendo ou não relacionamento
Pág. 29 De 39
SQL (Structured Query Language)
Atualização de dados
➢ A modificação dos dados armazenados no banco de dados é referida
como atualização
➢ Pode ser atualizada uma linha, todas as linhas, ou um subconjunto das
linhas da tabela
➢ Uma coluna pode ser atualizada separadamente e as outras colunas não
são afetadas
➢ Para realizar uma atualização são necessárias três informações:
✔ O nome da tabela e da coluna a ser atualizada;
✔ O novo valor para a coluna;
✔ Quais linhas serão atualizadas
Pág. 30 De 39
SQL (Structured Query Language)
Atualização de dados precisa de Chave Primária
➢ O SQL, de uma maneira geral, não fornece um identificador único para
as linhas
➢ Portanto, não é necessariamente possível especificar diretamente a
linha a ser atualizada
➢ Em vez disso, devem ser especificadas as condições que a linha deve
atender para ser atualizada
➢ Somente havendo uma chave primária na tabela (não importando se foi
declarada ou não), é possível endereçar uma linha específica com
confiança, escolhendo uma condição correspondendo à chave primária
➢ Ferramentas gráficas de acesso a banco de dados dependem da chave
primária para poderem atualizar as linhas individualmente
Pág. 31 De 39
SQL (Structured Query Language)
Atualização de dados
➢ Por exemplo, o comando mostrado abaixo atualiza todos os produtos
com preço igual a 5, mudando estes preços para 10:
UPDATE produtos SET preco = 10 WHERE preco = 5
➢ Este comando pode atualizar nenhuma, uma, ou muitas linhas. Não é
errado tentar uma atualização que não corresponda a nenhuma linha
Pág. 32 De 39
SQL (Structured Query Language)
Exemplo de Atualização de dados
➢ Por exemplo, se for desejado aumentar o preço de todos os produtos em
10% pode ser utilizado:
Pág. 33 De 39
SQL (Structured Query Language)
Atualização de dados - Where
➢ Como pode ser visto, a expressão para obter o novo valor pode fazer
referência ao valor antigo
➢ Também foi deixada de fora a cláusula WHERE
➢ Quando esta cláusula é omitida, significa que todas as linhas da tabela
serão atualizadas e, quando está presente, somente as linhas que
atendem à condição desta cláusula serão atualizadas
➢ Deve ser observado que o sinal de igual na cláusula SET é uma
atribuição, enquanto o sinal de igual na cláusula WHERE é uma
comparação, mas isto não cria uma ambiguidade
➢ A condição WHERE não é necessariamente um teste de igualdade, estão
disponíveis vários outros operadores, mas a expressão deve produzir um
resultado booleano
Pág. 34 De 39
SQL (Structured Query Language)
Atualização de dados
➢ Também pode ser atualizada mais de uma coluna pelo comando UPDATE,
colocando mais de uma atribuição na cláusula SET. Por exemplo:
UPDATE minha_tabela
SET a = 5, b = 3, c = 1
WHERE a > 0;
Pág. 35 De 39
SQL (Structured Query Language)
Exclusão de dados
➢ Assim como só é possível adicionar dados para toda uma linha, uma
linha também só pode ser removida por inteiro da tabela
➢ A remoção das linhas só pode ser feita especificando as condições que
as linhas a serem removidas devem atender
➢ Havendo uma chave primária na tabela, então é possível especificar
exatamente a linha
➢ Também pode ser removido um grupo de linhas atendendo a uma
determinada condição, ou podem ser removidas todas as linhas da
tabela de uma só vez
Pág. 36 De 39
SQL (Structured Query Language)
Exclusão de dados
➢ É utilizado o comando DELETE para remover linhas
➢ A sintaxe deste comando é muito semelhante a do comando UPDATE
➢ Por exemplo, para remover todas as linhas da tabela produtos possuindo
preço igual a 10:
DELETE FROM produtos WHERE preco = 10;
Pág. 37 De 39
Pesquisa
➢ São apenas três perguntas que irão tomar menos de um minuto do seu
tempo:
Pág. 38 De 39
SQL (Structured Query Language)
Lembre-se
Albert
Einstein
Pág. 39 De 39