banco de dados sql (dml)

38
Banco de Dados SQL – Estrutured Query Language (DML) por: Mário Sergio da Silva

Upload: mario-sergio

Post on 15-Apr-2017

1.518 views

Category:

Technology


7 download

TRANSCRIPT

Page 1: Banco de Dados SQL (DML)

Banco de Dados SQL – Estrutured Query Language (DML) por: Mário Sergio da Silva

Page 2: Banco de Dados SQL (DML)

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)

Page 3: Banco de Dados SQL (DML)

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

Page 4: Banco de Dados SQL (DML)

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.

Page 5: Banco de Dados SQL (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.

Page 6: Banco de Dados SQL (DML)

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:

Page 7: Banco de Dados SQL (DML)

7 7

O modelo lógico:

Prof. Mário Sergio 7

Projeto de Exemplo: “Ensino Voluntário na Ong”

Page 8: Banco de Dados SQL (DML)

8 8 Prof. Mário Sergio

8

A Instrução INSERT

Sintaxe:

Page 9: Banco de Dados SQL (DML)

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.

Page 10: Banco de Dados SQL (DML)

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

Page 11: Banco de Dados SQL (DML)

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

Page 12: Banco de Dados SQL (DML)

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.

Page 13: Banco de Dados SQL (DML)

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.

Page 14: Banco de Dados SQL (DML)

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

Page 15: Banco de Dados SQL (DML)

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

Page 16: Banco de Dados SQL (DML)

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

Page 17: Banco de Dados SQL (DML)

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.

Page 18: Banco de Dados SQL (DML)

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

Page 19: Banco de Dados SQL (DML)

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

Page 20: Banco de Dados SQL (DML)

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

Page 21: Banco de Dados SQL (DML)

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)

Page 22: Banco de Dados SQL (DML)

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.

Page 23: Banco de Dados SQL (DML)

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

Page 24: Banco de Dados SQL (DML)

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

Page 25: Banco de Dados SQL (DML)

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.

Page 26: Banco de Dados SQL (DML)

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

Page 27: Banco de Dados SQL (DML)

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.

Page 28: Banco de Dados SQL (DML)

Prof. Mário Sergio 28

A cláusula JOIN (Junção de tabelas)

Exemplo:

Page 29: Banco de Dados SQL (DML)

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

Page 30: Banco de Dados SQL (DML)

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

Page 31: Banco de Dados SQL (DML)

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

Page 32: Banco de Dados SQL (DML)

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

Page 33: Banco de Dados SQL (DML)

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)

Page 34: Banco de Dados SQL (DML)

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()

Page 35: Banco de Dados SQL (DML)

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

Page 36: Banco de Dados SQL (DML)

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.

Page 37: Banco de Dados SQL (DML)

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

Page 38: Banco de Dados SQL (DML)

38

Links sobre Linguagens/Banco de Dados

http://www.dialetodigital.com/blog/conteudos-programacao/