fundamentos de banco de dados prof. andré cypriano m. costa [email protected]...

35
Fundamentos de Banco de Dados Prof. André Cypriano M. Costa [email protected] [email protected] LINGUAGEM SQL – STRUCTURED QUERY LANGUAGE

Upload: dalila-aragao-sequeira

Post on 07-Apr-2016

216 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Fundamentos de Banco de Dados Prof. André Cypriano M. Costa amonteiro@catolica-es.edu.br acostaprofessor@gmail.com

Fundamentos de Banco de Dados

Prof. André Cypriano M. [email protected]

[email protected]

LINGUAGEM SQL – STRUCTURED QUERY

LANGUAGE

Page 2: Fundamentos de Banco de Dados Prof. André Cypriano M. Costa amonteiro@catolica-es.edu.br acostaprofessor@gmail.com

INTRODUÇÃO À LINGUAGEM SQL

A SQL engloba vários tipos de comandos:Comandos de manipulação de dados (DML - Data

Manipulation Language) São comandos que nos permitem consultar, incluir, excluir ou alterar dados de tabelas.

Comandos de definição de dados (DDL - Data Definition Language) São comandos que nos permitem manipular a estrutura do banco de dados, criando cada uma de suas tabelas com seus atributos, chaves etc.

Page 3: Fundamentos de Banco de Dados Prof. André Cypriano M. Costa amonteiro@catolica-es.edu.br acostaprofessor@gmail.com

INTRODUÇÃO À LINGUAGEM SQL

Nesta parte iremos ver os Comandos de Definição de Dados, chamados de DDL - Data Definition Language (por exemplo: Create, Alter e Drop)

São comandos que nos permitem manipular a estrutura do banco de dados, criando cada uma de suas tabelas com seus atributos, chaves primárias e estrangeiras etc.

Em seguida, veremos outros comandos de manipulação de dados (DML), como o insert, update e delete

Page 4: Fundamentos de Banco de Dados Prof. André Cypriano M. Costa amonteiro@catolica-es.edu.br acostaprofessor@gmail.com

DEFINIÇÃO DE DADOS

O conjunto de relações (tabelas) de um BD precisa ser especificado ao sistema por meio de uma linguagem de definição de dados - DDL.

A SQL DDL permite a especificação não apenas de um conjunto de relações, mas também de informações sobre cada relação, incluindo:Esquema para cada relação (seus atributos);Domínio de valores associados a cada atributo;Conjunto de índices a ser mantido para cada relação;Restrições de integridade;Definição de chaves primárias e chaves estrangeiras etc.

Page 5: Fundamentos de Banco de Dados Prof. André Cypriano M. Costa amonteiro@catolica-es.edu.br acostaprofessor@gmail.com

CRIANDO E APAGANDO BANCO DE DADOS

Um banco de dados em SQL é definido usando o comando create database:

create database <nome>; onde <nome> é o nome do banco de dados

Exemplo:create database myDatabase;

Para apagar um banco de dados use o comando:drop database <nome>;

Page 6: Fundamentos de Banco de Dados Prof. André Cypriano M. Costa amonteiro@catolica-es.edu.br acostaprofessor@gmail.com

CRIANDO RELAÇÕES EM BANCO DE DADOS Uma relação SQL é definida usando o comando create

table:create table R (

A1 D1 [N1] [d1], A2 D2 [N2] [d2], ..., An Dn [Nn] [dn],<regras de integridade1>,...,<regras de integridadek>

);

Page 7: Fundamentos de Banco de Dados Prof. André Cypriano M. Costa amonteiro@catolica-es.edu.br acostaprofessor@gmail.com

CRIANDO RELAÇÕES EM BANCO DE DADOS R é o nome da relação Cada Ai é o nome de um atributo em R Di é o tipo dos atributos Ai, [Ni] indica que o atributo deve ser obrigatoriamente

preenchido ou não.Por padrão, Ni recebe o valor NULL.

[di] indica que o atributo possui algum valor padrão ou não.Por padrão, os atributos não possuem valor padrão.

Page 8: Fundamentos de Banco de Dados Prof. André Cypriano M. Costa amonteiro@catolica-es.edu.br acostaprofessor@gmail.com

CRIANDO RELAÇÕES EM BANCO DE DADOS Exemplo:

create table Time (numCadastro INTEGER NOT NULL,nome VARCHAR(30) NOT NULL,cidade VARCHAR(50) default ‘Vitória’,situacao INTEGER NOT NULL

);

R

Ai

Didi

Ni

Page 9: Fundamentos de Banco de Dados Prof. André Cypriano M. Costa amonteiro@catolica-es.edu.br acostaprofessor@gmail.com

CRIANDO RELAÇÕES EM BANCO DE DADOS As Regras de Integridade permitidas englobam:

Chaves primárias

Chaves estrangeiras

Page 10: Fundamentos de Banco de Dados Prof. André Cypriano M. Costa amonteiro@catolica-es.edu.br acostaprofessor@gmail.com

CHAVES PRIMÁRIAS

Toda tabela deve ter uma chave primária que pode ser simples ou composta.Simples usa apenas um atributo.Composta usa dois ou mais atributos.

O objetivo da chave primária é identificar unicamente entidades dentro de um conjunto de entidades.A chave primária nunca se repetirá. Ela é única.

Para criar uma chave primária basta usar a palavra chave primary key e entre parênteses colocar o nome dos campos que compõem a chave[constraint [identificado]] primary key (A1, A2, ...., AJ)

Page 11: Fundamentos de Banco de Dados Prof. André Cypriano M. Costa amonteiro@catolica-es.edu.br acostaprofessor@gmail.com

CHAVES PRIMÁRIAS

Criando uma tabela com chave primária:

create table NOME_TABELA (atrib1 <tipo> not null,atrib2 <tipo> not null,....,atribX <tipo>, primary key (atrib1, atrib2, ...)

);

Page 12: Fundamentos de Banco de Dados Prof. André Cypriano M. Costa amonteiro@catolica-es.edu.br acostaprofessor@gmail.com

CHAVES PRIMÁRIAS

Exemplos :create table cliente(

id integer not nullauto_increment,

nome varchar(45) not null,cpf varchar(20) not null,endereco varchar(100) not null,primary key (id)

);

Page 13: Fundamentos de Banco de Dados Prof. André Cypriano M. Costa amonteiro@catolica-es.edu.br acostaprofessor@gmail.com

CHAVES PRIMÁRIAS

create table agencia(

numAgencia integer not null,nome varchar(45) not null,endereco varchar(100) not null,fundos decimal(10,2) not null,constraint pk_agencia primary key (numAgencia)

);create table correntista(

idCliente integer not null,numAgencia integer not null,numConta integer not null,primary key (idCliente, numAgencia, numConta)

);

Page 14: Fundamentos de Banco de Dados Prof. André Cypriano M. Costa amonteiro@catolica-es.edu.br acostaprofessor@gmail.com

CHAVES ESTRANGEIRAS

O conceito de chave estrangeira se refere ao tipo de relacionamento entre as tabelas de dados do BD.

Uma chave estrangeira (foreign key) é a chave formada através de um relacionamento com a chave primária de outra tabela.A chave estrangeira é um campo que aponta para a chave

primária de outra tabela.

Ela define um relacionamento entre as tabelas e pode ocorrer repetidas vezes.A chave estrangeira pode repetir em uma tabela.

Page 15: Fundamentos de Banco de Dados Prof. André Cypriano M. Costa amonteiro@catolica-es.edu.br acostaprofessor@gmail.com

CHAVES ESTRANGEIRAS

Caso a chave primária seja composta na origem, a chave estrangeira também será.

A finalidade da chave estrangeira é garantir a integridade dos dados referenciais.Apenas serão permitidos valores que aparecem ou que

supostamente vão aparecer na Base de Dados.

Page 16: Fundamentos de Banco de Dados Prof. André Cypriano M. Costa amonteiro@catolica-es.edu.br acostaprofessor@gmail.com

CHAVES ESTRANGEIRAS

Exemplo

O relacionamento entre AGENCIA e CONTA é feita via atributo numAgenciaEm AGENCIA é a chave primária, logo seu valor é únicoEm CONTA é uma chave estrangeira, portanto seu valor

pode aparecer diversas vezes

Tabela AGENCIA Tabela CONTA- numAgencia (PK)- nome- endereco- fundos

- numeroConta- numAgencia (FK)- saldo

Page 17: Fundamentos de Banco de Dados Prof. André Cypriano M. Costa amonteiro@catolica-es.edu.br acostaprofessor@gmail.com

CHAVES ESTRANGEIRAS

Para se definir uma chave estrangeira deve usar a seguinte sintaxe:

[constraint [identificador]] foreign key (atrib1, atrib2, ...) references nome_tabela [(atribX, atribY, ...)] [on delete opção] [on update opção]

ou seja, deve-se referenciar os campos da tabela corrente (atrib1, atrib2, ...) com os atributos a que estão relacionados na tabela nome_tabela (atribX, atribY, ...)

Se os atributos da tabela corrente forem iguais aos atributos da tabela referenciada, pode-se omitir os nomes desses atributos.

Page 18: Fundamentos de Banco de Dados Prof. André Cypriano M. Costa amonteiro@catolica-es.edu.br acostaprofessor@gmail.com

CHAVES ESTRANGEIRAS

Exemplo

create table agencia ( numAgencia integer not null, nome varchar(45) not null, endereco varchar(100) not null, fundos decimal(10,2) not null, primary key (numAgencia));

create table conta ( numConta integer not null, numAgencia integer not null, saldo decimal(10,2) not null , primary key (numConta, numAgencia), foreign key (numAgencia)

references agencia(numAgencia));

Page 19: Fundamentos de Banco de Dados Prof. André Cypriano M. Costa amonteiro@catolica-es.edu.br acostaprofessor@gmail.com

CHAVES ESTRANGEIRAS

Algumas ações podem estar associadas a chaves estrangeiras

Essas ações ocorrem quando se atualiza ou se remove um valor que é chave PRIMÁRIA na tabela referenciada pela chave estrangeira.

Page 20: Fundamentos de Banco de Dados Prof. André Cypriano M. Costa amonteiro@catolica-es.edu.br acostaprofessor@gmail.com

CHAVES ESTRANGEIRAS

ON UPDATE:A cláusula ON UPDATE indica que quando uma atualização

é executada sobre uma linha na tabela referenciada, uma das seguintes ações será executada:○ NO ACTION (RESTRICT)

A atualização de uma chave primária pode ser abortada caso um registro em uma tabela referenciada tenha um valor mais antigo.

Este parâmetro é o default quando esta cláusula não recebe nenhum parâmetro.

Exemplo:Tentar atualizar o código de um cliente quando esse cliente já

possui um pedido.Um erro é gerado!

Page 21: Fundamentos de Banco de Dados Prof. André Cypriano M. Costa amonteiro@catolica-es.edu.br acostaprofessor@gmail.com

CHAVES ESTRANGEIRAS

ON UPDATE:○ CASCADE (Em Cascata)

Quando o campo da chave primária é atualizado, registros na tabela referenciada são atualizados em cascata.

Exemplo:Tentar atualizar o código de um cliente quando esse cliente já

possui um pedido.Nenhum erro é gerado, pois o código do cliente também será

atualizado na tabela PEDIDO.

Page 22: Fundamentos de Banco de Dados Prof. André Cypriano M. Costa amonteiro@catolica-es.edu.br acostaprofessor@gmail.com

CHAVES ESTRANGEIRAS

ON DELETE:Esta cláusula indica que quando uma exclusão é executada

sobre uma linha na tabela referenciada, uma das seguintes ações será executada:○ NO ACTION (RESTRICT)

Quando um campo de chave primária está para ser deletado, a exclusão será abortada caso o valor de um registro na tabela referenciada seja mais velho.

Este parâmetro é o default quando esta cláusula não recebe nenhum parâmetro.

Exemplo:Tentar excluir um cliente que possui um pedidoUm erro será gerado!

Page 23: Fundamentos de Banco de Dados Prof. André Cypriano M. Costa amonteiro@catolica-es.edu.br acostaprofessor@gmail.com

CHAVES ESTRANGEIRAS

ON DELETE:○ CASCADE

Quando um registro com a chave primária é excluído, todos os registros relacionados com aquela chave são excluídos.

○ SET NULLQuando um registro com a chave primária é excluído, os respectivos

campos na tabela relacionada recebem NULL.○ SET DEFAULT

Quando um registro com a chave primária é excluído, os campos respectivos da tabela relacionada recebem o valor DEFAULT.

Page 24: Fundamentos de Banco de Dados Prof. André Cypriano M. Costa amonteiro@catolica-es.edu.br acostaprofessor@gmail.com

CHAVES ESTRANGEIRAS

Exemplo:

create table conta ( numConta integer not null, numAgencia integer not null, saldo decimal(10,2) not null , primary key (numConta, numAgencia), foreign key (numAgencia) references agencia(numAgencia)

on update cascadeon delete set null

);

Page 25: Fundamentos de Banco de Dados Prof. André Cypriano M. Costa amonteiro@catolica-es.edu.br acostaprofessor@gmail.com

ALTERANDO RELAÇÕES

O comando alter table é usado para alterar a estrutura de uma relação existente.

Ele permite que o usuário faça a inclusão, exclusão de atributos e alteração de restrições nos atributos em uma tabela.

A forma geral para o comando alter table é a seguinte:

alter table <tabela> <add, drop column, alter column> <coluna>

[<tipo_coluna>];

onde add, adiciona uma coluna; drop, remove uma coluna; e alter, modifica algo em uma tabela.

Page 26: Fundamentos de Banco de Dados Prof. André Cypriano M. Costa amonteiro@catolica-es.edu.br acostaprofessor@gmail.com

ALTERANDO RELAÇÕES

Exemplos:create table agencia (

nome_agencia varchar(20) not null,cidade_aencia varchar(20) default '',fundo integer(10),primary key (nome_agencia)

); Inserindo nova coluna chamada cep como char(9);

alter table agencia add cep char(9); Inserindo uma coluna chamada num como um valor inteiro

e com zero como valor padrão;alter table agencia add num decimal default 0;

Page 27: Fundamentos de Banco de Dados Prof. André Cypriano M. Costa amonteiro@catolica-es.edu.br acostaprofessor@gmail.com

ALTERANDO RELAÇÕES

Exemplos:

nome_agencia varchar(20)

cidade_agencia varchar(20)

fundos double

cep char(9) num int

Redwood Palo Alto 2100000 <null> 0

Perryridge Horseneck 1700000 <null> 0

Mianus Horseneck 400000 <null> 0

Round Hill Horseneck 8000000 <null> 0

Pownal Bennington 300000 <null> 0

North Town Rye 3700000 <null> 0

Brighton Brooklyn 7100000 <null> 0

Down Brooklyn 9000000 <null> 0

Page 28: Fundamentos de Banco de Dados Prof. André Cypriano M. Costa amonteiro@catolica-es.edu.br acostaprofessor@gmail.com

ALTERANDO RELAÇÕES

Exemplos: create table agencia (

nome_agencia varchar(20) not null,cidade_aencia varchar(20) default '',fundo integer(10),cep char(9),num integer default 0, primary key (nome_agencia)

); Excluindo a coluna CEP

alter table agencia drop column cep; Excluindo a coluna fundos

alter table agencia drop column fundos;

Page 29: Fundamentos de Banco de Dados Prof. André Cypriano M. Costa amonteiro@catolica-es.edu.br acostaprofessor@gmail.com

ALTERANDO RELAÇÕES

Exemplos:

nome_agencia varchar(20)

cidade_agencia varchar(20)

num int

Redwood Palo Alto 0

Perryridge Horseneck 0

Mianus Horseneck 0

Round Hill Horseneck 0

Pownal Bennington 0

North Town Rye 0

Brighton Brooklyn 0

Down Brooklyn 0

Page 30: Fundamentos de Banco de Dados Prof. André Cypriano M. Costa amonteiro@catolica-es.edu.br acostaprofessor@gmail.com

ALTERANDO RELAÇÕES

Alterando restrições numa tabela. Exemplos:

alter table agencia alter column cod set not null;alter table agencia alter column cod set default 0;

É possível inserir uma chave estrangeira numa tabela depois de criada usando o comando:

alter table tabela add foreign key (campo) references tabela(campo);

Page 31: Fundamentos de Banco de Dados Prof. André Cypriano M. Costa amonteiro@catolica-es.edu.br acostaprofessor@gmail.com

APAGANDO RELAÇÕES

Para apagar uma tabela do banco de dados use o comando:

drop table <nome>; onde <nome> é o nome da tabela.

O comando drop table remove todas as informações da relação no banco de dados.

Exemplo: Para eliminar uma tabela chamada EMPREGADO, fazemos:

drop table EMPREGADO;

Page 32: Fundamentos de Banco de Dados Prof. André Cypriano M. Costa amonteiro@catolica-es.edu.br acostaprofessor@gmail.com

APAGANDO RELAÇÕES

OBSERVAÇÃO:Existem casos em que a chave primária da tabela que se

está apagando é utilizada como chave estrangeira ou como chave primária composta em diversas tabelas que devem ser devidamente corrigidas.

Este processo não é assim tão simples pois, a exclusão da tabela EMPREGADO implica na alteração do projeto físico de diversas tabelas.

Isto acaba implicando na construção de uma nova base de dados.

Page 33: Fundamentos de Banco de Dados Prof. André Cypriano M. Costa amonteiro@catolica-es.edu.br acostaprofessor@gmail.com

CRIANDO ÍNDICES

Um índice pode ser criado em uma tabela para encontrar dados mais rápido e eficiente, sem a necessidade de percorrer toda a tabela.

Os índices não podem ser visualizados pelos usuários. Observação: Atualizar uma tabela com índice leva mais

tempo do que atualizar uma tabela sem índice.Portanto, apenas crie índices em colunas (e tabelas) que

serão usadas mais para consultas do que inserção/exclusão.

Page 34: Fundamentos de Banco de Dados Prof. André Cypriano M. Costa amonteiro@catolica-es.edu.br acostaprofessor@gmail.com

CRIANDO ÍNDICES

Para criar um índice:

create index nomeIndice on nomeTabela (nomeColuna)

Para apagar um índice*:

alter table nomeTabela drop index nomeIndice

* Sintaxe usada no MySQL.

Page 35: Fundamentos de Banco de Dados Prof. André Cypriano M. Costa amonteiro@catolica-es.edu.br acostaprofessor@gmail.com

BIBLIOGRAFIA

SILBERSCHATZ, Abraham; KORTH, Henry F.; SUDARSHAN, S.. Sistema de banco de dados. 3 ed. São Paulo: Pearson Makron Books, 2005, Cap. 4