contatos [email protected] gladimircc @gladimircc gladimir catarino gladimir c. c. gladimircc...

44
Contatos [email protected] gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. Gladimir CC gladimirc c gladimirc c

Upload: isabel-macias

Post on 07-Apr-2016

212 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

Contatos

[email protected] gladimircc

@gladimircc

Gladimir Catarino

GLADIMIR C. C. GladimirCC

gladimircc

gladimircc

Page 2: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

Banco de Dados 12º Semestre

Aula 07

Prof. Gladimir Ceroni [email protected]

SERVIÇO NACIONAL DE APRENDIZAGEM COMERCIALFACULDADE DE TECNOLOGIA SENAC PELOTAS

Page 3: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

o Padronizado pela indústria de informática.

o Chamado de padrão SQL(Structured Query Language)

o Usa uma combinação de construtores em álgebra relacional e cálculo relacional

o Embora o próprio nome se refira a SQL como uma linguagem de consulta, ela possui outros recursos

SQL - Introdução

Page 4: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

o O padrão SQL define precisamente uma interface SQL para a definição de tabelas, para as operações sobre as mesmas (seleção, projeção, junção e outras) e para a definição de regras de integridade de bancos de dados

o A interface SQL é implementada em todos os sistemas de bancos de dados relacionais existentes

o A existência de padrões facilita a interoperabilidade

SQL - Introdução

Page 5: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

o Um SGBD necessita possuir duas linguagenso DDL (Data Definition Language) - Usada para definir os

esquemas, atributos, visões, regras de integridade, índices, etc.

o DML (Data Manipulation Language) - Usada para se ter acesso aos dados armazenados no BD

o Exemplos de linguagens de consultao QUELo QBEo SQL

SQL - Introdução

Page 6: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

o A versão original de SQL foi desenvolvida pela IBMo Originalmente chamada de SEQUELo Parte do projeto System R

o Tornou-se a linguagem padrão para SGBD’s relacionais

o Existem diversos padrões para SQLo – ANSI-SQL (SQL-86)o – IBM SQL (SQL-89)o – ANSI/ISO SQL (SQL 92)o – SQL-3 (SQL 99)

SQL - Histórico

Page 7: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

o SQL é dividido em diversas partes

o Linguagem de definição de dados (DDL) - proporciona comandos para a definição, exclusão e modificação de esquemas de relações e criação de índices

o Linguagem interativa de manipulação de dados (DML) – linguagem de consulta baseada na álgebra e no cálculo relacional de tuplas, incluindo inserção, exclusão e modificação de tuplas

Partes do SQL

Page 8: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

o Definição de visões

o Autorização – definição de direitos de acesso a relações e visões

o Integridade – especificação de regras de integridade que os dados que serão armazenados deverão satisfazer

o Controle de transações – comandos para especificação de iniciação e finalização de transações

Partes do SQL

Page 9: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

SQL - Domínios

Page 10: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

SQL - Domínios

Page 11: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

SQL - Domínios

Page 12: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

SQL - Domínios

Page 13: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

SQL - Domínios

Page 14: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

SQL - Domínios

Page 15: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

SQL - Domínios

Page 16: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

Comandos SQL Structured Query Language

Page 17: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

Comandos SQL - DDLData Definition Language

Page 18: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

• Os comandos SQL para definição de dados são:- CREATE- DROP- ALTER

• SQL permite a criação de domíniosCREATE DOMAIN nome_pessoa char(20);

• No exemplo acima nome_pessoa poderá ser usado como domínio de um atributo qualquer

Comandos SQL - DDL

Page 19: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

• CREATE TABLE: especifica uma nova tabela (relação), dando o seu nome e especificando as colunas (atributos), cada uma com seu nome, tipo e restrições

• Sintaxe:CREATE TABLE r (A1 D1, A2 D2, ..., AN DN,

<regra de integridade1>,...,

<regra de integridadeK> )

• Onde r é o nome da relação (tabela), Ai é um nome de atributo e Di é o domínio do atributo Ai

Comandos SQL - DDL

Page 20: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

• As definições dos atributos têm o seguinte formato:- atributo tipo [NOT NULL [UNIQUE]] [DEFAULT valor]

• Onde:- atributo: nome do atributo que está sendo definido- tipo_dado: domínio do atributo- NOT NULL: expressa que o atributo não pode receber

valores nulos- UNIQUE: indica que o atributo tem valor único na tabela.

Qualquer tentativa de se introduzir uma linha na tabela contendo um valor igual ao do atributo será rejeitada.

- DEFAULT valor: indica um valor a ser atribuído ao atributo caso não seja determinado um valor na

inserção

Comandos SQL - DDL

Page 21: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

• Regras de integridade (constraints)

- Integridade de chave• PRIMARY KEY (atributos chave)

- Integridade referencial• FOREIGN KEY (atributos) REFERENCES

tabela_base(atributos)

- Integridade de domínio• CHECK (condição)

Comandos SQL - DDL

Page 22: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

CREATE TABLE empregado (nome VARCHAR(15) NOT NULL, matricula char(9) NOT NULL, dataNasc DATE, endereco VARCHAR(30), sexo CHAR, salario NUMERIC(10,2), supervisor CHAR(9), depto INT NOT NULL, PRIMARY KEY (matricula), CHECK (salario >= 0), FOREIGN KEY (supervisor) REFERENCES empregado(matricula), FOREIGN KEY (depto) REFERENCES departamento(codDep));

Comandos SQL - DDL

Page 23: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

CREATE TABLE departamento (nomeDep VARCHAR(15) NOT NULL, codDep INT NOT NULL, gerente CHAR(9) NOT NULL, dataInicioGer DATE, PRIMARY KEY(codDep), UNIQUE (nomeDep), FOREIGN KEY (gerente) REFERENCES empregado(matricula));

Comandos SQL - DDL

Page 24: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

CREATE TABLE estudante (nome char(15) NOT NULL, idEstudante char(10) NOT NULL, nivel char(15) NOT NULL, PRIMARY KEY (idEstudante), CHECK (nivel IN ('Bacharelado', 'Mestrado', 'Doutorado')))

Comandos SQL - DDL

Page 25: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

• O valor NULL é um valor válido para todos os tipos em SQL, salvo se o tipo for definido como NOT NULL

• Sabemos que uma chave primária não pode conter valores nulos e repetições- O SQL-89 obrigava os atributos da chave

primária a serem declarados como NOT NULL e UNIQUE

- SQL-92 já assume essas condições, sua declaração é redundante

Comandos SQL - DDL

Page 26: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

• Exercício:

Defina as tabelas abaixo usando SQL- FORNECEDOR (codigo, nome, cidade)- VENDA (codForn, codPeca, quantidade, data)- PECA (codPeca, nome, descricao)

• É obrigatório que:- quantidade seja maior que zero- nome da peça não seja nulo

Comandos SQL - DDL

Page 27: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

CREATE TABLE Fornecedor ( codigo CHAR(10) NOT NULL, nome VARCHAR(50) NOT NULL, cidade VARCHAR(80), PRIMARY KEY(codigo));

Comandos SQL - DDL

Page 28: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

CREATE TABLE Peca ( codPeca CHAR(10) NOT NULL, nome VARCHAR(50) NOT NULL, descricao VARCHAR(100), PRIMARY KEY (codPeca));

Comandos SQL - DDL

Page 29: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

CREATE TABLE Venda ( codForn CHAR(10) NOT NULL, codPeca CHAR(10) NOT NULL, quantidade INT NOT NULL, data DATE NOT NULL, PRIMARY KEY (codForn, codPeca), FOREIGN KEY (codForn) REFERENCES Fornecedor(codigo), FOREIGN KEY (codPeca) REFERENCES Peca(codPeca), CHECK (quantidade > 0));

Comandos SQL - DDL

Page 30: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

• Chave estrangeira- É definida com a cláusula FOREIGN KEY

CREATE TABLE Empregado ( matricula CHAR(9) NOT NULL, nome VARCHAR(15) NOT NULL, ... FOREIGN KEY supervisor CHAR(9) REFERENCES Empregado(matricula), FOREIGN KEY codDep INT NOT NULL REFERENCES Departamento(codigo), ...);

Comandos SQL - DDL

Page 31: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

• Uma cláusula FOREIGN KEY inclui regras de remoção / atualização:

FOREIGN KEY (coluna) REFERENCES tabela[ON DELETE {RESTRICT|CASCADE|SET NULL| SET DEFAULT}][ON UPDATE {RESTRICT|CASCADE|SET NULL| SET DEFAULT}]

• Supondo que T2 tem uma chave estrangeira para T1, vejamos as cláusulas ON DELETE e ON UPDATE

Comandos SQL - DDL

Page 32: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

• ON DELETE

- RESTRICT: (default) significa que uma tentativa de se remover uma linha de T1 falhará se alguma linha em T2 combina com a chave

- CASCADE: remoção de uma linha de T1 implica em remoção de todas as linhas de T2 que combina com a chave de T1

- SET NULL: remoção de T1 implica em colocar NULL em todos os atributos da chave estrangeira de cada linha de T2 que combina

- SET DEFAULT: remoção de linha em T1 implica em colocar valores DEFAULT nos atributos da chave estrangeira de cada linha de T2 que combina

Comandos SQL - DDL

Page 33: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

• ON UPDATE- RESTRICT: (default) update de um atributo de T1 falha se

existem linhas em T2 combinando

- CASCADE: update de atributo em T1 implica que linhas que combinam em T2 também serão

Atualizadas

- SET NULL: update de T1 implica que valores da chave estrangeira em T2 nas linhas que combinam são postos para NULL

- SET DEFAULT: update de T1 implica que valores da chave estrangeira de T2 nas linhas que combinam terão valores default aplicados

Comandos SQL - DDL

Page 34: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

• As restrições de integridade podem ter um nome e serem especificadas com a cláusula CONSTRAINT

• Isto permite que possamos no futuro eliminar (DROP) ou alterar (ALTER) o constraint

• O exemplo a seguir mostra o uso de CONSTRAINT, DEFAULT, ON DELETE e ON UPDATE

Comandos SQL - DDL

Page 35: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

CREATE TABLE empregado ( depto INT NOT NULL DEFAULT 1,

CONSTRAINT empPK PRIMARY KEY(matricula),

CONSTRAINT empSuperFK FOREIGN KEY(supervisor) REFERENCES empregado(matricula) ON DELETE SET NULL ON UPDATE CASCADE,

CONSTRAINT deptoFK FOREIGN KEY (depto) REFERENCES departamento(codigo) ON DELETE SET DEFAULT ON UPDATE CASCADE);

Comandos SQL - DDL

Page 36: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

• ALTER TABLE- Permite que se altere os atributos de uma determinada tabela ou que se adicione novos atributos (evolução de esquemas)

- Os novos atributos terão valores nulos em todas as linhas

- Ao incluirmos uma coluna devemos especificar o seu tipo de dado, não podendo esta coluna ser NOT NULL

Comandos SQL - DDL

Page 37: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

• Sintaxe:ALTER TABLE tabela_base ADD atributo tipo_dado

• Exemplo:ALTER TABLE Peca ADD espessura INT

Comandos SQL - DDL

Page 38: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

• Podemos remover um atributo usando a sintaxeALTER TABLE tabela_baseDROP atributo [CASCADE|RESTRICT]

• CASCADE: remove todas as restrições relativas ao atributo e visões que contêm o atributo

• RESTRICT: não permite a remoção do atributo se este é usado numa visão ou como chave estrangeira numa outra tabela

Comandos SQL - DDL

Page 39: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

• Exemplos:

ALTER TABLE empregado DROP endereco CASCADE;

ALTER TABLE departamento ALTER gerente DROP DEFAULT

ALTER TABLE departamento ALTER gerente SET DEFAULT “333444555”

ALTER TABLE empregado DROP CONSTRAINT empsuperFK;

ALTER TABLE empregado ADD CONSTRAINT empsuperFK FOREIGN KEY (supervisor) REFERENCES empregado (matricula)

Comandos SQL - DDL

Page 40: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

• DROPTABLE- Remove uma tabela-base do BD. Remove tanto os

dados quanto a definição da tabela• Sintaxe

- DROP TABLE <nomeTabela>

• Exemplo- DROP TABLE Peca

Comandos SQL - DDL

Page 41: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

• Especificando índices em SQL- SQL possui comandos para criar e remover índices

em atributos de relações base (faz parte da SQL DDL)

- Um índice é uma estrutura de acesso físico que é especificado em um ou mais atributos de um arquivo, permitindo um acesso mais eficiente aos dados

- Se os atributos usados nas condições de seleção e junção de uma query são indexados, o tempo de execução da query é melhorado

Comandos SQL - DDL

Page 42: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

Comandos SQL - DDL

• Ex.: Criar um índice no atributo nome da relação EmpregadoCREATE INDEX nomeEmpIndex ON Empregado(nome)

• O default é ordem ascendente, se quisermos uma ordem descendente adicionamos a palavra chave DESC depois do nome do atributo

Page 43: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

• Para especificar a restrição de chave usamos a palavra UNIQUECREATE UNIQUE INDEX matrEmpIndex ON

Empregado(matricula)

• Para eliminarmos um índice usamos o comando DROP- Ex. DROP INDEX nome-indice

Comandos SQL - DDL

Page 44: Contatos gladimir@gmail.com gladimircc @gladimircc Gladimir Catarino GLADIMIR C. C. GladimirCC gladimircc

• Restrições de domínios- Na criação de domínios, é possível aplicar constraints para

realizar algumas restrições- ExemplosCREATE DOMAIN turno_trabalho NUMERIC(5,2)

CONSTRAINT valor_teste_turno CHECK (VALUE >= 4,00)

CREATE DOMAIN numero_conta CHAR(10)

CONSTRAINT teste_nulo_numero_conta CHECK (VALUE NOT NULL)

CREATE DOMAIN tipo_conta CHAR(10)

CONSTRAINT teste_tipo_conta CHECK (VALUE IN (“Corrente”, “Poupança”))

Comandos SQL - DDL