Sie sind auf Seite 1von 163

Banco de Dados para Redes

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

Banco de Dados para Redes

Motivao para o uso de BDs


Processamento de arquivo (anos 60 e 70) Paradigma de processamento de dados Cada aplicao responsvel por definir e manter seus prprios dados
Programa 1 Descrio de dados Programa 2 Descrio de dados Programa 3 Descrio de dados

Arquivo A Arquivo B Arquivo C


Prof. Rmulo Alencar Banco de Dados para Redes 3

Motivao para o uso de BDs


Dados em Arquivos Redundncia e inconsistncia Dificuldade de acesso aos dados Isolamento dos dados Problemas de integridade Anomalias de acesso concorrente Problemas de segurana

Prof. Rmulo Alencar

Banco de Dados para Redes

Motivao para o uso de BDs


Redundncia pode levar a inconsistncias! Programa Financeiro Aluno possui endereo Programa Acadmico Aluno possui endereo

O que acontece se o aluno mudar de endereo e apenas o Programa Acadmico for atualizado?

Prof. Rmulo Alencar

Banco de Dados para Redes

Motivao para o uso de BDs


Um controle de concorrncia mal executado pode levar a

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

Motivao para o uso de BDs


Tecnologia de Banco de Dados Definio e gerenciamento centralizado de dados Independncia de dados
Alterao na organizao lgica ou fsica dos dados no implica na alterao de programas

Eliminar redundncia de dados


Eliminar inconsistncia de dados

Facilitar acesso a dados atravs de uma linguagem de consulta


SQL: Padro de mercado

Evitar inconsistncias produzidas pelo acesso concorrente Recuperar estado consistente dos dados aps falha
Prof. Rmulo Alencar Banco de Dados para Redes 7

Motivao para o uso de BDs


Tecnologia de Banco de Dados
Programa 1 Programa 2 Programa 3

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

Garantir uma viso abstrata dos dados


Prof. Rmulo Alencar Banco de Dados para Redes 8

Modelo de Dados
Representao conceitual dos dados Alto nvel Modelo abstrato Independente de implementao

Prof. Rmulo Alencar

Banco de Dados para Redes

Modelo de Dados
Principais modelos Hierrquico Rede Relacional Orientado a Objetos Objeto-Relacional XML

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Prof. Rmulo Alencar

Banco de Dados para Redes

11

Modelo de Dados
Modelo Hierrquico Representao grfica

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Herda caractersticas diretas da Teoria dos Grafos


Tanto os prs quanto os contras!

Mais representativo que o Modelo Hierrquico Porm mais complexo


Prof. Rmulo Alencar Banco de Dados para Redes 13

Modelo de Dados
Modelo em Rede Representao grfica

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Prof. Rmulo Alencar

Banco de Dados para Redes

23

Modelo de Dados
Modelo XML Representao grfica

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Conjunto de valores armazenados em um BD em um dado momento

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Prof. Rmulo Alencar

Banco de Dados para Redes

27

Arquitetura de 3 Esquemas (2)


Esquema Externo Viso (view) de dados Como um usurio (ou grupo de usurios) visualiza os dados Permite restringir ou facilitar o acesso aos dados So possveis diversas vises diferentes para um mesmo esquema conceitual

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Prof. Rmulo Alencar

Banco de Dados para Redes

29

Tipos de Usurios do BD (2)


Administrador de BD (DBA) Manipula a estrutura do BD (esquema) Utiliza uma ferramenta de administrao Possui privilgios prprios, geralmente no disponveis para os outros tipos de usurios

Prof. Rmulo Alencar

Banco de Dados para Redes

30

Arquitetura do SBD
Sistema de Banco de Dados (SBD) Sistema Gerenciador de Banco de Dados (SGBD) Banco de Dados (BD) SBD = SGBD + BD

Prof. Rmulo Alencar

Banco de Dados para Redes

31

Arquitetura do SBD (2)


Programadores Programa Aplicativo Pre-compilador DML Usurio experiente Consulta Compilador DML Mecanismo de Consultas Gerenciador de Buffer Gerenciador de Transaes DBA Esquema Interpretador DDL

Processador de Consultas

Sistema de Armazenamento

Gerenciador de Arquivo

SGBD
Fragmentos de cdigo

Cdigo Objeto aplicativos

BD SBD
32

ndices

Arquivos de dados

Catlogo

Prof. Rmulo Alencar

Banco de Dados para Redes

Arquitetura do SBD (3)


SGBD Processador de Consultas Compilador DML
Anlise sinttica e semntica de expresses DML Traduo de uma expresso DML para a forma de representao interna de consulta (p.ex. lgebra relacional)

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

Arquitetura do SBD (4)


SGBD Sistema de Armazenamento Gerenciador de Transaes
Controle de concorrncia Recuperao do BD aps falhas

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

Arquitetura do SBD (5)


BD Arquivos de dados Armazena os dados ndices Estruturas de ndices para os arquivos de dados
ndices ordenados rvores B+ Arquivos grade rvores R rvores quadrante ndices no-ordenados ndice hash

Prof. Rmulo Alencar

Banco de Dados para Redes

35

Arquitetura do SBD (6)


BD Catlogo Armazena esquema do BD (metadados)
Nomes das tabelas Atributos de cada tabela Definio de ndice para uma tabela, etc

Armazena informaes estatsticas


Exemplo Cardinalidade de uma tabela Utilizadas na otimizao de consultas

Fragmentos de cdigo Stored procedures Triggers Mtodos


Prof. Rmulo Alencar Banco de Dados para Redes 36

Modelo Relacional
Proposto por Edgar Codd Funcionrio da IBM Em 1970 Baseado em Teoria dos conjuntos Lgica de predicados Forte base matemtica

Prof. Rmulo Alencar

Banco de Dados para Redes

37

Modelo Relacional
Modelo de dados mais popular do mercado Simplicidade de representao Alto desempenho Garantia de consistncia Exemplos

Oracle SQL Server DB2 PosgreSQL MySQL Sybase


Prof. Rmulo Alencar Banco de Dados para Redes 38

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

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Prof. Rmulo Alencar

Banco de Dados para Redes

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!

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Cada chave pode ser


Simples Um atributo Composta Mais de um atributo
Prof. Rmulo Alencar Banco de Dados para Redes 46

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!

Na prtica, porm, podemos ter tabelas com linhas repetidas


importante que toda tabela possua uma chave! Caso no seja possvel encontrar um conjunto de atributos para compor a chave, pode-se incluir um novo atributo com essa finalidade Chave externa Geralmente um cdigo de auto-numerao
Prof. Rmulo Alencar Banco de Dados para Redes 47

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!

Prof. Rmulo Alencar

Banco de Dados para Redes

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!

Prof. Rmulo Alencar

Banco de Dados para Redes

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?

Prof. Rmulo Alencar

Banco de Dados para Redes

51

SQL
Structured Query Language Linguagem de consulta para SGBDs relacionais

Padro de facto Linguagem declarativa Baseada na lgebra relacional e no clculo relacional

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Prof. Rmulo Alencar

Banco de Dados para Redes

55

DDL
Aplicados a tabelas: CREATE TABLE Criao de tabelas DROP TABLE Excluso de tabelas ALTER TABLE Alterao de tabelas

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Prof. Rmulo Alencar

Banco de Dados para Redes

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:

DROP TABLE nome_tabela

Prof. Rmulo Alencar

Banco de Dados para Redes

66

DROP TABLE
Exemplo Excluso da tabela de funcionrios:

DROP TABLE Funcionarios

Prof. Rmulo Alencar

Banco de Dados para Redes

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

DROP TABLE Departamentos


Antes da excluso da tabela de funcionrios, um erro iria ocorrer
A restrio de chave estrangeira seria desrespeitada!

Prof. Rmulo Alencar

Banco de Dados para Redes

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]

Prof. Rmulo Alencar

Banco de Dados para Redes

70

ALTER TABLE
Exemplo Incluso da coluna rg na tabela de funcionrios:

ALTER TABLE Funcionarios ADD rg VARCHAR(10)


Alterao do tamanho da coluna rg na tabela de funcionrios:

ALTER TABLE Funcionarios ALTER COLUMN rg VARCHAR(50)


Excluso da coluna rg na tabela de funcionrios:

ALTER TABLE Funcionarios DROP COLUMN rg


Prof. Rmulo Alencar Banco de Dados para Redes 71

ALTER TABLE
Exemplo

Incluso da restrio de chave candidata na coluna rg da tabela de funcionrios:

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:

ALTER TABLE Funcionarios ALTER CONSTRAINT ck_funcionarios_salario CHECK(salario >= 500)


Excluso da restrio de chave estrangeira na lotao na tabela de funcionrios:

ALTER TABLE Funcionarios DROP CONSTRAINT fk_funcionarios_departamentos

Prof. Rmulo Alencar

Banco de Dados para Redes

72

DML
Permite consultas e atualizaes aos dados

armazenados Comandos bsicos:


SELECT Consultas INSERT Inseres DELETE Excluses UPDATE Alteraes
Prof. Rmulo Alencar Banco de Dados para Redes 73

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]

Prof. Rmulo Alencar

Banco de Dados para Redes

74

SELECT
Exemplo: Tabela Funcionarios

id 1 2 3 4

nome Rmulo Alex Joo Jos

salario 1000 2000 2500 1500

Prof. Rmulo Alencar

Banco de Dados para Redes

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:

SELECT nome, salario FROM Funcionarios WHERE salario >= 2000

Prof. Rmulo Alencar

Banco de Dados para Redes

76

SELECT
Exemplo: Resultado:
nome Alex Joo salario 2000 2500

Importante! O resultado de um SELECT sempre uma tabela!

Prof. Rmulo Alencar

Banco de Dados para Redes

77

SELECT
Toda consulta em SQL convertida para lgebra

relacional no momento de sua execuo

SELECT nome, salario FROM Funcionarios WHERE salario >= 2000

nome,salario(

salario>=2000(Funcionarios))

Prof. Rmulo Alencar

Banco de Dados para Redes

78

INSERT
Comando de insero Sintaxe 1:

INSERT INTO tabela [(lista_de_colunas)] VALUES (lista_de_valores)


Sintaxe 2:

INSERT INTO tabela [(lista_de_colunas)] SELECT

Prof. Rmulo Alencar

Banco de Dados para Redes

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)

Prof. Rmulo Alencar

Banco de Dados para Redes

80

UPDATE
Comando de alterao Sintaxe:

UPDATE tabela SET coluna1 = valor1 [, coluna2 = valor2] [WHERE condio]

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Prof. Rmulo Alencar

Banco de Dados para Redes

82

DELETE
Comando de remoo Sintaxe:

DELETE FROM tabela [WHERE condio]

Prof. Rmulo Alencar

Banco de Dados para Redes

83

DELETE
Exemplo: Apague da tabela de funcionrios todos os funcionrios de salrio inferior a R$1.000,00 Consulta em SQL:

DELETE FROM Funcionarios WHERE salario < 1000

Prof. Rmulo Alencar

Banco de Dados para Redes

84

ORDER BY
Clusula para ordenar os resultados de um SELECT A clusula ORDER BY opcional

Quando existir deve ser a ltima do SELECT Sempre!

Prof. Rmulo Alencar

Banco de Dados para Redes

85

ORDER BY
Exemplo: Tabela Funcionarios

matricula 1 2 3 4

nome Rmulo Alex Joo Jos

salario 1000 2000 2500 1500

Prof. Rmulo Alencar

Banco de Dados para Redes

86

ORDER BY
Exemplo: Consulta que retorne os nomes e salrios de todos os funcionrios ordenados pelo nome do funcionrio Consulta em SQL:

SELECT nome, salario FROM Funcionarios ORDER BY nome

Prof. Rmulo Alencar

Banco de Dados para Redes

87

ORDER BY
Exemplo: Resultado:
nome Alex Joo Jos Rmulo salario 2000 2500 1500 1000

Importante! O resultado de um SELECT sempre uma tabela!

Prof. Rmulo Alencar

Banco de Dados para Redes

88

ORDER BY
A expresso de ordenao deve ser uma lista de

colunas ou expresses matemticas envolvendo colunas


Quando a ordenao for ascendente, deve-se utilizar a palavra ASC, ou no informar nada Quando a ordenao for descendente, deve-se utilizar a palavra DESC

Prof. Rmulo Alencar

Banco de Dados para Redes

89

ORDER BY
Exemplo: Consulta que retorne os nomes dos funcionrios ordenados pelos salrios de forma decrescente Consulta em SQL:

SELECT nome FROM Funcionarios ORDER BY salario DESC

Prof. Rmulo Alencar

Banco de Dados para Redes

90

ORDER BY
Exemplo: Resultado:
nome Joo Alex Jos Rmulo

Importante! As colunas participantes da clusula ORDER BY no precisam aparecer nos resultados

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Prof. Rmulo Alencar

Banco de Dados para Redes

93

Produto Cartesiano
Exemplo:

SELECT * FROM Funcionarios, Departamentos

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Prof. Rmulo Alencar

Banco de Dados para Redes

95

Produto Cartesiano
Exemplo:

SELECT nome, nome_dep FROM Funcionarios, Departamentos WHERE salario > 1500

Prof. Rmulo Alencar

Banco de Dados para Redes

96

Produto Cartesiano
Exemplo: Resultado
nome Alex Alex Alex Joo Joo Joo nome_dep Gerncia Financeiro Vendas Gerncia Financeiro Vendas

Prof. Rmulo Alencar

Banco de Dados para Redes

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

clusula WHERE (filtragem de linhas) para produzir resultados mais refinados

Prof. Rmulo Alencar

Banco de Dados para Redes

98

Juno (JOIN)
Quando um produto cartesiano (na clusula FROM) est

seguido de uma condio de ligao entre tabelas (na clusula WHERE)


Chamamos essa operao de JUNO

Prof. Rmulo Alencar

Banco de Dados para Redes

99

Juno (JOIN)
Exemplo:

SELECT nome, nome_dep FROM Funcionarios, Departamentos WHERE lotacao = codigo

Prof. Rmulo Alencar

Banco de Dados para Redes

100

Juno (JOIN)
Exemplo: Resultado
nome Rmulo Alex Joo nome_dep Gerncia Financeiro Financeiro

Prof. Rmulo Alencar

Banco de Dados para Redes

101

Juno (JOIN)
Existe uma sintaxe especfica para juno: SELECT lista_de_colunas FROM tabela1 [INNER] JOIN tabela2 ON condio

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Prof. Rmulo Alencar

Banco de Dados para Redes

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

A no correspondncia com a outra tabela ser sempre

completada com valores nulos


Prof. Rmulo Alencar Banco de Dados para Redes 105

Juno Externa
Sintaxe: SELECT lista_de_colunas FROM tabela1 LEFT | RIGHT | FULL [OUTER] JOIN tabela2 ON condio

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Prof. Rmulo Alencar

Banco de Dados para Redes

107

Juno Externa
Exemplo: Consulta SELECT nome, nome_dep FROM Funcionarios LEFT OUTER JOIN Departamentos ON lotacao = codigo

Resultado

nome Rmulo Alex Joo

nome_dep Gerncia Financeiro NULO

Prof. Rmulo Alencar

Banco de Dados para Redes

108

Juno Externa
Exemplo: Consulta SELECT nome, nome_dep FROM Funcionarios RIGHT OUTER JOIN Departamentos ON lotacao = codigo

Resultado

nome Rmulo Alex NULO

nome_dep Gerncia Financeiro Vendas

Prof. Rmulo Alencar

Banco de Dados para Redes

109

Juno Externa
Exemplo: Consulta SELECT nome, nome_dep FROM Funcionarios FULL OUTER JOIN Departamentos ON lotacao = codigo

Resultado

nome Rmulo Alex Joo NULO

nome_dep Gerncia Financeiro NULO Vendas


Banco de Dados para Redes 110

Prof. Rmulo Alencar

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

Prof. Rmulo Alencar

Banco de Dados para Redes

111

Apelidos de tabelas
Exemplo: Retorne o nome do funcionrio e o nome do departamento onde ele est lotado Consulta em SQL:

SELECT f.nome, d.nome FROM Funcionarios f, Departamentos d WHERE codigo = lotacao

Prof. Rmulo Alencar

Banco de Dados para Redes

112

Apelidos de colunas
Exemplo: Resultado:
f.nome Rmulo Alex Joo d.nome Gerncia Financeiro Financeiro

Importante! Quais os nomes das colunas do resultado?


Como as colunas so ambguas, no h como saber Ser dependente do SGBD Muito provavelmente seria algo prximo de f.nome e d.nome

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Prof. Rmulo Alencar

Banco de Dados para Redes

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!

Prof. Rmulo Alencar

Banco de Dados para Redes

116

DISTINCT
No Modelo Relacional, assim como na Teoria dos

Conjuntos na qual ele fundamentado, no h repetio de elementos


Mas os SGBDs comerciais permitem linhas repetidas
O comando DITINCT, parte da clusula SELECT, serve

para omitir linhas repetidas do resultado das consultas

Prof. Rmulo Alencar

Banco de Dados para Redes

117

DISTINCT
Exemplo: Retorne o nome dos departamentos que possuem funcionrios lotados Se executarmos a consulta em SQL:

SELECT d.nome as nome_dep FROM Funcionarios f, Departamentos d WHERE codigo = lotacao

Prof. Rmulo Alencar

Banco de Dados para Redes

118

DISTINCT
Exemplo: Obteremos o resultado:
nome_dep Gerncia Financeiro Financeiro

O departamento Financeiro est repetido! Como resolver?


Utilizando DISTINCT!

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Sem repetio de linhas!

Prof. Rmulo Alencar

Banco de Dados para Redes

120

UNION
Assim como na teoria dos conjuntos, possvel utilizar a

operao de unio entre relaes (tabelas)


A unio entre dois conjuntos um conjunto com todos os elementos dos conjuntos originais A unio entre duas relaes uma relao com todas as tuplas das relaes originais

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Prof. Rmulo Alencar

Banco de Dados para Redes

122

UNION
Sintaxe: SELECT UNION [ALL] SELECT

executada uma unio entre o resultado do primeiro SELECT e o resultado do segundo SELECT

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Prof. Rmulo Alencar

Banco de Dados para Redes

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!

Prof. Rmulo Alencar

Banco de Dados para Redes

125

UNION
Soluo:

SELECT nome_func, end_func FROM Funcionarios UNION SELECT nome_cliente, end_cliente FROM Clientes

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Prof. Rmulo Alencar

Banco de Dados para Redes

127

UNION
Soluo com apelidos:

SELECT nome_func as nome, end_func as endereco FROM Funcionarios UNION SELECT nome_cliente, end_cliente FROM Clientes

Prof. Rmulo Alencar

Banco de Dados para Redes

128

UNION
Resultado:

nome Rmulo Alex Joo Ana Maria Pedro

endereco Rua ABC Rua DEF Av XYZ Rua GHI Av TUV Rua JKL

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Em algumas situaes, ser importante preservar as

duplicatas; em outras, ser importante que elas sejam omitidas


Use UNION ou UNION ALL adequadamente!
Prof. Rmulo Alencar Banco de Dados para Redes 132

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

recebam valores nulos (desde que permitidos na especificao das colunas)

Prof. Rmulo Alencar

Banco de Dados para Redes

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!

Prof. Rmulo Alencar

Banco de Dados para Redes

134

Valores Nulos
Tabela Funcionarios

matricula nome 1 2 3 4 5 Alex Joo Ana Pedro

endereco salario Rua DEF Av XYZ Rua GHI Av TUV

data_nascimento

Rmulo Rua ABC

1000,00 04/10/1970 1500,00 06/09/1980 3000,00 NULO 2000,00 01/01/2000 2500,00 NULO

Prof. Rmulo Alencar

Banco de Dados para Redes

135

Valores Nulos
Exemplo: Quais os nomes dos funcionrios que no possuem data de nascimento informada?

SELECT nome FROM Funcionarios WHERE data_nascimento IS NULL

Prof. Rmulo Alencar

Banco de Dados para Redes

136

Valores Nulos
Resultado:

nome Joo Pedro

Prof. Rmulo Alencar

Banco de Dados para Redes

137

Valores Nulos
Exemplo: Quais os nomes dos funcionrios que possuem data de nascimento informada?

SELECT nome FROM Funcionarios WHERE data_nascimento IS NOT NULL

Prof. Rmulo Alencar

Banco de Dados para Redes

138

Valores Nulos
Resultado:

nome Rmulo Alex Ana

Prof. Rmulo Alencar

Banco de Dados para Redes

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

SELECT nome FROM Funcionarios WHERE data_nascimento = NULL


Retornar uma tabela vazia! Por qu?

Prof. Rmulo Alencar

Banco de Dados para Redes

140

BETWEEN
O operador ternrio BETWEEN, bastante utilizado na

prtica, compara se um valor est compreendido dentro de um intervalo informado


Sintaxe: valor BETWEEN inicio AND fim

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Prof. Rmulo Alencar

Banco de Dados para Redes

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!

Prof. Rmulo Alencar

Banco de Dados para Redes

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!

Pontos extremos no fazem parte do intervalo

Prof. Rmulo Alencar

Banco de Dados para Redes

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

A mdia das notas uma agregao!


Conjunto original de 5 valores foi reduzido a apenas um

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Qual a mdia salarial dos funcionrios? SELECT AVG(salario) FROM Funcionarios

Prof. Rmulo Alencar

Banco de Dados para Redes

147

Funes de Agregao
Exemplo: Qual o maior de todos os salrios? SELECT MAX(salario) FROM Funcionarios

Qual o menor de todos os salrios? SELECT MIN(salario) FROM Funcionarios

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Prof. Rmulo Alencar

Banco de Dados para Redes

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)

Prof. Rmulo Alencar

Banco de Dados para Redes

153

Sub-consultas
Algumas consultas precisam buscar valores j presentes

no BD para utiliz-los em suas condies de comparao


Assim, podemos inserir consultas SQL dentro de outras consultas SQL Sub-consultas Consultas aninhadas

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Os operadores possuem suas formas negativas


NOT IN NOT EXISTS
Prof. Rmulo Alencar Banco de Dados para Redes 155

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

dados da consulta externa

Ela ser uma sub-consulta correlacionada


Problema: o tempo de processamento tende a ser alto Uma sub-consulta no-correlacionada pode ser executada uma nica vez e ter seus valores avaliados pela consulta externa tantas vezes quanto forem necessrias Uma sub-consulta correlacionada dever ser executada para cada avaliao necessria na consulta externa Ou seja, ser executada vrias vezes durante a execuo da consulta externa Sub-consultas correlacionadas devem ser usadas com parcimnia
Prof. Rmulo Alencar Banco de Dados para Redes 157

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

Prof. Rmulo Alencar

Banco de Dados para Redes

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

Prof. Rmulo Alencar

Banco de Dados para Redes

163

Das könnte Ihnen auch gefallen