1 - sql (aluno) – structured query language
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