Beruflich Dokumente
Kultur Dokumente
Slides da Disciplina
Prof. Rmulo Alencar
romulo.alencar@live.estacio.br
Contedo
Conceitos Bsicos de BD
Motivao para o uso de BDs Modelo de Dados Esquema/Estado de um BD Arquitetura de 3 Esquemas Tipos de Usurios do BD Arquitetura do SBD
SQL
Histrico Componentes DDL CREATE DROP ALTER DML INSERT UPDATE DELETE SELECT Sub-consultas Vises
2
Modelo Relacional
Histrico Definio Operadores Linguagens de Consulta Restries de Integridade
Prof. Rmulo Alencar
O que acontece se o aluno mudar de endereo e apenas o Programa Acadmico for atualizado?
inconsistncias!
Tempo 0 1 2 3 4 5 escreva saldo Usurio 1 leia saldo saldo saldo - 100 leia saldo saldo saldo + 200 escreva saldo Usurio 2
Quanto deveria ser o saldo ao final? Qual saldo foi efetivamente gravado?
Prof. Rmulo Alencar Banco de Dados para Redes 6
Evitar inconsistncias produzidas pelo acesso concorrente Recuperar estado consistente dos dados aps falha
Prof. Rmulo Alencar Banco de Dados para Redes 7
Descrio de Dados
Banco de Dados
Sistema de Banco de Dados Conjunto de dados inter-relacionados (banco de dados) Tornar transparente como os dados Componente de software (SGBD) so armazenados e gerenciados Acesso e modificao dos dados
Modelo de Dados
Representao conceitual dos dados Alto nvel Modelo abstrato Independente de implementao
Modelo de Dados
Principais modelos Hierrquico Rede Relacional Orientado a Objetos Objeto-Relacional XML
10
Modelo de Dados
Modelo Hierrquico Dcada de 60 Primeiro modelo de dados adotado Dados organizados em uma hierarquia de elementos Estrutura de rvore! Cada elemento pode possuir uma lista de filhos
Mas apenas um pai
Pode levar a redundncias na representao de relacionamentos mais complexos Exemplo O Registro do Windows um BD hierrquico
11
Modelo de Dados
Modelo Hierrquico Representao grfica
12
Modelo de Dados
Modelo em Rede Final da dcada de 60 Dados organizados em uma srie de ligaes entre elementos Estrutura de grafo! Cada elemento pode se associar livremente a qualquer outro elemento
De forma direcionada ou no
Modelo de Dados
Modelo em Rede Representao grfica
14
Modelo de Dados
Modelo Relacional Proposto por Edgar Codd Em 1970 Baseado em Teoria dos conjuntos Lgica de predicados Operadores lgebra relacional Clculo relacional Forte base matemtica
15
Modelo de Dados
Modelo Relacional Dados so representados como Um sub-conjunto dos produtos cartesianos entre os conjuntos domnio de seus atributos Na prtica, utilizamos o conceito de tabela Restries de integridade garantem consistncia Chave Domnio Integridade referencial
Relacionamentos
16
Modelo de Dados
Modelo Relacional Modelo de dados mais popular do mercado Desempenho Consistncia Exemplos Oracle SQL Server DB2 PosgreSQL MySQL Sybase
Prof. Rmulo Alencar Banco de Dados para Redes 17
Modelo de Dados
Modelo Relacional Representao grfica
18
Modelo de Dados
Modelo Orientado a Objetos Baseado na teoria da Programao Orientada a Objetos Dcada de 90 Dados representados em funo de seus Dados Comportamentos Forte base filosfica Representao do mundo real
19
Modelo de Dados
Modelo Orientado a Objetos Conceitos de Classes Propriedades Mtodos Relacionamentos Associao Composio Herana Exemplos O2 Jasmine
Prof. Rmulo Alencar Banco de Dados para Redes 20
Modelo de Dados
Modelo Orientado a Objetos Representao grfica
21
Modelo de Dados
Modelo Objeto-Relacional Une a alta representatividade e abstrao do Modelo OO com o forte desempenho e grau de consistncia do Modelo Relacional Em alto nvel Orientado a objetos Em baixo nvel Relacional Usurio manipula objetos, mas SGBD persiste tabelas A maioria dos SGBDs relacionais atuais so tambm objeto-relacionais SQL Server, Oracle, PostgreSQL, etc
Prof. Rmulo Alencar Banco de Dados para Redes 22
Modelo de Dados
Modelo XML Dados baseados em documentos XML Extensible Markup Language Dados representados como uma rvore de elementos (tags) XML Similar ao Modelo Hierrquico Uso forte na rea de Integrao de Dados Exemplo Tamino
23
Modelo de Dados
Modelo XML Representao grfica
24
Modelo de Dados
Modelo XML Representao grfica
<bookstore> <book category="COOKING"> <title lang="en">Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </book> <book category="CHILDREN"> <title lang="en">Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> <book category="WEB"> <title lang="en">Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price> </book> </bookstore> Prof. Rmulo Alencar Banco de Dados para Redes 25
Esquema / Estado de um BD
Esquema de um BD Estrutura do BD Descrio do BD Conjunto de elementos/entidades/objetos/itens que compem Estado de um BD
26
Arquitetura de 3 Esquemas
Esquema Interno Fsico Como os dados esto armazenados fisicamente Esquema Conceitual Lgico Abstrato Como o usurio percebe os dados Baseado no Modelo de Dados adotado
27
28
Tipos de Usurios do BD
Usurios Finais Usurios Indiretos Utilizam o SGBD atravs de uma aplicao O usurio real a aplicao Usurio Avanado
Conversa com o SGBD atravs do uso de uma linguagem de consulta Acessa o SGBD utilizando uma ferramenta de manipulao de dados Est interessado em dados
29
30
Arquitetura do SBD
Sistema de Banco de Dados (SBD) Sistema Gerenciador de Banco de Dados (SGBD) Banco de Dados (BD) SBD = SGBD + BD
31
Processador de Consultas
Sistema de Armazenamento
Gerenciador de Arquivo
SGBD
Fragmentos de cdigo
BD SBD
32
ndices
Arquivos de dados
Catlogo
Pr-Compilador DML
Traduo de expresses DML em chamadas de procedimentos (rotinas) da linguagem hospedeira
Interpretador DDL
Interpretao de comandos DDL e armazenamento deles no catlogo Tabelas contendo metadados
Mecanismo de Consultas
Otimizao de gerao de planos de execuo de consultas
Prof. Rmulo Alencar Banco de Dados para Redes 33
Gerenciador de Buffer
Acessa objetos em disco e os carrega na memria principal SGBD possui uma rea de buffer em memria principal Mapeamento: Bloco Pgina Definio da poltica de alocao do buffer MRU, LRU, FIFO, LIFO, etc
Gerenciador de Arquivo
Responsvel pelo armazenamento fsico em disco Gerencia a alocao de espao em disco
Prof. Rmulo Alencar Banco de Dados para Redes 34
35
Modelo Relacional
Proposto por Edgar Codd Funcionrio da IBM Em 1970 Baseado em Teoria dos conjuntos Lgica de predicados Forte base matemtica
37
Modelo Relacional
Modelo de dados mais popular do mercado Simplicidade de representao Alto desempenho Garantia de consistncia Exemplos
Modelo Relacional
Dados so representados como Relaes Relao Sub-conjunto dos produtos cartesianos entre os conjuntos domnio de seus atributos Na prtica, utilizado o conteito de Tabela Tabela Dados so organizados em linhas e colunas
Cada linha representa um indivduo Cada coluna representa um atributo dos indivduos
39
Modelo Relacional
Exemplo de Tabela Tabela de Funcionrios
matricula 1 2 3 4 5 Joo Jos Maria Pedro Paulo nome cpf 111.111.111-11 endereco Rua ABC, 123 salario 1500,00 2500,00 2000,00 3000,00 1500,00
222.222.222-22 Av. XYZ, 456 333.333.333-33 Rua DEF, 222 444.444.444-44 Av. JKL, 555 555.555.555-55 Rua GHI, 789
40
Modelo Relacional
Operadores lgebra Relacional Clculo Relacional
Permitem que os dados das relaes sejam manipulados So os meios oficiais de manipulao de dados no Modelo Relacional
41
Modelo Relacional
Linguagens de consulta Permitem manipulao facilitada dos dados de um BD relacional Na prtica, so o padro para manipulao de dados relacionais SQL Padro do mercado Geralmente declarativas Voc diz o que quer, mas no como quer que seja executado Comumente convertidas para lgebra relacional durante a execuo
42
Modelo Relacional
Restries de Integridade Conjunto de regras que, se aplicadas, garantem consistncia ao BD Mais populares Restrio de Domnio Restrio de Chave Restrio de Integridade Referencial Regras de Negcio
43
Modelo Relacional
Restries de Integridade Restrio de Domnio Um atributo possui um conjunto domnio relacionado
A matrcula de um funcionrio, por exemplo, possui como conjunto domnio o conjunto dos nmeros inteiros
A Restrio de Domnio diz que, necessariamente, o valor de um atributo faz parte do conjunto domnio do mesmo
Desta forma, torna-se impossvel atribuir um valor diferente de um nmero inteiro a uma matrcula Garantia de integridade!
44
Modelo Relacional
Restries de Integridade Restrio de Domnio Na prtica, a Restrio de Domnio implementada atravs de
Indicao de tipos de dados Regras de checagem (verificao) Checks Permisso (ou no) de valores nulos
45
Modelo Relacional
Restries de Integridade Restrio de Chave Existe um sub-conjunto diferente de vazio do conjunto total de atributos que identifica cada entidade da relao
Valores no se repetem!
A Restrio de Chave garante que um indivduo do mundo real no aparea mais de uma vez na mesma tabela
Garantia de integridade!
Uma tabela pode ter vrias chaves, mas apenas uma delas ser a chave primria
As outras sero chaves candidatas
Modelo Relacional
Restries de Integridade Restrio de Chave Segundo o Modelo Relacional, toda relao precisa ter ao menos uma chave
Teoria dos Conjuntos Um conjunto no pode possuir elementos repetidos Para garantir isso, uma chave deve existir!
Modelo Relacional
Restries de Integridade Restrio de Integridade Referencial Uma chave estrangeira um conjunto de campos de uma tabela que chave primria em outra tabela
Utilizada para representar relacionamentos Chave estrangeira funciona como um ponteiro para a outra tabela
A Restrio de Integridade Referencial diz que os possveis valores que chave estrangeira pode assumir em sua tabela esto limitados aos valores da chave primria relacionada a ela na outra tabela
Garantia de integridade!
48
Modelo Relacional
Restries de Integridade Restrio de Integridade Referencial Exemplo
Funcionrios
matrcula 1 2 3 4 nome Joo Jos Maria Pedro lotacao 2 1 2 3
Departamentos
codigo 1 2 3 nome Gerncia Financeiro Vendas
Como a coluna lotacao chave estrangeira de Departamentos em Funcionrios, os valores dela esto limitados aos valores da chave primria de Departamentos: a coluna codigo
Prof. Rmulo Alencar Banco de Dados para Redes 49
Modelo Relacional
Restries de Integridade Regras de Negcio Quando as restries de dados so demasiadamente complexas, comum que elas sejam colocadas na aplicao
Pois muitas vezes o SGBD nem mesmo tem como implement-las Ainda que o SGBD possa implement-las, sua aplicao pode interferir no desempenho do restante do sistema SGBD otimizado para recuperar dados!
50
Modelo Relacional
Restries de Integridade Regras de Negcio Exemplo
Um cliente s poder contrair um emprstimo se possuir salrio acima de R$3.000,00, no possuir restries de crdito nos ltimos cinco anos, no possuir outros emprstimos em outras instituies bancrias, for casado e no possuir mais que trs filhos Como implementar eficientemente num BD?
51
SQL
Structured Query Language Linguagem de consulta para SGBDs relacionais
52
SQL
Histrico: Desenvolvida pela IBM Incio dos anos 70 Para o uso com o SGBD System R Inicialmente chamada SEQUEL Ao final dos anos 70, IBM e ORACLE utilizavam SQL como linguagem de consulta
53
SQL
Composta por: DML (Data Manipulation Language) Consultas e atualizaes Dados
DDL (Data Definition Language) Alteraes no esquema do BD Estrutura DCL (Data Control Language) Controle de usurios e permisses Acesso DTL (Data Transaction Language) Controle de transaes Multiprocessamento
Prof. Rmulo Alencar Banco de Dados para Redes 54
DDL
Permite manipular a estrutura do BD Comandos bsicos: CREATE Criao de objetos do BD DROP Excluso de objetos do BD ALTER Alterao de objetos do BD
55
DDL
Aplicados a tabelas: CREATE TABLE Criao de tabelas DROP TABLE Excluso de tabelas ALTER TABLE Alterao de tabelas
56
CREATE TABLE
Comando de criao de tabelas Sintaxe: CREATE TABLE nome_tabela ( coluna1 tipo_de_dados [NULL|NOT NULL] [DEFAULT valor1], coluna2 tipo_de_dados [NULL|NOT NULL] [DEFAULT valor2], coluna3 tipo_de_dados [NULL|NOT NULL] [DEFAULT valor3], restrio_de_integridade1, restrio_de_integridade2, )
Prof. Rmulo Alencar Banco de Dados para Redes 57
CREATE TABLE
Sintaxe das restries de integridade: Chave primria
CONSTRAINT nome_restrio PRIMARY KEY(colunas)
Chave candidata
CONSTRAINT nome_restrio UNIQUE(colunas)
Checagem
CONSTRAINT nome_restrio CHECK(expresso)
Chave estrangeira
CONSTRAINT nome_restrio FOREIGN KEY(colunas) REFERENCES tabela(colunas) [ON UPDATE ao_referencial] [ON DELETE ao_referencial]
Prof. Rmulo Alencar Banco de Dados para Redes 58
CREATE TABLE
Valor nulo Quando a coluna no admitir valores nulos Deve-se usar NOT NULL na definio Quando a coluna admitir valores nulos Pode-se usar NULL Ou simplesmente no indicar nada Importante Chaves primrias no podem admitir valores nulos Valor DEFAULT o valor atribudo automaticamente coluna quando um valor especfico no informado
Prof. Rmulo Alencar Banco de Dados para Redes 59
CREATE TABLE
Restrio de Chave Estrangeira Aes Referenciais CASCADE
Propaga a alterao ou remoo da chave primria para a chave estrangeira
RESTRICT
A alterao ou remoo da chave primria no possvel se existirem valores correspondentes na chave estrangeira
NO ACTION
No executa qualquer ao na chave estrangeira quando a chave primria alterada ou removida
60
CREATE TABLE
Restrio de Chave Estrangeira Aes Referenciais SET DEFAULT
Altera o valor da chave estrangeira para o valor DEFAULT da coluna quando a chave primria alterada ou removida
SET NULL
Altera o valor da chave estrangeira para o valor NULL quando a chave primria alterada ou removida
61
CREATE TABLE
Exemplo Criao da tabela de departamentos:
CREATE TABLE Departamentos ( codigo INT NOT NULL, nome VARCHAR(50) NOT NULL, CONSTRAINT pk_departamentos PRIMARY KEY(codigo) )
62
CREATE TABLE
Exemplo Criao da tabela de funcionrios:
CREATE TABLE Funcionarios ( matricula INT NOT NULL, nome VARCHAR(50) NOT NULL, cpf CHAR(11) NOT NULL, salario FLOAT NOT NULL, lotacao INT, CONSTRAINT pk_funcionarios PRIMARY KEY(matricula), CONSTRAINT un_funcionarios_cpf UNIQUE(cpf), CONSTRAINT ck_funcionarios_salario CHECK(salario >= 0), CONSTRAINT fk_funcionarios_departamentos FOREIGN KEY(lotacao) REFERENCES Departamentos(codigo) )
Prof. Rmulo Alencar Banco de Dados para Redes 63
CREATE TABLE
Restries de integridade podem ser reduzidas Nomes podem ser omitidos O SGBD atribuir automaticamente os nomes, de acordo com seu padro Quando a chave primria ou candidata possuir apenas uma coluna, sua indicao pode ficar na prpria definio da coluna Apenas quando possuir uma s coluna! Na criao da chave estrangeira, a coluna referenciada pode ser omitida Ser, por padro, a chave primria da tabela referenciada
Prof. Rmulo Alencar Banco de Dados para Redes 64
CREATE TABLE
Exemplo Criao da tabela de funcionrios:
CREATE TABLE Funcionarios ( matricula INT PRIMARY KEY NOT NULL, nome VARCHAR(50) NOT NULL, cpf CHAR(11) UNIQUE NOT NULL, salario FLOAT NOT NULL, lotacao INT, CHECK(salario >= 0), FOREIGN KEY(lotacao) REFERENCES Departamentos )
Prof. Rmulo Alencar Banco de Dados para Redes 65
DROP TABLE
Comando de excluso de tabelas Sintaxe:
66
DROP TABLE
Exemplo Excluso da tabela de funcionrios:
67
DROP TABLE
Importante! Todos os registros da tabela de funcionrios seriam excludos, junto com sua estrutura As excluses seriam registradas no arquivo de LOG do BD Uma recuperao das linhas poderia ser efetuada depois da excluso
Existe um comando similar, chamado TRUNCATE Exclui a estrutura da tabela e suas linhas Mas no registra as excluses no arquivo de LOG
Mais rpido, mas extremamente perigoso!
Prof. Rmulo Alencar Banco de Dados para Redes 68
DROP TABLE
Importante! As restries de integridade devem ser sempre respeitadas! Caso tentssemos excluir a tabela de departamentos com o comando DROP a seguir
69
ALTER TABLE
Comando de alterao de tabelas Sintaxe:
ALTER TABLE nome_tabela ADD [CONSTRAINT] nome_objeto nova_definio ALTER TABLE nome_tabela DROP|ALTER COLUMN|CONSTRAINT nome_objeto [nova_definio]
70
ALTER TABLE
Exemplo Incluso da coluna rg na tabela de funcionrios:
ALTER TABLE
Exemplo
ALTER TABLE Funcionarios ADD CONSTRAINT un_funcionarios_rg UNIQUE(rg) ou ALTER TABLE Funcionarios ADD UNIQUE(rg)
Alterao na restrio de checagem do salrio da tabela de funcionrios:
72
DML
Permite consultas e atualizaes aos dados
SELECT
Comando bsico de consulta Sintaxe: SELECT lista_de_colunas FROM lista_de_tabelas [WHERE condio] [GROUP BY expresso_de_agrupamento [HAVING condio]] [ORDER BY expresso_de_ordenamento]
74
SELECT
Exemplo: Tabela Funcionarios
id 1 2 3 4
75
SELECT
Exemplo: Consulta que retorne os nomes e salrios de todos os funcionrios que tenham salrios a partir de R$ 2.000,00. Consulta em SQL:
76
SELECT
Exemplo: Resultado:
nome Alex Joo salario 2000 2500
77
SELECT
Toda consulta em SQL convertida para lgebra
nome,salario(
salario>=2000(Funcionarios))
78
INSERT
Comando de insero Sintaxe 1:
79
INSERT
Exemplo: Adicione o funcionrio Joo da Silva, de matrcula 123 e salrio R$2.500,00 tabela de funcionrios Consulta em SQL:
INSERT INTO Funcionarios(matricula, nome, salario) VALUES (123, Joo da Silva, 2500)
80
UPDATE
Comando de alterao Sintaxe:
81
UPDATE
Exemplo: Os funcionrios com salrios menores que recebero um aumento de 25% Consulta em SQL:
R$2.000,00
UPDATE Funcionarios SET salario = salario * 1.25 WHERE salario < 2000
82
DELETE
Comando de remoo Sintaxe:
83
DELETE
Exemplo: Apague da tabela de funcionrios todos os funcionrios de salrio inferior a R$1.000,00 Consulta em SQL:
84
ORDER BY
Clusula para ordenar os resultados de um SELECT A clusula ORDER BY opcional
85
ORDER BY
Exemplo: Tabela Funcionarios
matricula 1 2 3 4
86
ORDER BY
Exemplo: Consulta que retorne os nomes e salrios de todos os funcionrios ordenados pelo nome do funcionrio Consulta em SQL:
87
ORDER BY
Exemplo: Resultado:
nome Alex Joo Jos Rmulo salario 2000 2500 1500 1000
88
ORDER BY
A expresso de ordenao deve ser uma lista de
89
ORDER BY
Exemplo: Consulta que retorne os nomes dos funcionrios ordenados pelos salrios de forma decrescente Consulta em SQL:
90
ORDER BY
Exemplo: Resultado:
nome Joo Alex Jos Rmulo
91
Produto Cartesiano
Operao vinda diretamente da teoria dos conjuntos Cada linha de uma tabela combinada com todas as linhas da outra tabela, formando uma linha no resultado contendo todas as colunas das duas tabelas Sintaxe Lista de tabelas separadas por vrgula na clusula FROM do comando SELECT
92
Produto Cartesiano
Exemplo: Tabela Funcionarios
matricula 1 2 3 nome Rmulo Alex Joo salario 1000 2000 2500 lotacao 1 2 2
Tabela Departamentos
codigo 1 2 3 nome_dep Gerncia Financeiro Vendas
93
Produto Cartesiano
Exemplo:
94
Produto Cartesiano
Exemplo: Resultado
matricula 1 1 1 2 2 2 3 3 3 nome Rmulo Rmulo Rmulo Alex Alex Alex Joo Joo Joo salario 1000 1000 1000 2000 2000 2000 2500 2500 2500 lotacao 1 1 1 2 2 2 2 2 2 codigo 1 2 3 1 2 3 1 2 3 nome_dep Gerncia Financeiro Vendas Gerncia Financeiro Vendas Gerncia Financeiro Vendas
95
Produto Cartesiano
Exemplo:
SELECT nome, nome_dep FROM Funcionarios, Departamentos WHERE salario > 1500
96
Produto Cartesiano
Exemplo: Resultado
nome Alex Alex Alex Joo Joo Joo nome_dep Gerncia Financeiro Vendas Gerncia Financeiro Vendas
97
Juno (JOIN)
Geralmente o produto cartesiano traz resultados
estranhos
Nos exemplos anteriores, no faz sentido combinar departamentos diferentes da lotao do funcionrio
Um produto cartesiano pode ser combinado com a
98
Juno (JOIN)
Quando um produto cartesiano (na clusula FROM) est
99
Juno (JOIN)
Exemplo:
100
Juno (JOIN)
Exemplo: Resultado
nome Rmulo Alex Joo nome_dep Gerncia Financeiro Financeiro
101
Juno (JOIN)
Existe uma sintaxe especfica para juno: SELECT lista_de_colunas FROM tabela1 [INNER] JOIN tabela2 ON condio
102
Juno (JOIN)
Exemplo:
SELECT nome, nome_dep (1) FROM Funcionarios, Departamentos WHERE lotacao = codigo SELECT nome, nome_dep (2) FROM Funcionarios JOIN Departamentos ON lotacao = codigo
Prof. Rmulo Alencar Banco de Dados para Redes 103
Juno (JOIN)
As duas sintaxes so equivalentes Retornam exatamente os mesmos resultados Em teoria, a sintaxe (2) mais rpida Quando um SGBD recebe uma consulta na sintaxe (1), ele a converte para a sintaxe (2) Durante a fase de otimizao Heurstica
104
Juno Externa
um tipo de juno em que as linhas de uma tabela podem
ser inseridas no resultado ainda que no haja correspondncia delas com linhas da outra tabela Trs tipos
Left Outer Join As linhas da tabela esquerda sempre sero includas no resultado Right Outer Join As linhas da tabela direita sempre sero includas no resultado Full Outer Join As linhas das duas tabelas sempre sero includas no resultado
Juno Externa
Sintaxe: SELECT lista_de_colunas FROM tabela1 LEFT | RIGHT | FULL [OUTER] JOIN tabela2 ON condio
106
Juno Externa
Exemplo: Tabela Funcionarios
matricula 1 2 3 nome Rmulo Alex Joo salario 1000 2000 2500 lotacao 1 2 NULO
Tabela Departamentos
codigo 1 2 3 nome_dep Gerncia Financeiro Vendas
107
Juno Externa
Exemplo: Consulta SELECT nome, nome_dep FROM Funcionarios LEFT OUTER JOIN Departamentos ON lotacao = codigo
Resultado
108
Juno Externa
Exemplo: Consulta SELECT nome, nome_dep FROM Funcionarios RIGHT OUTER JOIN Departamentos ON lotacao = codigo
Resultado
109
Juno Externa
Exemplo: Consulta SELECT nome, nome_dep FROM Funcionarios FULL OUTER JOIN Departamentos ON lotacao = codigo
Resultado
Apelidos de tabelas
possvel apelidar as tabelas envolvidas nas suas
consultas
Ou seja, dar novos nomes s tabelas, durante a execuo da sua consulta
Bastante til para
Alterar os nomes para facilitar desenvolvimento da consulta Referenciar colunas que originalmente possuem o mesmo nome (ambguas) Permitir auto-juno
111
Apelidos de tabelas
Exemplo: Retorne o nome do funcionrio e o nome do departamento onde ele est lotado Consulta em SQL:
112
Apelidos de colunas
Exemplo: Resultado:
f.nome Rmulo Alex Joo d.nome Gerncia Financeiro Financeiro
113
Apelidos de colunas
possvel apelidar as colunas dos resultados das suas
consultas
Ou seja, dar novos nomes a colunas do seu resultado
Bastante til para
Alterar os nomes de acordo com a necessidade de uso Desambiguar colunas que originalmente possuem o mesmo nome
114
Apelidos de colunas
Exemplo: Retorne o nome do funcionrio e o nome do departamento onde ele est lotado Consulta em SQL:
SELECT f.nome as nome_fun, d.nome as nome_dep FROM Funcionarios f, Departamentos d WHERE codigo = lotacao
115
Apelidos de colunas
Exemplo: Resultado:
nome_fun Rmulo Alex Joo nome_dep Gerncia Financeiro Financeiro
Importante! No resultado da consulta, os nomes das colunas passam a ser nome_fun e nome_dep
Garantido!
116
DISTINCT
No Modelo Relacional, assim como na Teoria dos
117
DISTINCT
Exemplo: Retorne o nome dos departamentos que possuem funcionrios lotados Se executarmos a consulta em SQL:
118
DISTINCT
Exemplo: Obteremos o resultado:
nome_dep Gerncia Financeiro Financeiro
119
DISTINCT
Exemplo: Se alterarmos a consulta em SQL para: SELECT DISTINCT d.nome as nome_dep FROM Funcionarios f, Departamentos d WHERE codigo = lotacao Obteremos o resultado: nome_dep
Gerncia Financeiro
120
UNION
Assim como na teoria dos conjuntos, possvel utilizar a
121
UNION
Restries para o uso da unio As relaes envolvidas devem obrigatoriamente ter a mesma quantidade de colunas As colunas de mesma posio em cada tabela devem ter tipos de dados compatveis entre si
122
UNION
Sintaxe: SELECT UNION [ALL] SELECT
executada uma unio entre o resultado do primeiro SELECT e o resultado do segundo SELECT
123
UNION
Tabela Funcionarios
matricula 1 2 3 4 nome_func Rmulo Alex Joo Pedro end_func Rua ABC Rua DEF Av XYZ Rua JKL salario 1000 2000 2500 1500
Tabela Clientes
codigo 1 2 3 nome_cliente Ana Maria Pedro end_cliente Rua GHI Av TUV Rua JKL
124
UNION
Problema: deseja-se criar uma mala direta para todos os
funcionrios e clientes da empresa. Como conseguir os nomes e endereos de todos os funcionrios e clientes juntos?
Soluo: usar UNION!
125
UNION
Soluo:
SELECT nome_func, end_func FROM Funcionarios UNION SELECT nome_cliente, end_cliente FROM Clientes
126
UNION
Resultado:
nome_func Rmulo Alex Joo Ana Maria Pedro end_func Rua ABC Rua DEF Av XYZ Rua GHI Av TUV Rua JKL
Importante! Os nomes das colunas no resultado sero os nomes das colunas da primeira relao
Apelidos para as colunas podem ser utilizados para que os nomes das colunas fiquem mais adequados
127
UNION
Soluo com apelidos:
SELECT nome_func as nome, end_func as endereco FROM Funcionarios UNION SELECT nome_cliente, end_cliente FROM Clientes
128
UNION
Resultado:
endereco Rua ABC Rua DEF Av XYZ Rua GHI Av TUV Rua JKL
129
UNION
Curiosidade A operao de unio remove tuplas repetidas do resultado Caso no tenha percebido, Pedro funcionrio e cliente ao mesmo tempo
Ele foi includo apenas uma vez no resultado do UNION!
Caso seja importante manter as tuplas repetidas, deve ser utilizado o comando UNION ALL
130
UNION
Soluo com UNION ALL:
SELECT nome_func as nome, end_func as endereco FROM Funcionarios UNION ALL SELECT nome_cliente, end_cliente FROM Clientes
131
UNION
Resultado:
nome Rmulo Alex Joo Pedro Ana Maria Pedro endereco Rua ABC Rua DEF Av XYZ Rua JKL Rua GHI Av TUV Rua JKL
Valores Nulos
Na teoria do Modelo Relacional, valores nulos no
existem!
Todo e qualquer atributo deve conter um valor
Mas os SGBDs relacionais permitem que atributos
133
Valores Nulos
Interpretao errnea sobre o valor nulo: Valor no existe Significado correto de um valor nulo Valor existe, mas no se sabe no momento Uma coisa existir, mas no se saber; outra coisa no
existir!
134
Valores Nulos
Tabela Funcionarios
data_nascimento
1000,00 04/10/1970 1500,00 06/09/1980 3000,00 NULO 2000,00 01/01/2000 2500,00 NULO
135
Valores Nulos
Exemplo: Quais os nomes dos funcionrios que no possuem data de nascimento informada?
136
Valores Nulos
Resultado:
137
Valores Nulos
Exemplo: Quais os nomes dos funcionrios que possuem data de nascimento informada?
138
Valores Nulos
Resultado:
139
Valores Nulos
Importante Toda e qualquer comparao a valores nulos que no seja feita com o operador IS (ou IS NOT) retornar falso!
A consulta
140
BETWEEN
O operador ternrio BETWEEN, bastante utilizado na
141
BETWEEN
Exemplo: Qual o nome dos funcionrios que ganham salrio entre R$1.500,00 e R$2.500,00? Soluo:
SELECT nome FROM Funcionarios WHERE salario BETWEEN 1500 AND 2500
142
BETWEEN
A consulta do exemplo anterior equivalente a
SELECT nome FROM Funcionarios WHERE salario >= 1500 AND salario <= 2500
Os pontos extremos fazem parte do intervalo!
143
BETWEEN
Se o problema fosse: Qual o nome dos funcionrios que ganham salrio maior que R$1.500,00 e menor que R$2.500,00? Soluo:
SELECT nome FROM Funcionarios WHERE salario >1500 AND salario < 2500
BETWEEN no poderia ser utilizado!
144
Funes de Agregao
Operao de Agregao Reduzir um conjunto de dados a um valor que represente o conjunto inteiro De acordo com o efeito que se deseja
Por exemplo: Notas: 10, 9.5, 8, 7.5, 9 Qual a mdia das notas?
Mdia = (10 + 9.5 + 8 + 7.5 + 9) / 5 = 8.8
145
Funes de Agregao
Funes de agregao mais comuns SUM: soma COUNT: contagem AVG: mdia MAX: mximo MIN: mnimo Algumas funes de agregao podem ser exclusivas de
cada SGBD
146
Funes de Agregao
Exemplo: Qual o valor da folha de pagamento da empresa (soma dos salrios de todos os funcionrios)? SELECT SUM(salario) FROM Funcionarios
147
Funes de Agregao
Exemplo: Qual o maior de todos os salrios? SELECT MAX(salario) FROM Funcionarios
148
Funes de Agregao
Exemplo: Qual a quantidade total de funcionrios? SELECT COUNT(*) FROM Funcionarios
Qual a quantidade de funcionrios que ganham mais de R$2.000,00? SELECT COUNT(*) FROM Funcionarios WHERE salario > 2000
149
Funes de Agregao
comum o uso de apelidos Nomes mais adequados e independentes do SGBD Exemplo:
Qual a folha de pagamento total e mdia salarial dos funcionrios? SELECT SUM(salario) AS folha_pgto, AVG(salario) AS media_salarial FROM Funcionarios
150
Agrupamento
A operao de agrupamento cria grupos de linhas
Uma vez que os grupos esto criados, operaes especficas podem ser aplicadas a eles Exemplo: Qual a mdia salarial dos funcionrios por lotao? SELECT lotacao, AVG(salario) FROM Funcionarios GROUP BY lotacao Qual o maior e o menor salrio de cada lotacao? SELECT lotacao, MAX(salario), MIN(salario) FROM Funcionarios GROUP BY lotacao
Prof. Rmulo Alencar Banco de Dados para Redes 151
Agrupamento
Exemplo: Quais as lotaes com mdia salarial dos funcionrios maior que R$2.000,00? SELECT lotacao FROM Funcionarios GROUP BY lotacao HAVING AVG(salario) > 2000 A clusula HAVING efetua filtragens dentro de cada grupo criado Filtragens no HAVING podem conter funes de agregao
152
Agrupamento
Exemplo: Quais os nomes dos departamentos com mdia salarial dos funcionrios maior que R$2.000,00? SELECT D.nome FROM Funcionarios F JOIN Departamentos D ON F.lotacao = D.codigo GROUP BY D.nome HAVING AVG(F.salario) > 2000 Agrupamento pode ser utilizado em conjunto com as outras operaes do SELECT (como a juno)
153
Sub-consultas
Algumas consultas precisam buscar valores j presentes
154
Sub-consultas
Operadores utilizados com sub-consultas IN: testa se o valor a ser comparada est dentro dos resultados da sub-consulta {=|<>|>|<|>=|<=} ANY: testa se a operao desejada verdadeira para qualquer dos resultados da sub-consulta {=|<>|>|<|>=|<=} ALL: testa se a operao desejada verdadeira para todos os resultados da sub-consulta EXISTS: testa se a sub-consulta possui resultados
Sub-consultas
Exemplos Qual o nome do funcionrio de maior salrio?
SELECT nome FROM Funcionarios WHERE salario IN (SELECT max(salario) FROM Funcionarios) Qual o nome do funcionrio de segundo maior salrio? SELECT nome FROM Funcionarios WHERE salario IN (SELECT max(salario) FROM Funcionarios WHERE salario < (SELECT max(salario) FROM Funcionarios))
Prof. Rmulo Alencar Banco de Dados para Redes 156
Sub-consultas
Se a sub-consulta tiver comparaes de valores com
Sub-consultas
Exemplo Tabela Funcionarios
matricula 1 2 3 nome Rmulo Alex Joo salario 1000 2000 2500 lotacao 1 2 2
Tabela Projetos
codigo 1 2 nome_pro Projeto X Projeto Y
Tabela Func_Proj
matricula 1 1 2 codigo 1 2 2
158
Sub-consultas
Exemplos Quais o nomes dos funcionrios que esto trabalhando em algum projeto?
SELECT nome FROM Funcionarios F WHERE EXISTS (SELECT matricula FROM Func_Proj WHERE matricula = F.matricula) A consulta acima poderia ser reescrita como SELECT nome FROM Funcionarios WHERE matricula IN (SELECT matricula FROM Func_Proj)
Prof. Rmulo Alencar Banco de Dados para Redes 159
Sub-consultas
Exemplos Outra forma de resolver a consulta de funcionrio de maior salrio:
SELECT nome FROM Funcionarios F WHERE salario > ALL (SELECT salario FROM Funcionarios WHERE matricula <> F.matricula)
Nem sempre ser possvel evitar sub-consultas
correlacionadas
Quando for, evite-as!
Prof. Rmulo Alencar Banco de Dados para Redes 160
Vises
Os SGBD relacionais suportam um tipo de objeto
chamado viso
Tabelas virtuais Baseadas em consultas SQL comparvel a promover uma consulta SQL ao nvel de tabela
Exemplo Suponha que a seguinte consulta SQL seja demasiadamente utilizada SELECT nome, nome_dep FROM Funcionarios JOIN Departamentos ON lotacao=codigo
Prof. Rmulo Alencar Banco de Dados para Redes 161
Vises
Exemplo Podemos criar uma viso chamada Func_Dep_View, com o comando CREATE VIEW Func_Dep_View AS SELECT nome, nome_dep FROM Funcionarios JOIN Departamentos ON lotacao=codigo
Assim, sempre que o resultado da consulta anterior for necessrio, bastar se executar a consulta SELECT * FROM Func_Dep_View A viso funciona como uma tabela (virtual)!
Prof. Rmulo Alencar Banco de Dados para Redes 162
Vises
Vantagens O usurio final ver apenas o resultado da viso, no precisando saber os detalhes de como esto construdas as tabelas ou de como foi especificada a consulta Encapsulamento Desacoplamento Melhor manutenibilidade Vises podem receber permisses de acesso personalizadas Segurana
163