1 - sql (aluno) – structured query language

Post on 30-Jul-2015

48 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Linguagem SQLLinguagem SQL

Apresentação

• A álgebra relacional descrita no Capítulo 2 fornece uma notação formal e concisa para representar consultas. Entretanto, os sistemas de banco de dados comerciais exigem uma linguagem de consulta que seja mais amigável.

• Neste capítulo, bem como no Capítulo 4, estudaremos a SQL, a linguagem de consulta mais comercialmente influente. A SQL usa uma combinação de construções de álgebra relacional (Capítulo 2) e cálculo relacional (Capítulo 5).

• Embora nos referimos à SQL como uma "linguagem de consulta", ela pode fazer muito mais do que simplesmente consultar um banco de dados. Ela pode definir a estrutura dos dados, modificar dados no banco de dados e especificar restrições de segurança.

História da SQL

• A IBM desenvolveu a versão original da SQL, originalmente chamada Sequel, como parte do projeto R no início da década de 1970. A linguagem Sequel evoluiu desde então, e seu nome mudou para SQL (Structured Query Language). Muitos produtos agora aceitam a linguagem SQL. A SQL se estabeleceu claramente como a linguagem padrão de banco de dados relacional.

• Em 1986, o American National Standards Institute (ANSI) e a International Organization for Standardization (ISO) publicaram um padrão SQL, chamado SQL-86. Em 1989, o ANSI publicou um padrão estendido para a linguagem: a SQL-89. A próxima versão do padrão foi a SQL-92, seguida da SQL: 1999; a versão mais recente é a SQL:2003. As notas bibliográficas fornecem referências para esses padrões.

Partes da linguagem SQL

• Linguagem de definição de dados (DDL). A DDL da SQL fornece comandos para definir esquemas de relação, excluir relações e modificar esquemas.

conta (número_conta, nome_agência, saldo) create table conta

(número_conta char(10), nome_agência char(15), saldo nuneric(12,2), primary key (número_conta))

• Linguagem de manipulação de dados interativa (DML). A DML da SQL inclui uma linguagem de consulta baseada na álgebra relacional (2) e no cálculo relacional de tupla (5). Ela também inclui comandos para inserir, excluir e modificar tuplas no banco de dados.

Partes da linguagem SQL

• Integridade. A DDL SQL inclui comandos para especificar restrições de integridade às quais os dados armazenados no banco de dados precisam satisfazer. As atualizações que violam as restrições de integridade são proibidas.

• Definição de view. A DDL SQL inclui comandos para definir views.

• Controle de transação. A SQL inclui comandos para especificar o início e o fim das transações.

• SQL embutida e SQL dinâmica. A SQL embutida e a dinâmica definem como as instruções SQL podem ser incorporadas dentro das linguagens de programação de finalidade geral, como C, C++, Java, PL7I, Cobol, Pascal e Fortran.

• Autorização. A DDL SQL inclui comandos para especificar direitos de acesso para relações e views.

Definição de dados

• O conjunto de relações em um banco de dados precisa ser especificado para o sistema por meio de uma linguagem de definição de dados (DDL). A DDL SQL permite a especificação não só de um conjunto de relações, mas também de informações sobre cada relação, incluindo

• O esquema para cada relação

• O domínio dos valores associados a cada atributo

• As restrições de integridade

• O conjunto dos índices a serem mantidos para cada relação

• As informações de segurança e autorização para cada relação

• A estrutura de armazenamento físico de cada relação no disco

SQL : DDL e DMLSQL : DDL e DML

• DDL (Data Definition Language)

Linguagem para definição de dados• DML (Data Manipulation Language)

Linguagem para manipulação de dados

DDL(Estruturas)

DML(Dados)

Linguagem para Linguagem para Definição de Dados (DDL)Definição de Dados (DDL)

• Criação

• Exclusão

• Alteração

Comandos usados para definir edescrever os dados e as relações

dos dados em um banco de dados:

DDL - ExemplosDDL - Exemplos

• Createdatabasedomaintable, ...

• Alterdomaintable, ...

• Dropdatabasedomain table

Criação Exclusão

Alteração

CREATEDBCREATEDB

CREATEDB BD01;

DDL - Criação

ALGUNS TIPOS DE DADOS Categoria Tipo de dado Descrição Caracter/String Text Permite armazenar número ilimitado de caracteres. Varchar(T) T refere-se à quantidade máxima de caracteres a

serem armazenados. Tanto text, como varchar ocupam para armazenamento somente a quantidade de caracteres efetivamente utilizada.

Char(T) T refere-se à quantidade máxima de caracteres a serem armazenados. Diferente de text e varchar, ocupa o espaço total de armazenamento referido em T.

Numéricos Integer Número inteiro na faixa de 2 bilhões. Int2 Número inteiro na faixa de 32 mil. Int8 Número inteiro na faixa de 4 x 1018 Numeric(P,D) Número real com precisão definida. Ex.: numeric(8,2)

define um número com até 6 dígitos antes da vírgula e 2 após a vírgula.

Float Número de ponto flutuante, com 15 dígitos de precisão.

Float4 Número de ponto flutuante, com 6 dígitos de precisão. Temporais Date Data no formato yy-mm-dd. Time Hora no formato hh:mm:ss. Timestamp Data e hora no formato yy-mm-dd hh:mm:ss. Interval Intervalo de tempo, gerado pela subtração de 2 dados

do tipo timestamp. Ex.: 5 horas e 7 dias. Lógicos Bool Dado booleano, pode ser entrado como true, t, yes, y

ou 1 e também false, f, no, n ou 0. Mas armazena o dado como t ou f.

Restrições de dados:

• NOT NULL – torna a entrada de valores obrigatória na coluna.

• CHECK – verifica em cada operação de inclusão e alteração se a condição especificada para o campo está sendo cumprida.

• DEFAULT – especifica um valor padrão a ser atribuído ao campo quando nenhuma entrada for especificada.

• UNIQUE – não permite que valores duplicados apareçam na coluna. Todos os campos designados como chave candidata (entrada não repetida), devem ser especificados como UNIQUE.

• PRIMARY KEY – especifica uma chave primária, ou seja, identifica unicamente cada linha.

REFERENCES – especifica uma chave estrangeira, ou seja, o valor do campo é baseado nos valores de chave primária de “outra” tabela. Quando estamos declarando um campo como chave estrangeira em uma tabela, podemos especificar quais ações devem ser tomadas no caso de exclusão ou alteração da chave estrangeira:

SET NULL CASCADE SET DEFAULT ON DELETE

Quando a tupla correspondente a FK é excluída seu valor é marcado como nulo.

Quando a tupla correspondente a FK é excluído todas as tuplas que a tinham como FK são excluídas também.

Quando a tupla correspondente a FK é excluída seu valor é marcado com o valor default especificado.

ON UPDATE

Quando a tupla correspondente a FK é alterada seu valor é marcado como nulo.

Quando a tupla correspondente a FK é alterada todas as tuplas que a tinham como FK são alteradas também.

Quando a tupla correspondente a FK é alterada seu valor é marcado com o valor default especificado.

A opção NO ACTION é o default do Postgresql, e especifica que não podem ser feitas alterações e exclusões em campos que são referenciados como chave estrangeira.

CREATE TABLE vendedor(cod_vendedor INT2 PRIMARY KEY,nome varchar(30) NOT NULL,endereco varchar(80),cep char(8),datanascimento date,telefone varchar(18),funcao varchar(50), datacontratacao date,

cod_departamento INT2 REFERENCES departamento ON UPDATE CASCADE ON DELETE SET NULL, cod_cidade INT2 DEFAULT 1 REFERENCES cidade ON UPDATE SET NULL ON DELETE SET DEFAULT);

Ex. de restriçõesEx. de restrições

O que é um Domínio?O que é um Domínio?

É um apelido (aliás) para um determinado tipo de dado

• Domínios SIMPLESDomínios SIMPLES

CREATE DOMAIN ENDER AS VARCHAR (30)

CREATE DOMAIN FONE AS VARCHAR (20)

Crie um domínio Inteiro do tipo Int2

• CREATE DOMAIN INTEIRO AS INT2

• Domínios COMPLEXOSDomínios COMPLEXOS

CREATE DOMAIN SALARIO AS

NUMERIC (9,2)

DEFAULT 0

CHECK (VALUE>0)

CREATE DOMAIN DEPTO AS INT2

CHECK (VALUE BETWEEN 0 AND 6)

CREATE TABLECREATE TABLE

CREATE TABLE FORNECEDOR( CNPJ INT2 NOT NULL,

NOME VARCHAR(30)

)

Fornecedor

cnpjnome

cnpjFornecedor

nome

DDL - Criação

CREATE TABLE e DomíniosCREATE TABLE e Domínios

CREATE TABLE CLIENTE(

NOME VARCHAR(30),ENDERECO ENDER,SALARIO SALARIO

)

salario

Cliente

endereçonome

Cliente

salarioendereçonome

Domínios

CódigoFuncionário

NomeSalario

CREATE TABLE FUNCIONARIO(

CODIGO INT,NOME VARCHAR(30),SALARIO FLOAT,PRIMARY KEY(CODIGO)

);

Funcionário

Código

Nome

Salario

CREATE TABLE e Chave Primária (PK)CREATE TABLE e Chave Primária (PK)

Cliente

Codigo

Fone*

ddd número

Nome

Endereço Data_nasc

CodigoCliente

NomeEndereçoData_nasc

NúmeroDDDCliente

Fone

CREATE TABLE e Chave Estrangeira (FK)CREATE TABLE e Chave Estrangeira (FK)

CREATE TABLE CLIENTE(

CODIGO INT2,NOME VARCHAR(30),ENDERECO VARCHAR(30),DATA_NASC DATE,PRIMARY KEY (CODIGO)

);

DICA: Crie sempre a tabelaDICA: Crie sempre a tabelaorigem antes da tabela destinoorigem antes da tabela destino

CREATE TABLE FONE( DDD VARCHAR(10), NUMERO VARCHAR(20),

CLIENTE INT2 NOT NULL,PRIMARY KEY (NUMERO,DDD,CLIENTE),FOREIGN KEY(CLIENTE)REFERENCES

CLIENTE(CODIGO));

CodigoCliente

NomeEndereçoData_nasc

NúmeroDDDCliente

Fone

Funcionário Deptart.Gerencia1 1

CodigoFFuncionário

NomeFunSalario

CodigoDDepartamento

GerenteNomeD

CREATE TABLE e CREATE TABLE e Relacionamento 1:1Relacionamento 1:1

CREATE TABLE FUNCIONARIO(

CODIGOF INT2,NOMEFUN VARCHAR(30),SALARIO FLOAT,PRIMARY KEY(CODIGOF)

);

CodigoFFuncionário

NomeFunSalario

CodigoDDepartamento

GerenteNomeD

CREATE TABLE DEPARTAMENTO( CODIGOD INT2, GERENTE INT2, NOMED VARCHAR(30), PRIMARY KEY(CODIGOD), FOREIGN KEY(GERENTE)REFERENCES FUNCIONARIO(CODIGOF));

CodigoFFuncionário

NomeSalario

CodigoDDepartamento

GerenteNomeD

Aluno CursoestudaN 1

RAAluno

NomeSexoCurso

CodigoCurso

Nome

CREATE TABLE e CREATE TABLE e Relacionamento 1:NRelacionamento 1:N

CREATE TABLE CURSO(

CODIGO INTEGER,NOMEC VARCHAR(30),PRIMARY KEY(CODIGO)

);

RAAluno

NomeSexoCurso

CodigoCurso

NomeC

CREATE TABLE ALUNO(

RA INT2,NOMEALUNO VARCHAR(30),

SEXO CHAR(1),CURSO INTEGER,PRIMARY KEY(RA),FOREIGN KEY(CURSO)REFERENCES CURSO(CODIGO)

);

RAAluno

NomeAlunoSexoCurso

CodigoCurso

Nome

Atleta ModalidadePraticaN N

CodigoAAtleta

NomeEndereçoData_nasc

CodigoACodigoM

CodigoM

Modalidade

Nome

Pratica

CREATE TABLE e CREATE TABLE e Relacionamento N:NRelacionamento N:N

CREATE TABLE ATLETA(

CODIGOA INTEGER,NOMEATLETA VARCHAR(30),ENDERECO VARCHAR(30),DATA_NASC DATE,PRIMARY KEY(CODIGOA)

);

CREATE TABLE MODALIDADE(

CODIGOM INTEGER,NOMEMOD VARCHAR(30),PRIMARY KEY(CODIGOM)

);

CodigoAAtleta

NomeAtletaEndereçoData_nasc

CodigoACodigoM

CodigoM

Modalidade

NomeMod

Pratica

CREATE TABLE PRATICA(

CODIGOA INTEGER,CODIGOM INTEGER,PRIMARY KEY(CODIGOA,CODIGOM),FOREIGN KEY(CODIGOA)REFERENCES ATLETA(CODIGOA),FOREIGN KEY(CODIGOM)REFERENCES MODALIDADE(CODIGOM)

);

CodigoAAtleta

NomeAtletaEndereçoData_nasc

CodigoACodigoM

CodigoM

Modalidade

NomeMod

Pratica

Ou posso alterar os nomes das chaves do Pratica... Veja!

CREATE TABLE PRATICA(CODATLETA INTEGER,CODMODALIDADE INTEGER,PRIMARY KEY(CODATLETA,CODMODALIDADE),FOREIGN KEY(CODATLETA)REFERENCES ATLETA(CODIGOA),FOREIGN KEY(CODMODALIDADE)REFERENCES MODALIDADE(CODIGOM)

);

CodigoAAtleta

NomeAtletaEndereçoData_nasc

CodAtletaCodModalidade

CodigoM

Modalidade

NomeMod

Pratica

Exercícios

• Crie as tabelas do esquema da instituição bancária utilizando a DDL da linguagem SQL:– Agência (cod_agencia, nome_agência, cidade_agência, ativo) – Cliente (cod_cliente, nome_cliente, rua_cliente, cidade_cliente) – Conta (cod_conta, número_conta, nome_agência, saldo) – Depositante (cod_depositante, nome_cliente, número_conta)

Agência e Clienteagência (cod_agência, nome_agência, cidade_agência, ativo) CREATE TABLE agência(

cod_agência int2,nome_agência char(15), cidade_agência char(30), ativo numeric(16,2),primary key (cod_agência)

)

cliente (cod_cliente, nome_cliente, rua_cliente, cidade_cliente)CREATE TABLE cliente(

cod_cliente int2,nome_cliente char(20), rua_cliente char(30), cidade_cliente char(30), primary key (cod_cliente)

)

Conta e Depositante

conta (cod_conta, número_conta, nome_agência, saldo) CREATE TABLE conta (

cod_conta int2,número_conta char(10), nome_agência char(15), saldo nuneric(12,2), primary key (cod_conta)

)

depositante (cod_depositante, nome_cliente, número_conta)CREATE TABLE depositante (

cod_depositante int2,nome_cliente char(20), número_conta char(10), primary key (cod_depositante)

)

Crie as tabelas do esquema a seguir utilizando a DDL da linguagem SQL:

• fornecedor (cod_fornecedor, nome_fornecedor)

• produto (cod_produto, nome_produto, cod_fornecedor, cod_categoria)

• categoria (cod_categoria, nome_categoria)

• pedido (cod_pedido, nome_pedido, cod_cliente)

• cliente (cod_cliente, nome_cliente)

• ped_prod (cod_produto, cod_pedido)

Fim 1 Aula

CodigoProfessor

NomeEndereçoRG

CREATE TABLE e Chave CandidataCREATE TABLE e Chave Candidata

CodigoProduto

DescricaoPesoVolume

Restrição: Aceitar somente produtos cujo peso é

maior que 50

CREATE TABLE e Restrição de Coluna CREATE TABLE e Restrição de Coluna (Check)(Check)

CodigoProduto

DescricaoPesoVolume

• Aceitar somente produtos cujo peso é maior que 50

• Caso o volume não seja informado, atribuir o valor 0 de modo automático

CREATE TABLE e Valor DefaultCREATE TABLE e Valor Default

CodigoProduto

DescricaoPesoVolume

Restrição: Aceitar somente produtos cujo volume é menor que o peso

CREATE TABLE e Restrição de Tabela CREATE TABLE e Restrição de Tabela (Check)(Check)

Operadores RelacionaisOperadores Relacionais

= igual a

> maior que

< menor que

<= maior ou igual a

>= menor ou igual a

<>, != diferente de

CodigoProduto

DescricaoPesoVolume

Crie a tabela produto de maneira que não seja possível inserir produtos cujo peso é igual ao

volume

Operadores LógicosOperadores Lógicos

AND e

OR ou

NOT não

IN dentro de

BETWEEN entre

LIKE como

CodigoProduto

DescricaoPesoVolume

Crie a tabela produto de maneira que seja possível inserir somente produtos cujo peso

é igual a 50, 60, 70 ou 80.

CodigoProduto

DescricaoPesoVolume

Crie a tabela produto de maneira que seja possível somente inserir produtos cujo

volume esteja entre 20 e 80.

DROP DATABASEDROP DATABASE

• Apaga o banco de dados atual e todos os dados que ele contêm!!!

DROP DATABASE

DDL - Exclusão

ATENCÃO

DROP DOMAINDROP DOMAIN

•Apaga um domínio do banco de dados

DROP DOMAIN SALARIO;

DDL - Exclusão

• A exclusão falha se houverem atributos (colunas) usando o domínio.

• Portanto, deve-se alterar o domínio dos atributos (colunas) que usam o domínio ou excluir estes atributos primeiro!

DROP DOMAINDROP DOMAIN

•Apaga um domínio do banco de dados

DROP DOMAIN SALARIO [CASCADE|RESTRICT];

DDL - Exclusão

CASCADERemove automaticamente os objetos que dependem do domínio (como colunas de tabelas).

RESTRICTRecusa remover o domínio se existirem objetos que dependem do mesmo. Este é o padrão.

DROP TABLEDROP TABLE

• Apaga tabelas

DROP TABLE Fornecedor;

cnpjFornecedor

nome

DDL - Exclusão

ExemploExemplo

DROP TABLE ALUNO;DROP TABLE CURSO;

RAAluno

NomeSexoCurso

CodigoCurso

Nome

DICA: Apague sempre a tabelaDICA: Apague sempre a tabeladestino antes da tabela origemdestino antes da tabela origem

DROP TABLE PRATICA;DROP TABLE ATLETA;DROP TABLE MODALIDADE;

ExemploExemplo

CódigoAtleta

NomeEndereçoData_nasc.

AtletaModalidade

CódigoModalidade

Nome

Pratica

CodigoFuncionário

NomeSalario

CodigoDepartamento

GerenteNome

DROP TABLE DEPARTAMENTO;DROP TABLE FUNCIONARIO;

ExemploExemplo

ALTER DOMAINALTER DOMAIN

• Altera a definição de um domínio, afetando as colunas nele baseadas

DDL - Alteração

ALTER DOMAIN SALARIO TO NOVO_SALARIO;

ALTER DOMAIN DEPTO TO DEPTO_1 TYPE INTEGER;

ALTER TABLEALTER TABLE

• Adiciona ou elimina colunas a uma tabela.

• Adiciona ou elimina restrições em uma tabela– Chave Primária– Chave Estrangeira– Chave Candidata– Check

DDL - Alteração

ALTER TABLE FORNECEDORADD DESCRICAO CHAR(50);

Fornecedor

cnpjnome

descrição

ALTER TABLE p/ Adicionar ColunasALTER TABLE p/ Adicionar Colunas

ALTER TABLE p/ eliminar ColunasALTER TABLE p/ eliminar Colunas

ALTER TABLE FORNECEDORDROP DESCRICAO;

Fornecedor

cnpjnome

ALTER TABLE FORNECEDORADD CONSTRAINT PK_CNPJ PRIMARY KEY(CNPJ);

Fornecedor

cnpjnome

ALTER TABLE p/ adicionar Chave ALTER TABLE p/ adicionar Chave Primária (PK)Primária (PK)

ALTER TABLE FORNECEDORDROP CONSTRAINT PK_CNPJ;

Fornecedor

cnpjnome

ALTER TABLE p/ eliminar Chave ALTER TABLE p/ eliminar Chave Primária (PK)Primária (PK)

Cidade

Nome Codigo

ExercícioExercício

• Escreva o comando para criar a tabela cidade conforme o modelo abaixo.

• Escreva o comando para alterar a tabela criada de maneira que a coluna Código seja chave primária.

• Escreva o comando para apagar a restrição de chave primária da tabela Cidade.

ALTER TABLE FORNECEDORADD CIDADE INT2 NOT NULL;

Fornecedor CidadepertenceN 1

nome cnpj nome codigo

ALTER TABLE FORNECEDORADD CONSTRAINT FK_CODIGO

FOREIGN KEY(CIDADE)REFERENCES CIDADE(CODIGO);

ALTER TABLE p/ adicionar Chave ALTER TABLE p/ adicionar Chave Estrangeira (FK)Estrangeira (FK)

ALTER TABLE FORNECEDORDROP CONSTRAINT FK_CODIGO;

CnpjFornecedor

NomeCidade

CodigoCidade

NomeESTRANG

ALTER TABLE p/ eliminar Chave ALTER TABLE p/ eliminar Chave Estrangeira (FK)Estrangeira (FK)

Professor

endereçocódigo

nome

rg

ALTER TABLE PROFESSORADD CONSTRAINT CANDIDATA UNIQUE(RG);

ALTER TABLE p/ adicionar Chave ALTER TABLE p/ adicionar Chave CandidataCandidata

Professor

endereçocódigo

nome

rg

ALTER TABLE PROFESSORDROP CONSTRAINT CANDIDATA;

ALTER TABLE p/ eliminar ALTER TABLE p/ eliminar Chave CandidataChave Candidata

Produto

pesocódigo

descrição

volume

RESTRIÇÃO: VOLUME < PESO

ALTER TABLE p/ adicionar Restrição ALTER TABLE p/ adicionar Restrição (CHECK)(CHECK)

Produto

pesocódigo

descrição

volume

ALTER TABLE p/ eliminar Restrição ALTER TABLE p/ eliminar Restrição (CHECK)(CHECK)

ALTER TABLE FORNECEDORALTER COLUMN NOME TO RAZAO_SOCIAL;

cnpjFornecedor

nome

ALTER TABLE p/ alterar ALTER TABLE p/ alterar nomes de colunasnomes de colunas

CREATE TABLE FORNECEDOR(

NOME CHAR(30),CNPJ INT NOT NULL

);

ALTER TABLE FORNECEDOR ALTER COLUMN NOME TYPE VARCHAR(30);

ALTER TABLE p/ alterar ALTER TABLE p/ alterar tipos de dadostipos de dados

TRUNCATE TABLE

• Por vezes queremos remover todos os dados de uma tabela. Uma forma de o fazer é através do comando DROP TABLE. Mas e se apenas quisermos remover todos os dados , mas não a própria tabela? Para tal, podemos utilizar o comando TRUNCATE TABLE. A sintaxe para TRUNCATE TABLE é:

TRUNCATE TABLE "nome_tabela"

• Assim, se quisermos truncar a tabela denominada “cliente", basta escrever:

TRUNCATE TABLE cliente

top related