Você está na página 1de 104

Banco de Dados

Diego Silveira Costa Nascimento


Instituto Federal do Rio Grande do Norte
diego.nascimento@ifrn.edu.br
24 de agosto de 2014
Ementa do Curso
1
Introduo
2
Abordagem Entidade-relacionamento
3
Abordagem Relacional
4
Normalizao
5
Liguagem Estruturada de Consulta SQL
6
Consultas Avanadas
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 2 / 104
Ementa do Curso
1
Introduo
2
Abordagem Entidade-relacionamento
3
Abordagem Relacional
4
Normalizao
5
Liguagem Estruturada de Consulta SQL
6
Consultas Avanadas
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 3 / 104
Objetivos da Disciplina
Capacitar para desenvolvimento de sistemas que utilizam a tecnologia
de Banco de Dados (BD);
Apresentar os conceitos fundamentais da rea;
Ensinar as tcnicas de modelagem de dados, bem como as tcnicas de
normalizao;
Implementar projetos com BD;
Utilizar uma linguagem relacional; e
Elaborar consultas de complexidade variada.
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 4 / 104
Motivaes em Estudar Banco de Dados
Sistemas de Bancos de Dados (BD) tm sido amplamente utilizados
no desenvolvimento de sistemas computacionais corporativos;
A disseminao de BDs requer a capacitao de prossionais da rea
na utilizao e no gerenciamento de tais sistemas, diante de um nvel
de complexidade crescente; e
Geralmente, prossionais de BD so muito bem remunerados.
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 5 / 104
Banco de Dados
Denio
So conjuntos de registros dispostos em estrutura regular que possibilita a
organizao dos dados e produo de informao.
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 6 / 104
Caractersticas
Natureza auto-descritiva de um sistema de BD
Um catlogo do SGBD armazena a descrio do banco de dados
(meta-dados), permite trabalhar com diferentes BDs.
Independncia programa-dados
Permite mudanas na estrutura de armazenamento e operaes dos
dados sem ter que mudar os programas que acessam os dados.
Abstrao de dados
Um modelo de dados usado para esconder detalhes de
armazenamento, apresentando ao usurio uma viso conceitual dos
dados;
Suporta mltiplas vises dos dados
Cada usurio pode ter diferentes vises do banco de dados, a qual
descreve somente os dados de interesse dos usurio.
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 7 / 104
Propriedades Implcitas
Um banco de dados representa algum aspecto do mundo real;
Um banco de dados uma coleo lgica e coerente de dados com
algum signicado inerente;
Uma organizao de dados ao acaso no pode ser corretamente
interpretado como um banco de dados;
Um banco de dados projetado, construdo e povoado por dados,
atendendo a uma proposta; e
Possui um grupo de usurios denido em algumas aplicaes
preconcebidas de acordo com o interesse desse grupo de usurio.
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 8 / 104
Benefcios
Controle de Redundncia;
Compartilhamento dos dados com vrios usurios;
Restringe o acesso no autorizado dos dados;
Prov mltiplas interfaces para diferentes tipos de usurios;
Representa relacionamentos complexos dos dados;
Manuteno de restries de integridade;
Prov Backup e Recuperao; e
Potencial para ditar padres.
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 9 / 104
Evoluo
Ilustrao
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 10 / 104
Aplicaes Tradicionais
Sistemas bancrios;
Controle em hotelaria;
Pronturio de pacientes em hospitais;
Sites de relacionamento;
Controle de estoque de supermercados;
Cadastramento de funcionrios por uma empresa; e
Sistemas acadmico.
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 11 / 104
Avanos Tecnolgicos de Armazenamento
Figuras;
Vdeos;
Mensagens sonoras;
Mapas; e
Dados temporais.
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 12 / 104
Sistema Gerenciador de Banco de Dados
Denio
uma coleo de programas de propsito geral que facilita os processos de
denio, construo, manipulao e compartilhamento de bancos entre
vrios usurios e aplicaes.
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 13 / 104
Objetivo de um SGBD
Gerenciamento eciente (mais rpidos que arquivos);
com segurana (crashes);
de grandes quantidades (gigabyte);
de informaes persistentes;
e compartilhadas (mltipos usurios).
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 14 / 104
Congurao de um Sistema de Bando de Dados
Ilustrao
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 15 / 104
Ementa do Curso
1
Introduo
2
Abordagem Entidade-relacionamento
3
Abordagem Relacional
4
Normalizao
5
Liguagem Estruturada de Consulta SQL
6
Consultas Avanadas
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 16 / 104
Modelos de Banco de Dados
Denio
uma descrio dos tipos de informaes que esto armazenadas em um
banco de dados.
Para construir um modelo de dados usa-se uma linguagem de
modelagem de dados;
A linguagem de modelagem pode ser textual ou grca;
Existem linguagens de modelagem para descrever modelos de dados
em diferentes nveis de abstrao e objetivos;
Cada representao de um modelo de dados recebe a denominao de
esquema de banco de dados;
Para um projeto de banco de dados, normalmente so considerados
dois nveis de abstrao de modelos de dados:
Modelo conceitual; e
Modelo lgico.
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 17 / 104
Modelo Conceitual
Denio
uma descrio do banco de dados de forma independente de
implementao em um SGBD. O modelo conceitual registra que dados
podem aparecer no banco de dados, mas no registra como estes dados
esto armazenados a nvel de SGBD.
Ilustrao
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 18 / 104
Modelo Lgico
Denio
uma descrio de um banco de dados no nvel de abstrao visto pelo
usurio do SGBD. Desta forma, o modelo lgico dependente do tipo
particular de SGBD que est sendo usado.
Ilustrao
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 19 / 104
Entidade
Denio
Conjunto de objetos da realidade modelada sobre os quais deseja-se manter
informaes o banco de dados.
Ilustrao
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 20 / 104
Relacionamento
Denio
Conjunto de associaes entre ocorrncia de entidades.
Ilustrao
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 21 / 104
Cardinalidade de Relacionamento
Denio
o nmero (mnimo, mximo) de ocorrncias de entidade associadas a
uma ocorrncia da entidade em questo atravs do relacionamento.
Classicao de relacionamentos binrios:
1:1 (um-para-um);
1:N (um-para-muitos);
N:N (muitos-para-muitos);
Relacionamento Ternrio; e
Cardinalidade Mnima.
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 22 / 104
Relacionamento Binrio 1:1
Ilustrao
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 23 / 104
Relacionamento Binrio 1:N
Ilustrao
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 24 / 104
Relacionamento Binrio N:N
Ilustrao
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 25 / 104
Relacionamento Ternrio
Ilustrao
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 26 / 104
Cardinalidade Mnima
Ilustrao
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 27 / 104
Atributo
Denio
Dado que associado a cada ocorrcia de uma entidade ou de um
relacionamento.
Ilustrao
Cardinalidade de atributo:
Obrigatrio;
Mono-valorado; ou
Multi-valorados.
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 28 / 104
Identicao de Entidade
Denio
Um identicador um conjunto de um ou mais atributos (e possivelmente
relacionamentos, como visto abaixo) cujos valores servem para distinguir
uma ocorrncia da entidade das demais ocorrncias da mesma entidade.
Tipo de identicao:
Simples; ou
Composto.
Ilustrao
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 29 / 104
Relacionamento Identicado
Denio
H casos em que o identicador de uma entidade composto no somente
por atributos da prpria entidade mas tambm por relacionamentos dos
quais a entidade participa.
Ilustrao
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 30 / 104
Generalizao
Ilustrao
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 31 / 104
Entidade Associativa
Ilustrao
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 32 / 104
Smbolos do Diagrama Entidade Relacionamento
Ilustrao
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 33 / 104
Ementa do Curso
1
Introduo
2
Abordagem Entidade-relacionamento
3
Abordagem Relacional
4
Normalizao
5
Liguagem Estruturada de Consulta SQL
6
Consultas Avanadas
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 34 / 104
Tabela
Denio
um conjunto no ordenado de linhas (tuplas);
Cada linha composta por uma srie de campos (valor do atributo);
Cada campo identicado por nome de campo (nome de atributo); e
O conjunto de campos das linhas de uma tabela que possuem o
mesmo nome formam uma coluna.
Ilustrao
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 35 / 104
Chaves
Denio
E a forma na qual se estabelece relaes entre linhas de tabelas de um
banco de dados relacional.
Tipos de chaves:
Primria;
Estrangeira; e
Alternativa;
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 36 / 104
Chave Primria
Denio
Uma chave primria uma coluna ou uma combinao de colunas cujos
valores distinguem uma linha das demais dentro de uma tabela.
Ilustrao
Tab: Departamento
COD DESC
D1 Compras
D2 Engenharia
D3 Vendas
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 37 / 104
Chave Estrangeira
Denio
Uma chave estrangeira uma coluna ou uma combinao de colunas, cujos
valores aparecem necessariamente na chave primria de uma tabela.
Ilustrao
Tab: Empregado
COD NOME COD_DEP CAT_FUNC
E1 Souza D1 -
E2 Santos D2 C5
E3 Silva D2 C5
E5 Soares D1 C2
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 38 / 104
Chave Alternativa
Denio
Em alguns casos, mais de uma coluna ou combinaes de colunas podem
servir para distinguir uma linha das demais.
Ilustrao
Tab: Empregado
COD NOME COD_DEP CAT_FUNC CPF
E1 Souza D1 - 132.121.331-20
E2 Santos D2 C5 891.221.111-11
E3 Silva D2 C5 341.511.773-45
E5 Soares D1 C2 631.692.754-88
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 39 / 104
Ementa do Curso
1
Introduo
2
Abordagem Entidade-relacionamento
3
Abordagem Relacional
4
Normalizao
5
Liguagem Estruturada de Consulta SQL
6
Consultas Avanadas
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 40 / 104
Normalizao
Denio
uma regra que deve ser obedecida por uma tabela para que esta seja
considerada bem projetada.
Tipos de Normalizao:
Primeira forma normal (1FN);
Segunda forma normal (2FN);
Terceira forma normal (3FN); e
Quarta forma normal (4FN).
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 41 / 104
Tabela No Normalizada
Exemplo
Tab: Projeto_Empregado
COD_PROJ TIPO DESC COD_EMP NOME CAT SAL INI DURAC
LSC001 Desenvolvimento Sistema de Estoque 2146 Joo A1 4 01/11/91 24
LSC001 Desenvolvimento Sistema de Estoque 3145 Slvio A2 4 02/10/91 24
LSC001 Desenvolvimento Sistema de Estoque 6126 Jos B1 9 03/10/92 18
LSC001 Desenvolvimento Sistema de Estoque 1214 Carlos A2 4 04/10/92 18
LSC001 Desenvolvimento Sistema de Estoque 8191 Mrio A1 4 01/11/92 12
PAG02 Manuteno Sistema de RH 8191 Mrio A1 4 01/05/93 12
PAG02 Manuteno Sistema de RH 4112 Joo A2 4 04/01/91 24
PAG02 Manuteno Sistema de RH 6126 Jos B1 9 01/11/92 12
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 42 / 104
Primeira Forma Normal (1FN)
Denio
Diz-se que uma tabela est na primeira forma normal, quando ela no
contm tabelas aninhadas.
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 43 / 104
Tabela na 1FN
Exemplo
Tab: Projeto
COD TIPO DESC
LSC001 Desenvolvimento Sistema de Estoque
PAG02 Manuteno Sistema de RH
Tab: Empregado
COD_PROJ COD_EMP NOME CAT SAL INI DURAC
LSC001 2146 Joo A1 4 01/11/91 24
LSC001 3145 Slvio A2 4 02/10/91 24
LSC001 6126 Jos B1 9 03/10/92 18
LSC001 1214 Carlos A2 4 04/10/92 18
LSC001 8191 Mrio A1 4 01/11/92 12
PAG02 8191 Mrio A1 4 01/05/93 12
PAG02 4112 Joo A2 4 04/01/91 24
PAG02 6126 Jos B1 9 01/11/92 12
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 44 / 104
Dependncia Funcional
Denio
Diz-se que uma coluna C2 depende funcionalmente de uma coluna C1 (ou
que a coluna C1 determina a coluna C2) quando, em todas linhas da tabela,
para cada valor de C1 que aparece na tabela, aparece o mesmo valor de C2.
Ilustrao
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 45 / 104
Segunda Forma Normal (2FN)
Denio
Uma tabela encontra-se na segunda forma normal, quando, alm de estar
na 1FN, no contm dependncias parciais.
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 46 / 104
Tabela na 2FN
Exemplo
Tab: Projeto_Empregado
COD_PROJ COD_EMP INI DURAC
LSC001 2146 01/11/91 24
LSC001 3145 02/10/91 24
LSC001 6126 03/10/92 18
LSC001 1214 04/10/92 18
LSC001 8191 01/11/92 12
PAG02 8191 01/05/93 12
PAG02 4112 04/01/91 24
PAG02 6126 01/11/92 12
Tab: Empregado
COD_EMP NOME CAT SAL
2146 Joo A1 4
3145 Slvio A2 4
6126 Jos B1 9
1214 Carlos A2 4
8191 Mrio A1 4
4112 Joo A2 4
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 47 / 104
Terceira Forma Normal (3FN)
Denio
Uma tabela encontra-se na terceira forma normal, quando, alm de estar
na 2FN, no contm dependncias transitivas.
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 48 / 104
Tabela na 3FN
Exemplo
Tab: Empregado
COD_EMP NOME CAT
2146 Joo A1
3145 Slvio A2
6126 Jos B1
1214 Carlos A2
8191 Mrio A1
4112 Joo A2
Tab: Categoria
CAT SAL
A1 4
A2 4
B1 9
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 49 / 104
Quarta Forma Normal (4FN)
Denio
Uma tabela encontra-se na quarta forma normal, quando, alm de estar na
3FN, no contm dependncias multi-valoradas.
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 50 / 104
Incluindo uma Nova Entidade
Exemplo
Tab: Equipamento
COD DESC
EQ1 Projetor
EQ2 Notebook
EQ3 Roteador
Tab: Projeto_Empregado_Equipamento
COD_PROJ COD_EMP COD_EQUI
PAG02 8191 EQ1
PAG02 4112 EQ1
PAG02 6126 EQ1
PAG02 8191 EQ2
PAG02 4112 EQ2
PAG02 6126 EQ2
PAG02 8191 EQ3
PAG02 4112 EQ3
PAG02 6126 EQ3
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 51 / 104
Tabela na 4FN
Exemplo
Tab: Projeto_Equipamento
COD_PROJ COD_EQUI
PAG02 E1
PAG02 E2
PAG02 E3
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 52 / 104
Ementa do Curso
1
Introduo
2
Abordagem Entidade-relacionamento
3
Abordagem Relacional
4
Normalizao
5
Liguagem Estruturada de Consulta SQL
6
Consultas Avanadas
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 53 / 104
SQL
Adotada como padro para BDs relacionais;
Implementada no projeto de pesquisa do System R da IBM em
meados dos anos 70;
Padronizada em 1986 e melhorada em 1989;
SQL-2 ou SQL-92: Padro hoje em vigor; e
SQL-3: Em fase de desenvolvimento. Vai estender o padro atual com
conceitos de orientao a objeto e outros novos conceitos de BDs.
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 54 / 104
Comandos de SQL
Comandos de denio de dados; e
Comandos de manipulao dos dados.
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 55 / 104
Comandos de Denio de Dados
Criao e excluso de banco de dados;
Criao, alterao e excluso de tabelas;
Especicao de restries;
Criao de viso;
Criao de procedimentos armazenados; e
Criao de gatilhos.
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 56 / 104
Criando Banco de Dados
Estrutura
create database <nome do database >
Exemplo
create database sistema_academico
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 57 / 104
Excluindo Banco de Dados
Estrutura
drop database <nome do banco >
Exemplo
drop database sistema_academico
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 58 / 104
Tabelas
Exemplo
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 59 / 104
Criando Tabela
Estrutura
create table <nome da tabela >(
<nome do atributo 1> <tipo >,
<nome do atributo 2> <tipo >)
Exemplo
create table tb_aluno(
matricula int ,
nome varchar (50),
sexo char)
create table tb_disciplina(
identificador int ,
descricao varchar (50),
creditos int)
create table tb_disciplina_cursada(
matricula_aluno int ,
identificador_disciplina int ,
semestre int ,
ano int ,
nota float)
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 60 / 104
Alterando Tabela
Estrutura
alter table <nome da tabela > add <nome do atributo > <tipo >
Exemplo
alter table tb_aluno add cpf varchar (11)
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 61 / 104
Excluindo Tabela
Estrutura
drop table <nome da tabela >
Exemplo
drop table tb_aluno
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 62 / 104
Comandos de Manipulao de Dados
Inserir registros em tabelas;
Selecionando registros;
Atualizar registros em tabelas; e
Excluir registros em tabelas.
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 63 / 104
Inserindo Valores
Estrutura
insert into <nome da tabela >
(nome do atributo 1, nome do atributo 2)
values
(valor 1,valor 2)
Exemplo
insert into tb_aluno
(matricula , nome , sexo , cpf)
values
(1,Joo da Silva ,M,12345678 )
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 64 / 104
Selecionando Registros
Estrutura
select <nome do atributo 1>, <nome do atributo 2>
from <nome da tabela >
Exemplo
select matricula , nome
from tb_aluno
Caso necessite selecionar todos os atributos de uma nica vez, deve-se
apenas utilizar o sbolo de asterisco () em substituio do(s) nome(s)
da(s) coluna(s).
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 65 / 104
Clusula WHERE
Estrutura
select <nome do atributo 1>, <nome do atributo 2>
from <nome da tabela >
where <condio>
Exemplo
select matricula , nome
from tb_aluno
where matricula = 1
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 66 / 104
Conectores Relacionais
igual: =;
maior: >;
menor: <;
maior igual: >=;
menor igual: <=;
diferente: <>;
entre: between; e
parte: like (Permitido o uso de mscara com % entre spas simples).
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 67 / 104
Conectores Lgicos
e: and;
ou: or;
nulo: is null; e
no nulo: is not null.
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 68 / 104
Atualizando Valores
Estrutura
update <nome da tabela >
set <nome do atributo > = <valor >
where <condies >
Exemplo
update tb_aluno
set nome = Joo da Silva Filho
where matricula = 1
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 69 / 104
Excluindo Valores
Estrutura
delete from <nome da tabela >
where <condies >
Exemplo
delete from tb_aluno
where matricula = 1
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 70 / 104
Especicando Restries de Integridade
Declarativas:
Domnio ou tipo de dados;
Vazio;
Padro;
Checagem;
Unicidade;
Chave primria; e
Referencial.
Procedimental:
Procedimentos armazenados ou funes; e
Gatilhos (Banco de dados ativos).
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 71 / 104
Restrio de Vazio
Estrutura
alter table <nome da tabela >
alter <nome do atributo > set not null
Exemplo
alter table tb_aluno
alter nome set not null
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 72 / 104
Restrio de Padro
Estrutura
alter table <nome da tabela >
alter <nome do atributo >
set default <valor >
Exemplo
alter table tb_aluno
alter sexo set default M
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 73 / 104
Restrio de Checagem
Estrutura
alter table <nome da tabela >
add constraint <nome da restrio>
check (<restrio>)
Exemplo
alter table tb_disciplina_cursada
add constraint ck_tb_disciplina_cursada_nota
check (nota >= 0 and nota <= 10)
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 74 / 104
Restrio de Unicidade
Estrutura
alter table <nome da tabela >
add constraint <nome da restrio>
unique (<nome do atributo >)
Exemplo
alter table tb_aluno
add constraint u_tb_aluno_cpf unique (cpf)
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 75 / 104
Restrio de Chave
Estrutura
alter table <nome da tabela >
add constraint <nome da restrio>
primary key (nome do atributo)
Exemplos
alter table tb_aluno
add constraint pk_tb_aluno_matricula
primary key (matricula)
alter table tb_disciplina
add constraint pk_tb_disciplina_identificador
primary key (identificador)
alter table tb_disciplina_cursada
add constraint pk_tb_disciplina_cursada_matricula_disciplina
primary key
(matricula_aluno , identificador_disciplina , semestre , ano)
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 76 / 104
Restrio de Referencial
Estrutura
alter table <nome da tabela >
add constraint <nome da restrio>
foreign key (<nome do atributo >)
references
<nome da tabela -referncia >(<nome do atributo -referncia >)
Exemplos
alter table tb_disciplina_cursada
add constraint fk_tb_disciplina_cursada_matricula_aluno
foreign key (matricula_aluno)
references tb_aluno (matricula)
alter table tb_disciplina_cursada
add constraint fk_tb_disciplina_cursada_idenfificador_disciplina
foreign key (identificador_disciplina)
references tb_disciplina (identificador)
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 77 / 104
Criando Viso
Estrutura
create view <nome da viso>
as
<consulta sql >
Exemplo
create view vw_alunos
as
select matricula ,
nome
from secretaria.tb_aluno
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 78 / 104
Criando Funo
Estrutura
create function <nome da funo>(<parmetros >)
returns <tipo de retorno >
as $$
<definio do comando >;
$$ language <nome da linguagem >
Exemplo
create function fn_inserir_aluno (
matricula INT ,
nome VARCHAR (50),
sexo CHAR ,
cpf VARCHAR (11)
) returns void
as $$
insert into tb_aluno
(matricula , nome , sexo , cpf)
values ($1 ,$2,$3,$4);
$$ language SQL
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 79 / 104
Criando Funo
Exemplo
create function fn_descricao_sexo(sexo CHAR)
returns varchar (10)
as $$
declare
pSexo alias for $1;
begin
if (pSexo = M) then
return MASCULINO ;
else
return FEMININO ;
end if;
end;
$$ language PLPGSQL
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 80 / 104
Criando Gatilhos
Estrutura
create trigger <nome do gatilho > [BEFORE ,AFTER]
[INSERT ,UPDATE ,DELETE] on
<nome da tabela > for each row
execute procedure <nome da funo>()
Exemplos
create table tb_log_alteracao_nota(
codigo serial ,
data date ,
matricula_aluno int ,
identificador_disciplina int ,
nota_anterior float ,
nota_atual float ,
usuario varchar (20)
)
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 81 / 104
Criando Gatilhos
Exemplos
create function fn_log_alterar_nota ()
returns trigger
as $$
begin
insert into tb_log_alteracao_nota
(data , matricula_aluno , identificador_disciplina , nota_anterior , nota_atual ,usuario)
values
(now(),OLD.matricula_aluno , OLD.identificador_disciplina , OLD.nota , NEW.nota ,user);
return null;
end;
$$ language PLPGSQL
create trigger tr_alterar_nota
after update on tb_disciplina_cursada
for each row execute procedure log_alterar_nota ()
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 82 / 104
Ementa do Curso
1
Introduo
2
Abordagem Entidade-relacionamento
3
Abordagem Relacional
4
Normalizao
5
Liguagem Estruturada de Consulta SQL
6
Consultas Avanadas
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 83 / 104
Exemplo de um Banco de Dados
Exemplos
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 84 / 104
Operao de Renomeao AS
Denio
A linguagem SQL permite a renomeao de relaes e atributos recorrendo
clusula as.
Exemplo
select e.pnome as nome
from empregado as e
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 85 / 104
Clusula GROUP BY
Estrutura
select <nome do atributo 1>, <nome do atributo 2>
from <nome da tabela >
where <condies >
group by <nome do atributo >
Funes de grupo:
count();
min();
max();
sum(); ou
avg().
Exemplo
select e.sexo ,
count (*)
from empregado as e
group by e.sexo
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 86 / 104
Clusula HAVING
Estrutura
select <nome do atributo 1>, <nome do atributo 2>
from <nome da tabela >
where <condies >
group by <nome do atributo >
having <condies>
Exemplo
select e.dno ,
avg(e.salario)
from empregado as e
group by e.dno
having avg(e.salario) < 55000
Importante
Predicados da clusula WHERE so aplicados depois da formao dos
grupos.
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 87 / 104
Clusula ORDER BY
Estrutura
select <nome do atributo 1>, <nome do atributo 2>
from <nome da tabela >
where <condies >
order by <nome do atributo > <tipo de ordenao>
Tipo de ordenao:
Ascendente: asc; ou
Descendente: desc.
Exemplo
select *
from empregado as e
order by e.pnome desc
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 88 / 104
Operaes de Conjunto
Unio dos resultados de uma ou mais queries;
Interseo entre os resultados de duas queries; e
Subtrao entre os resultados de duas queries.
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 89 / 104
Operaes de Conjunto para Unio
Estrutura
<Primeira consulta >
union
<Segunda consulta >
Exemplo
select e.pnome ,
e.sexo
from empregado as e
union
select d.nome_dependente ,
d.sexo
from dependente as d
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 90 / 104
Operaes de Conjunto para Interseo
Estrutura
<Primeira consulta >
intersect
<Segunda consulta >
Exemplo
select e.pnome ,
e.sexo
from empregado as e
intersect
select e.pnome ,
e.sexo
from empregado as e
where e.superssn is not null
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 91 / 104
Operaes de Conjunto para Subtrao
Estrutura
<Primeira consulta >
except
<Segunda consulta >
Exemplo
select e.pnome ,
e.sexo
from empregado as e
except
select e.pnome ,
e.sexo
from empregado as e
where e.superssn is not null
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 92 / 104
Junes entre Tabelas
Juno cruzada;
Juno interna; e
Juno externa:
Esquerda;
Direita; ou
Completa.
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 93 / 104
Juno Cruzada
Estrutura
select <atributos >
from <primeira tabela > cross join <segunda tabela >
Exemplo
select e1.pnome ,
e2.pnome
from empregado as e1 cross join empregado as e2
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 94 / 104
Juno Interna
Estrutura
select <atributos >
from <primeira tabela > inner join <segunda tabela > on (<condio>)
Exemplo
select e1.pnome ,
e2.pnome
from empregado as e1 inner join empregado as e2 on (e1.ssn = e2.superssn)
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 95 / 104
Juno Externa a Esquerda
Estrutura
select <atributos >
from <primeira tabela > left outer join <segunda tabela > on (<condio>)
Exemplo
select e1.pnome ,
e2.pnome
from empregado as e1 left outer join empregado as e2 on (e1.ssn = e2.superssn)
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 96 / 104
Juno Externa a Direita
Estrutura
select <atributos >
from <primeira tabela > right outer join <segunda tabela > on (<condio>)
Exemplo
select e1.pnome ,
e2.pnome
from empregado as e1 right outer join empregado as e2 on (e1.ssn = e2.superssn)
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 97 / 104
Juno Externa Completa
Estrutura
select <atributos >
from <primeira tabela > inner join <segunda tabela > on (<condio>)
Exemplo
select e1.pnome ,
e2.pnome
from empregado as e1 full outer join empregado as e2 on (e1.ssn = e2.superssn)
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 98 / 104
Subconsultas
Na clusula SELECT;
Na clusula FROM; ou
Na clusula WHERE.
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 99 / 104
Subconsulta na Clusula Select
Estrutura
select <atributos >,
(<subconsulta >)
from <primeira tabela >
Exemplo
select e.pnome ,
(select count (*) from dependente as d where e.ssn = d.essn) as qt_dependente
from empregado as e
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 100 / 104
Subconsulta na Clusula From
Estrutura
select <atributos >
from (<subconsulta >)
Exemplo
select e.pnome ,
d.qt_dependentes
from empregado as e
inner join (select d.essn , count (*) as qt_dependentes
from dependente as d
group by d.essn
) as d
on (e.ssn = d.essn)
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 101 / 104
Expresses em Subconsulta
in;
not in;
exists; e
not exists.
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 102 / 104
Subconsulta na Clusula Where
Estrutura
select <atributos >
from <tabela >
where (subconsulta)
Exemplo
select e.ssn ,
e.pnome
from empregado as e
where e.ssn in (select d.essn
from dependente as d
group by d.essn)
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 103 / 104
Subconsulta na Clusula Where
Exemplo
select e.ssn ,
e.pnome
from empregado as e
where exists (select d.essn
from dependente as d
where d.essn = e.ssn
group by d.essn)
Diego S. C. Nascimento (IFRN) Banco de Dados Apresentao 104 / 104

Você também pode gostar