B ANCO DE D ADOS A PLICADO AO D ESENVOLVIMENTO DE S OFTWARE BDD.

25
BANCO DE DADOS APLICADO AO DESENVOLVIMENTO DE SOFTWARE BDD

Transcript of B ANCO DE D ADOS A PLICADO AO D ESENVOLVIMENTO DE S OFTWARE BDD.

Page 1: B ANCO DE D ADOS A PLICADO AO D ESENVOLVIMENTO DE S OFTWARE BDD.

BANCO DE DADOS APLICADO AO DESENVOLVIMENTO DE SOFTWAREBDD

Page 2: B ANCO DE D ADOS A PLICADO AO D ESENVOLVIMENTO DE S OFTWARE BDD.

DML – CONSULTANDO DADOS EM TABELAS

Estrutura Básica

SELECT => PROJEÇÃO

FROM => TABELA OU PRODUTO CARTESIANO DELAS

WHERE => SELEÇÃO

Coluna1[,Coluna2 [,...] ] (Condição(Tabela1 [X Tabela2 [X ... ] ]))

SELECT Coluna1[,Coluna2 [, ... ] ]FROM Tabela1,[Tabela2 [, ... ] ]WHERE Condição

Page 3: B ANCO DE D ADOS A PLICADO AO D ESENVOLVIMENTO DE S OFTWARE BDD.

DML – CONSULTANDO DADOS EM TABELAS

Estrutura Genérica

SELECT [DISTINCT | ALL] { * | [Tabela.]Coluna1 [AS Alias1]

[ [Tabela.]Coluna2 [AS Alias2] [, ...]]}FROM Tabela1 [, Tabela2 [, ... ] ][WHERE {Condição Simples | Condição de Sub-

consulta} ][ORDER BY Coluna1 [ASC | DESC] [,Coluna2 [ASC |

DESC] [, ... ]]][GROUP BY Coluna1 [,Coluna2 [, ... ]] [HAVING

Condição ] ][ {UNION | IMTERSECT | EXCEPT} SELECT ... ]

Page 4: B ANCO DE D ADOS A PLICADO AO D ESENVOLVIMENTO DE S OFTWARE BDD.

DML – CONSULTANDO DADOS EM TABELAS

SELECT/FROM - Projeta os dados da(s) tabela(s), de acordo com os critérios especificados.

A projeção do resultado é em uma estrutura tipo tabela

Basta informar o que se quer, sem se preocupar como fazer isto (SQL Não é procedural).

Na cláusula SELECT, pode-se utilizar operadores aritméticos e funções de agregações, para projetar cálculos.

Page 5: B ANCO DE D ADOS A PLICADO AO D ESENVOLVIMENTO DE S OFTWARE BDD.

DML – CONSULTANDO DADOS EM TABELASExemplos:

/* Projetar todas as informações dos autores */SELECT CodAutor, Nome, NascimentoFROM AUTOR ;OUSELECT *FROM AUTOR ;

/* Projetar a média dos valores dos livros */SELECT AVG (Valor)FROM LIVRO;

/*Projetar todos os livros(títulos) e seus valores com 10% de desconto*/SELECT Titulo, Valor - (Valor * 0.1)FROM LIVRO;

/* Projetar a quantidade de autores cadastrados */SELECT COUNT (*) AS QUANTIDADE, ‘ud’ AS UNIDADEFROM AUTOR;

Page 6: B ANCO DE D ADOS A PLICADO AO D ESENVOLVIMENTO DE S OFTWARE BDD.

DML – CONSULTANDO DADOS EM TABELASEm SQL a eliminação de linhas duplicadas não é feita

automaticamente, devendo a mesma ser especificada explicitamente.

ALL é o padrão quando não especificado DISTINCT. Exemplos:

/* Projetar todas as cidades das editoras sem duplicatas */

SELECT ALL Cidade FROM EDITORA;OUSELECT CidadeFROM EDITORA;

SELECT DISTINCT CidadeFROM EDITORA;

/* Projetar todas as cidadesdas editoras repetidamente*/

Page 7: B ANCO DE D ADOS A PLICADO AO D ESENVOLVIMENTO DE S OFTWARE BDD.

DML – CONSULTANDO DADOS EM TABELAS Uma coluna pode ser especificada pelo nome da sua

tabela(Tabela.Coluna), bem como, ser renomeada durante a

consulta(Coluna AS ColunaRenomeada)/* Projetar todos os nomes e respectivos

nascimentos da tabela autor.NOTE: mesmo especificando Tabela.Coluna, FROM

é obrigatório */

SELECT AUTOR.Nome, AUTOR.NascimentoFROM AUTOR;

/* Projetar todos os títulos dos livros e seus valores em dobro */

SELECT Titulo, Valor * 2 as DobroFROM LIVRO;

Page 8: B ANCO DE D ADOS A PLICADO AO D ESENVOLVIMENTO DE S OFTWARE BDD.

DML – CONSULTANDO DADOS EM TABELAS WHERE - Especifica quais linhas da(s) tabela(s)

listada(s) na cláusula FROM são afetadas pela condição. Se esta não for especificada, a consulta retornará

todas as linhas da tabela. Operadores Utilizados

A condição de WHERE pode ser de três tipos: Comparação Ligação entre tabelas (Join) Sub-Consulta (Sub-Queries)

Page 9: B ANCO DE D ADOS A PLICADO AO D ESENVOLVIMENTO DE S OFTWARE BDD.

DML – CONSULTANDO DADOS EM TABELASComparação

Expressão Operador Relacional ExpressãoA condição é verdadeira quando a 1a expressão atende ao

operador relacional sobre a 2a expressão./* Projetar livros publicados após 30 de maio de 1993 */

SELECT *FROM LIVROWHERE Publicacao > ‘5/30/93’; Expressão [NOT] BETWEEN Expressão AND Expressão

A condição é verdadeira quando a 1a expressão é um valor compreendido entre a 2a e 3a expressões (inclusive).

/* Projetar livros com valor de 10.00 a 100.00 */SELECT *FROM LIVROWHERE Valor BETWEEN 10.00 AND 100.00;

Page 10: B ANCO DE D ADOS A PLICADO AO D ESENVOLVIMENTO DE S OFTWARE BDD.

DML – CONSULTANDO DADOS EM TABELAS

Comparação Expressão [NOT] IN (Valores)A condição é verdadeira se o valor da

expressão é igual a um dos valores entre parênteses

/* Projetar as Editoras com sede em São Paulo ou Rio de Janeiro*/

SELECT *FROM EITORAWHERE Cidade IN (‘São Paulo’, ‘Rio de

Janeiro’);

Page 11: B ANCO DE D ADOS A PLICADO AO D ESENVOLVIMENTO DE S OFTWARE BDD.

DML – CONSULTANDO DADOS EM TABELASComparação

Coluna [NOT] LIKE ‘Cadeia de Caracteres’ A condição é satisfeita quando o valor da coluna é igual ao valor dacadeia de caracteres. Caracteres especiais para construção da cadeia de caracteres:“%” ou “*” ® Usado para representar zero ou mais caracteres.“_” ou “?” ® Usado para representar um caractere.

/*Projetar todos os autores cujo nome tenha 10 caracteres e inicie com R*/

SELECT *FROM AUTORWHERE Titulo LIKE ‘R?????????’;/*Projetar todos os livros que tenham

Banco de Dados no seu título*/

SELECT *FROM LIVROWHERE Titulo LIKE ‘%Banco de Dados%’;

Page 12: B ANCO DE D ADOS A PLICADO AO D ESENVOLVIMENTO DE S OFTWARE BDD.

DML – CONSULTANDO DADOS EM TABELASComparação

Coluna IS [NOT] NULL A condição é satisfeita quando o valor da coluna for NULL/*Projetar todos os livros que estão sem preço definido */

SELECT *FROM LIVROWHERE Valor IS NULL

Pode-se misturas os vários tipos de comparação/*Projetar todos os livros que iniciam com R, estão com preço

definidoe foram publicados depois de 1/1/1995*/

SELECT *FROM LIVROWHERE Titulo LIKE ‘R%’ andValor IS NOT NULL andPublicacao > ‘1/1/1995’

Page 13: B ANCO DE D ADOS A PLICADO AO D ESENVOLVIMENTO DE S OFTWARE BDD.

DML – CONSULTANDO DADOS EM TABELAS Ligação entre tabelas (Join) Diz-se que tabelas estão relacionadas se

tiverem campos comuns (ch.primária e ch. estrangeira).

O efeito do JOIN é a criação de uma tabela temporária em que cada par de linhas, que satisfação a condição de ligação, são ligados para formar uma única linha.

A ligação é sempre estabelecida à frente da cláusula WHERE usando o operador relacional da igualdade (=). FROM estabelece o produto cartesiano entre

as tabelas listadas WHERE filtra as linhas úteis segundo a

condição especificada

Page 14: B ANCO DE D ADOS A PLICADO AO D ESENVOLVIMENTO DE S OFTWARE BDD.

DML – CONSULTANDO DADOS EM TABELAS Ligação entre tabelas (Join) – cont.

Pode-se misturar as cláusulas de comparação, vistas anteriormente,juntamente com AND, OR e NOT para formar equações de ligações mais complexas

Para se ligar várias tabelas, usa-se o operador lógico AND.

É preciso ter muito cuidado com os JOINS, pois exigem alto custo de execução (implicam diretamente na performance).

Page 15: B ANCO DE D ADOS A PLICADO AO D ESENVOLVIMENTO DE S OFTWARE BDD.

DML – CONSULTANDO DADOS EM TABELASLigação entre tabelas (Join) - exemplos/* Projetar todos os livros (título) e seus autores (nome)nomeando a tabela para facilitar a digitação*/:

SELECT AU.Nome, LI.TituloFROM AUTOR AU, LIVRO LIWHERE AU.CodAutor = LI.CodAutor;

/* Projetar todos os autores (nome), seus livros (título) e

editoras (razão), onde a razão da editora seja Campos ou

Makron */:

SELECT AUTOR.Nome, LIVRO.Titulo, EDITORA.RazaoFROM AUTOR, LIVRO, EDITORAWHERE AUTOR.CodAutor = LIVRO.CodAutor ANDLIVRO.CodEditora = EDITORA.CodEditora ANDEDITORA.Razao IN (‘Campos’, ‘Makron’);

Page 16: B ANCO DE D ADOS A PLICADO AO D ESENVOLVIMENTO DE S OFTWARE BDD.

DML – CONSULTANDO DADOS EM TABELASSub-Consulta (Sub-Queries)

As sub-consultas podem retornar um valor simples, ou um conjunto

de valores. Sub-consultas que retornam um valor simples Usadas para fazer comparação elemento-elemento WHERE expressão {= | <> | > | >= | < | <=} (Sub-

Consulta)

/*Projetar os livros (título) mais caros que a média*/

SELECT TituloFROM LIVROWHERE Valor >(SELECT AVG (Valor)FROM LIVRO) ;

Page 17: B ANCO DE D ADOS A PLICADO AO D ESENVOLVIMENTO DE S OFTWARE BDD.

DML – CONSULTANDO DADOS EM TABELAS Sub-consultas que retornam um conjunto de valores Usadas para fazer comparação elemento-conjunto Podem ser definidas através das cláusulas IN, ANY, ALL e

EXISTS. WHERE expressão [NOT] IN (Sub-Consulta)

Estabelece uma relação de pertinência (Î) entre elementos e

conjuntos (tabelas). Sua avaliação retorna um valor booleano.

/*Projetar autores (nome) que possuem livros sem valor*/

SELECT NomeFROM AUTORWHERE CodAutor NOT IN(SELECT CodAutorFROM LIVROWHERE Valor > 0);

Page 18: B ANCO DE D ADOS A PLICADO AO D ESENVOLVIMENTO DE S OFTWARE BDD.

DML – CONSULTANDO DADOS EM TABELASSub-consultas que retornam um conjunto de valores WHERE expressão { = | <> | > | >= | < | <= } ANY (Sub-

consulta) Verifica se a condição é verdadeira para pelo menos um

dos valoresretornados pela sub-consulta Permite outras formas de

comparação elemento-conjunto. = ANY ® tem mesmo efeito que IN

/*Projetar autores (nome) quepossuem livros sem valor*/

SELECT NomeFROM AUTORWHERE CodAutor = ANY(SELECT CodAutorFROM LIVROWHERE Valor = 0);

/* Projetar o nome de todos osautores, exceto o do mais idoso*/SELECT NomeFROM AUTORESWHERE Nascimento > ANY(SELECT NascimentoFROM AUTORES)

Page 19: B ANCO DE D ADOS A PLICADO AO D ESENVOLVIMENTO DE S OFTWARE BDD.

DML – CONSULTANDO DADOS EM TABELASSub-consultas que retornam um conjunto de valoresWHERE expressão { = | <> | > | >= | < | <= } ALL (Sub-consulta) Verifica se a condição é verdadeira para todos os valores

retornadospela sub-consulta. É o oposto de ANY. <> ALL ® tem mesmo efeito que NOT IN

/*Projetar os livros (título) que têm valor maior que todos os livros da editora

Makron */

SELECT TituloFROM LIVROWHERE Valor > ALL (SELECT Valor FROM LIVRO Li, Editora Ed WHERE Li.CodEditora = Ed.CodEditora AND Ed.Razao =

‘Makron’);

Page 20: B ANCO DE D ADOS A PLICADO AO D ESENVOLVIMENTO DE S OFTWARE BDD.

DML – CONSULTANDO DADOS EM TABELASSub-consultas que retornam um conjunto de valores WHERE expressão [NOT] EXISTE (Sub-consulta) Verifica a existência de dados numa lista de valores da

subconsulta Retorna VERDADE ou FALSIDADE, conforme a sub-consulta

retorneou não linhas de resultado

/*Projete todos os autores que têm livrospublicados nas editoras Makron ou Campos*/

SELECT Au.NomeFROM AUTOR AuWHERE EXISTS(SELECT *FROM LIVRO Li, EDITORA EdWHERE Li.CodAutor=Au.CodAutor ANDLi.CodEditora=Ed.CodEditora ANDEd.Razao IN (‘Makron’, ‘Campos’));

Page 21: B ANCO DE D ADOS A PLICADO AO D ESENVOLVIMENTO DE S OFTWARE BDD.

DML – CONSULTANDO DADOS EM TABELASORDER BY - Ordenar os resultados pelos valores de uma oumais colunas. As linhas são ordenadas pela primeira coluna após ORDER BY.Quando as linhas de uma coluna possuem valores iguais, estas serãoclassificadas pelo valor da segunda coluna após ORDER BY e assimpor diante.

Tipos de Ordenação: ASC => Ascendente DESC => Decrescente Exemplo:

/* Projetar o nome e o nascimento dos autores em ordem decrescente donascimento. Para datas iguais, considerar a ordem alfabética do nome doautor*/

SELECT Nome, NascimentoFROM AUTORORDER BY Nascimento DESC, Nome ASC;

Page 22: B ANCO DE D ADOS A PLICADO AO D ESENVOLVIMENTO DE S OFTWARE BDD.

DML – CONSULTANDO DADOS EM TABELASGROUP BY - agrupa os resultados por valores idênticos.Utiliza-da com as funções de agregação, mas pode ser usada

sem estas. OBS: Os campos do GROUP BY devem aparecer no SELECT! Exemplos:/* Projetar a média dos valores dos livros por editora */

SELECT EDITORA.Razao, AVG (LIVRO.Valor)FROM LIVRO, EDITORAWHERE LIVRO.CodEditora=EDITORA.CodEditoraGROUP BY EDITORA.Razao ;

/* Projetar todas as editoras (razão) que publicaram livros */

SELECT EDITORA.RazaoFROM LIVRO, EDITORAWHERE LIVRO.CodEditora=EDITORA.CodEditoraGROUP BY Editora.Razao;

Page 23: B ANCO DE D ADOS A PLICADO AO D ESENVOLVIMENTO DE S OFTWARE BDD.

DML – CONSULTANDO DADOS EM TABELAS HAVING - Utilizada para filtrar o resultado dos grupos Só é atendida depois do Agrupamento ! Só existe se associada à cláusula GROUP BY (mas o oposto não) Vem depois do GROUP BY e antes do ORDER BY A condição só pode envolver os campos/funções do SELECT Exemplos:

/* Projetar as editoras (código), cujo o preço médio dos livros é > 60*/

SELECT CodEditora, AGV(Valor) AS MediaValorFROM LIVROGROUP BY CodEditoraHAVING MediaValor > 60;

/* Projetar os autores (nome) que publicaram mais de 3 livros*/SELECT AUTOR.Nome, COUNT(DISTINCT LIVRO.Titulo)FROM LIVRO, AUTORWHERE AUTOR.CodAutor = LIVRO.CodAutorGROUP BY AUTOR.NomeHAVING COUNT(DISTINCT LIVRO.Titulo) > 3;

Page 24: B ANCO DE D ADOS A PLICADO AO D ESENVOLVIMENTO DE S OFTWARE BDD.

DML – CONSULTANDO DADOS EM TABELAS Operações sobre Conjuntos

Aplicáveis apenas em tabelas compatíveis UNION (È) - Faz a união, eliminando linhas

repetidas. Acrescenta-se ALL para manter as

linhas repetidas INTERSECT (Ç) - Retorna apenas as linhas

que pertencem às duas tabelas EXCEPT (–) - Retorna apenas as linhas que

pertencem à primeira tabela, com exceção das que aparecem na segunda.

Page 25: B ANCO DE D ADOS A PLICADO AO D ESENVOLVIMENTO DE S OFTWARE BDD.

DML – CONSULTANDO DADOS EM TABELAS Considere:

MEDICO (CodMedico, Nome, CRM) e PACIENTE (CodPaciente, Nome); DEPOSITANTE (CPF, Nome, Agencia, Conta) e DEVEDOR (CPF, Nome, Agencia, Conta). UNION

/* Projetar o nome de todasas pessoas cadastradasno hospital */(SELECT NomeFROM MEDICO)UNION(SELECT NomeFROM PACIENTE);

/* Projetar todos os clientes da agência A1com empréstimo ou depósito */(SELECT *FROM DEPOSITANTEWHERE Agencia = ‘A1’)UNION ALL(SELECT *FROM DEVEDORWHERE Agencia = ‘A1’);