Banco de Dados SQL – Estrutured Query Language (DML) por: Mário Sergio da Silva
Banco de Dados SQL – Estrutured Query Language (DML)
Prof. Mário Sergio da Silva [email protected] Lattes: http://lattes.cnpq.br/1161794053211014
Atualizado em Maio/2016
Este material é uma adaptação didática que utiliza ilustrações e textos retirados de uma seleção criteriosa de publicações disponíveis livremente na internet, juntamente com conteúdo inédito. (bibliografia disponível no final dos slides)
Conteúdo Introdução ao SQL- (DDL, DML, DCL)
Instruções INSERT, UPDATE e DELETE
A poderosa cláusula WHERE
A instrução SELECT
As cláusulas ORDER BY, GROUP BY e JOIN
4 4 Prof. Mário Sergio
4
SQL (Structured Query Language) é a linguagem padrão universal para manipular bancos de dados relacionais através dos SGBDs. Isso significa que todos os SGBDRs (Sistema de Gerenciamento de Banco de Dados Relacionais) oferecem uma interface para acessar o banco de dados utilizando a linguagem SQL, embora com algumas variações. Logo, saber o que é SQL e como utilizá-la é fundamental para qualquer desenvolvedor de softwares. A “Linguagem Estruturada de Consultas” (SQL, traduzida para o português), é dividida em 3 principais agrupamentos: DDL - (Data Definition Language):Linguagem de Definição de Dados DML (Data Manipulation Language): Linguagem de Manipulação de Dados DCL (Data Control Language): Linguagem de Controle de Dados Nos próximos slides, iremos abordar as instruções DML.
5 5 Prof. Mário Sergio
5
As Instruções DML
As Instruções de manipulação de dados(DML) em SQL são representados por: Modificam o estado do banco de dados: o INSERT - permite a inclusão de novos registros (linhas) nas tabelas o UPDATE - altera os valores de dados existentes o DELETE - remove registros (linhas) existentes Acessam (consultam) os dados: o SELECT - usado para consultar o BD e retornar os dados de acordo
com a que satisfazem a determinada expressão.
6 6 Prof. Mário Sergio 6
Projeto de Exemplo: “Ensino Voluntário na Ong”
o Cada professor tem uma especialidade (formação) em uma disciplina.
o São aceitos mais de um professor com a mesma formação
o Cada aluno recebe um número de matrícula, ao se cadastrar na Ong, e pode agendar aulas individuais com professores diferentes.
o No final de cada aula, o professor atribui uma nota de 1 a 10
o Cada professor pode ensinar vários alunos individualmente
Para exemplificar as instruções DML, utilizaremos didaticamente, um projeto simplificado de um sistema acadêmico, conforme modelagem a seguir:
O modelo conceitual:
7 7
O modelo lógico:
Prof. Mário Sergio 7
Projeto de Exemplo: “Ensino Voluntário na Ong”
8 8 Prof. Mário Sergio
8
A Instrução INSERT
Sintaxe:
9 9 Prof. Mário Sergio
9
A Instrução INSERT
INSERT INTO ALUNO (CPF, MATRICULA, NOME, GRAU_INSTRUCAO, IDADE) VALUES ('023.999.999-99', '00000001','Beltrano de Tal','Primeiro Grau',15); INSERT INTO DISCIPLINA (NOME, AREA) VALUES ('Português', 'Humanas'); INSERT INTO PROFESSOR (CPF, NOME, TEMPO_ENSINO, DISCIPLINA_ID) VALUES ('123.999.999-99', 'Mário Sergio',6,7), ('456.999.999-99', 'João da Silva',15,1); PROFESSOR_CPF, ALUNO_MATRICULA, NOTA, DATA
INSERT INTO AULA VALUES ('000.999.999-99', '00000001',8.5,'2015-02-01');
Exemplos:
A coluna ID não precisa ser incluída no INSERT , pois o BD irá gerar um valor incremental para cada novo registro
Se os valores estiverem exatamente na ordem em que as colunas foram criadas na tabela, então não precisa informar a lista de colunas no INSERT
Inclusão de múltiplos registros em uma única instrução INSERT.
Prof. Mário Sergio 10
A Instrução UPDATE
Sintaxe:
UPDATE sua_tabela SET coluna = novovalor;
UPDATE ALUNO SET IDADE = 13;
Define a coluna que se deseja alterar
Nome da coluna que terá o valor
alterado
Novo valor
Isto alteraria o valor da coluna Idade de TODOS os alunos para 13 anos.
Exemplo:
Mas, como escolher qual/quais alunos desejo alterar ?
Incluindo a cláusula: WHERE (condição lógica)
UPDATE ALUNO SET IDADE = 13 WHERE CPF = '023.999.999-99‘ ;
Agora Sim, o update somente afetará os registros que satisfazem a condição lógica, ou seja só alterará a coluna idade nos registros em que:
CPF = '023.999.999-99´ -> VERDADEIRO
11 11 Prof. Mário Sergio
11
A Instrução DELETE
Sintaxe: DELETE FROM sua_tabela;
DELETE FROM ALUNO; Isto APAGARIA TODOS
os alunos da tabelas.
Exemplo:
A cláusula WHERE também pode e deve ser utilizada com a instruções DELETE
Incluindo a cláusula: WHERE (condição lógica)
DELETE ALUNO WHERE IDADE > 25;
Isso excluiria da tabela apenas os alunos que que tem idade maior que 25 anos
12 12 Prof. Mário Sergio
12
A cláusula WHERE (filtro)
Exemplo:
A cláusula WHERE pode ser utilizada em conjunto com as instruções UPDATE, DELETE E SELECT
Sintaxe: WHERE (condição lógica)
DELETE ALUNO WHERE GRAU_INSTRUCAO = 'Primeiro Grau‘ AND IDADE < 20;
Isso excluiria da tabela apenas os alunos que possuem o primeiro grau E tem idade menor que 20 anos (AS DUAS COISAS)
Essa condição segue o padrão das linguagens de programação, assim todos os operadores Relacionais e Lógicos
podem ser utilizados.
Prof. Mário Sergio 13
A cláusula WHERE (filtro)
Mais Exemplos:
UPDATE ALUNO SET IDADE = 13 WHERE CPF = '022.999.999-99‘ ;
F
F
V F
13
A comparação lógica é feita pelo SGBD para cada um dos registros da tabela, para que somente sejam alterados os registros cujo
resultado logico seja verdadeiro.
Será alterado
de 17 pra 13
O filtro com a chave primária, garante que somente um registro será alterado.
Prof. Mário Sergio 14
A cláusula WHERE (filtro)
Mais Exemplos:
DELETE ALUNO WHERE GRAU_INSTRUCAO = 'Primeiro Grau‘ AND IDADE < 20;
F V
F
A comparação lógica é feita pelo SGBD para cada um dos registros da tabela, para que somente sejam excluídos os registros cujo
resultado logico seja verdadeiro.
Registros que serão excluídos
V
15 15 Prof. Mário Sergio
15
A Instrução SELECT
Sintaxe:
SELECT colunas1, coluna2,... FROM sua_tabela
Especifica a tabela que se deseja recuperar os dados
Especifica as colunas separadas por virgula
É melhor dar do que receber? Quando se trata de Bancos de Dados, você precisará recuperar seus dados, muito mais vezes do que inseri-lo na base. Para isso há a poderosa instrução SELECT, que permite consultar as importantes informações que foram inseridas em suas tabelas.
SELECT * FROM sua_tabela
Este * é conhecido como o símbolo Coringa, ele indica que TODAS AS COLUNAS devem ser retornadas na consulta SELECT
16 16 Prof. Mário Sergio
16
A Instrução SELECT
Exemplos: SELECT * FROM PROFESSOR
SELECT * FROM DISCIPLINA
SELECT NOME, TEMPO_ENSINO FROM PROFESSOR SELECT NOME FROM DISCIPLINA
17 17 Prof. Mário Sergio 17
A cláusula ORDER BY (Ordenação) Ascendente / Descendente
SELECT * FROM DISCIPLINA ORDER BY ID ASC SELECT * FROM DISCIPLINA ORDER BY ID DESC
SELECT * FROM DISCIPLINA ORDER BY AREA ASC, NOME DESC SELECT * FROM DISCIPLINA ORDER BY NOME
ASC/DESC Quando omite-se
é Ascendente
Ordena o resultado de uma consulta, de acordo com a coluna escolhida.
Prof. Mário Sergio 18
A cláusula WHERE no SELECT
A Cláusula WHERE serve para ESCOLHER (FILTRAR) quais são os registros que queremos CONSULTAR (retornar)
A comparação lógica é feita pelo SGBD para cada um dos registros da tabela, para que somente sejam retornados os registros cujo resultado logico seja verdadeiro.
SELECT * FROM DISCIPLINA
SELECT * FROM DISCIPLINA WHERE (AREA = 'Exatas')
F V F V V F F
SELECT NOME, SEXO FROM ALUNO
SELECT NOME FROM ALUNO WHERE (NOME LIKE '%Tal‘) V V F F
Resultado do Filtro
Resultado do Filtro
Prof. Mário Sergio 19
A cláusula WHERE no SELECT
SELECT CPF, NOME, SEXO, CIDADE FROM ALUNO WHERE (SEXO = 'M' AND CIDADE = 'Olinda‘);
F
F
V
F V
Resultado do Filtro: Alunos Homens que moram em Olinda
SELECT CPF, NOME, SEXO, CIDADE FROM ALUNO
Prof. Mário Sergio 20
Resumo: Escolhendo Colunas e Registros com SELECT... WHERE
SELECT CPF, NOME, CIDADE FROM ALUNO WHERE (SEXO = 'M' AND CIDADE = 'Olinda‘); Escolha de 2 registros (linhas)
SELECT * FROM ALUNO
Escolha de 3 colunas
21 21 Prof. Mário Sergio
21
RESUMO das Sintaxes DML
INSERT INTO nometabela (colunas) VALUES (valores); UPDATE nometabela SET coluna = valor DELETE FROM nometabela SELECT (colunas) FROM nometabela WHERE (condições lógicas)
A Cláusula WHERE serve para ESCOLHER (FILTRAR) quais são os registros que queremos ALTERAR, EXCLUIR ou CONSULTAR (retornar)
Prof. Mário Sergio 22
Funções de Agregação
Efetuam operações sobre um conjunto de registros, de acordo com as colunas e filtro (where) desejados.
Prof. Mário Sergio 23
Funções de Agregação
SELECT COUNT(*), SUM(tempo_ensino), MIN(tempo_ensino), MAX(tempo_ensino), AVG(tempo_ensino) FROM PROFESSOR
SELECT COUNT(*) as qtd_professores, SUM(tempo_ensino) as soma, MIN(tempo_ensino) as menor, MAX(tempo_ensino) as maior, AVG(tempo_ensino) as media FROM PROFESSOR
Alias de Coluna São apelidos para serem exibidos
no título das coluna em uma consulta SELECT
Prof. Mário Sergio 24
A Função DISTINCT
- DISTINCT - Exibe apenas os registros com valores NÃO REPETIDOS (distintos) de uma determinada coluna. (oculta duplicatas)
SELECT DISTINCT(area) FROM disciplina ORDER BY area
SELECT DISTINCT(cidade) FROM aluno order by cidade
Prof. Mário Sergio 25
A cláusula GROUP BY (agrupamento)
o O GROUP BY é usado para agrupar um conjunto de resultados retornados de uma instrução SELECT baseados em grupos de colunas.
o Para cada grupo você pode aplicar funções agregadas, como SUM, AVG, MIN, MAX e COUNT para emitir um resumo das informações.
o O GROUP BY é muito útil
quando você quer analisar os dados de forma analítica como quantas ordens de venda foram emitidas por um cliente e vendidas por determinado vendedor. Ele é frequentemente usado no sistema de datawarehouse ou BI para produzir relatórios analíticos.
Prof. Mário Sergio 26
A cláusula GROUP BY (agrupamento)
SELECT COUNT(*) qtdAulas, AVG(nota) as media, SUM(duracao) as duraçãototal, MIN(valor) as aulaMaisBarata, SUM(valor) as valorTotal, SUM(valor) / COUNT(*) as valorMedioAula FROM aula
Consulta com funções agregadas SEM AGRUPAMENTO
SELECT professor_cpf, COUNT(*) qtdAulas, AVG(nota) as media, SUM(duracao) as duraçãototal, MIN(valor) as aulaMaisBarata, SUM(valor) as valorTotal, SUM(valor) / COUNT(*) as valorMedioAula FROM aula GROUP BY professor_cpf
A Mesma Consulta COM AGRUPAMENTO por professor
Resumo de Aulas por professor
Prof. Mário Sergio 27
A cláusula JOIN (Junção de tabelas)
o Até agora, você aprendeu como recuperar (consultar) dados de uma única tabela separadamente. No entanto, na maioria das vezes você vai precisar consultar dados de várias tabelas relacionadas, formando registros completos para análise.
o A cláusula JOIN (também conhecida como INNER JOIN) é responsável pela junção e recuperação de dados de duas ou mais tabelas.
o Um JOIN combina os registros de duas tabelas (ou mais) utilizando uma condição lógica para comparar as chaves primarias e estrangeiras das tabelas que queremos juntar. Os registros são retornados apenas quando as linhas correspondem à condição.
Prof. Mário Sergio 28
A cláusula JOIN (Junção de tabelas)
Exemplo:
Prof. Mário Sergio 29
A cláusula JOIN (Junção de tabelas)
Exemplo:
SELECT (colunas das duas tabelas) FROM tabela1 JOIN tabela2 ON (condição)
JOIN tabela2 ON (tabela1.colunaFK = tabela2.colunaPK)
Essa condição, na grande maioria das vezes é uma comparação entre as chaves primaria e estrangeria das tabelas.
Sintaxe:
SELECT professor.nome as professor, disciplina.nome as disciplina FROM professor JOIN disciplina ON (professor.disciplina_id = disciplina.id)
Consulta Retornada
Veja explicação detalhada nos próximos Slides
A cláusula JOIN (Junção de tabelas)
SELECT professor.* , disciplina.* FROM professor JOIN disciplina ON ( professor.disciplina_id = disciplina.id )
COLUNAS DA TABELA PROFESSOR COLUNAS DA TABELA
DISCIPLINA
Esse JOIN retorna o TABELÃO acima, contedo todos os registros e colunas de PROFESSOR, JUNTANDO com os todas as colunas de DISCIPLINA, MAS APENAS os
registros que tem relação com PROFESSOR Prof. Mário Sergio 30
Prof. Mário Sergio 31
A cláusula JOIN (Junção de tabelas)
SELECT professor.nome, disciplina.nome FROM professor JOIN disciplina ON ( professor.disciplina_id = disciplina.id )
COLUNAS DA TABELA PROFESSOR COLUNAS DA TABELA
DISCIPLINA
Mas, se ao invés de *, escolhermos apenas as colunas NOME das duas tabelas, teremos:
Consulta Retornada
A cláusula JOIN (Junção de tabelas)
SELECT professor.nome as professor, disciplina.nome as disciplina FROM professor JOIN disciplina ON ( professor.disciplina_id = disciplina.id )
COLUNAS DA TABELA PROFESSOR COLUNAS DA TABELA
DISCIPLINA
E agora, colocando Apelido para as colunas, teriamos:
Prof. Mário Sergio 32
Consulta Retornada
Prof. Mário Sergio 33
Alias de Tabelas (Apelidando tabelas)
Exemplo sem Alias de tabela: SELECTprofessor.nome as professor, disciplina.nome as disciplina FROM professor JOIN disciplina ON (disciplina.id = professor.disciplina_id)
É um apelido da tabela para você se referenciar ao especificar suas colunas. É muito útil quando precisamos nos referir várias vezes a mesma tabela em uma instrução SELECT juntamente com a instrução JOIN, ou quando o nome da tabela é muito grande, e você não quer perder tempo digitando seu nome várias vezes
Exemplo com Alias de tabela: SELECT p.nome as professor, d.nome as disciplina FROM professor p JOIN disciplina d ON (d.id = p.disciplina_id)
34 34 Prof. Mário Sergio
34
RESUMO da Sintaxe Instrução SELECT simples
SELECT (colunas, ou funções_agregação) FROM nometabela JOIN tabela ON (condição) ... WHERE (condições lógicas) ORDER BY colunas ASC/DESC
Cláusulas opcionais
As funções de Agregação: SUM(), AVG(), COUNT(), MIN(), MAX(), DISTINCT()
35 35 Prof. Mário Sergio
35
RESUMO da Sintaxe Instrução SELECT agrupado
ORDER BY colunas ASC, DESC
SELECT colunasdoAgrupamento, função_agregação) FROM nometabela
WHERE (condições lógicas)
GROUP BY colunasdoAgrupamento
JOIN tabela2 ON (condição) ...
As funções de Agregação: SUM(), AVG(), COUNT(), MIN(), MAX(), DISTINCT
36 36 Prof. Mário Sergio
36
Exercícios
1. Exiba um a listagem, ordenada por nota da maior a menor, de todas as aulas ocorridas no período de 2016-03-01 a 2016-03-30, contendo a colunas: data, nome do aluno, nota, duracao e nome do professor.
2. Considerando a consulta agrupada da pag 26, inclua no resultado da consulta duas novas colunas: nome do professor e área de formação.
3. A ONG precisa saber qual é o custo total da aulas dos alunos do sexo masculino. Para isso mostre uma lista com nome do aluno (cada aluno apenas uma vez), o total de aulas e o valor total, ordenado pelo total de aulas.
37
Bibliografia
Elmasri & Navathe – Fundamentos de Bancos de Dados
Carlos Alberto Heuser – Projeto de Banco de Dados
Korth e Silberchatz – Sistema de Bancos de Dados
Site do prof Eduardo Henrique Gomes. Disponível em: http://ehgomes.com.br/disciplinas/bdd
38
Links sobre Linguagens/Banco de Dados
http://www.dialetodigital.com/blog/conteudos-programacao/
Top Related