Escolar Documentos
Profissional Documentos
Cultura Documentos
Apresentao
A lgebra relacional descrita no Captulo 2 fornece uma notao formal e concisa para representar consultas. Entretanto, os sistemas de banco de dados comerciais exigem uma linguagem de consulta que seja mais amigvel.
Neste captulo, bem como no Captulo 4, estudaremos a SQL, a linguagem de consulta mais comercialmente influente. A SQL usa uma combinao de construes de lgebra relacional (Captulo 2) e clculo relacional (Captulo 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 restries de segurana.
Histria da SQL
A IBM desenvolveu a verso original da SQL, originalmente chamada Sequel, como parte do projeto R no incio da dcada de 1970. A linguagem Sequel evoluiu desde ento, e seu nome mudou para SQL (Structured Query Language). Muitos produtos agora aceitam a linguagem SQL. A SQL se estabeleceu claramente como a linguagem padro de banco de dados relacional.
Em 1986, o American National Standards Institute (ANSI) e a International Organization for Standardization (ISO) publicaram um padro SQL, chamado SQL-86. Em 1989, o ANSI publicou um padro estendido para a linguagem: a SQL-89. A prxima verso do padro foi a SQL-92, seguida da SQL: 1999; a verso mais recente a SQL:2003. As notas bibliogrficas fornecem referncias para esses padres.
Linguagem de manipulao de dados interativa (DML). A DML da SQL inclui uma linguagem de consulta baseada na lgebra relacional (2) e no clculo relacional de tupla (5). Ela tambm inclui comandos para inserir, excluir e modificar tuplas no banco de dados.
Controle de transao. A SQL inclui comandos para especificar o incio e o fim das transaes.
SQL embutida e SQL dinmica. A SQL embutida e a dinmica definem como as instrues SQL podem ser incorporadas dentro das linguagens de programao de finalidade geral, como C, C++, Java, PL7I, Cobol, Pascal e Fortran. Autorizao. A DDL SQL inclui comandos para especificar direitos de acesso para relaes e views.
Definio de dados
O conjunto de relaes em um banco de dados precisa ser especificado para o sistema por meio de uma linguagem de definio de dados (DDL). A DDL SQL permite a especificao no s de um conjunto de relaes, mas tambm de informaes sobre cada relao, incluindo O esquema para cada relao
O domnio dos valores associados a cada atributo As restries de integridade O conjunto dos ndices a serem mantidos para cada relao As informaes de segurana e autorizao para cada relao A estrutura de armazenamento fsico de cada relao no disco
DDL (Estruturas)
DML (Dados)
DDL - Exemplos
Criao
Create
database domain table, ...
Alterao
Drop
Excluso
Alter
domain table, ...
DDL - Criao
CREATEDB
CREATEDB BD01;
ALGUNS TIPOS DE DADOS Categoria Tipo de dado Descrio Caracter/String Text Permite armazenar nmero ilimitado de caracteres. Varchar(T) T refere-se quantidade mxima 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 mxima de caracteres a serem armazenados. Diferente de text e varchar, ocupa o espao total de armazenamento referido em T. Numricos Integer Nmero inteiro na faixa de 2 bilhes. Int2 Nmero inteiro na faixa de 32 mil. Int8 Nmero inteiro na faixa de 4 x 10 18 Numeric(P,D) Nmero real com preciso definida. Ex.: numeric(8,2) define um nmero com at 6 dgitos antes da vrgula e 2 aps a vrgula. Float Nmero de ponto flutuante, com 15 dgitos de preciso. Float4 Nmero de ponto flutuante, com 6 dgitos de preciso. 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 subtrao de 2 dados do tipo timestamp. Ex.: 5 horas e 7 dias. Lgicos Bool Dado booleano, pode ser entrado como true, t, yes, y ou 1 e tambm false, f, no, n ou 0. Mas armazena o dado como t ou f.
Restries de dados:
NOT NULL torna a entrada de valores obrigatria na coluna.
CHECK verifica em cada operao de incluso e alterao se a condio especificada para o campo est sendo cumprida.
DEFAULT especifica um valor padro a ser atribudo ao campo quando nenhuma entrada for especificada. UNIQUE no permite que valores duplicados apaream na coluna. Todos os campos designados como chave candidata (entrada no repetida), devem ser especificados como UNIQUE. PRIMARY KEY especifica uma chave primria, ou seja, identifica unicamente cada linha.
REFERENCES especifica uma chave estrangeira, ou seja, o valor do campo baseado nos valores de chave primria de outra tabela. Quando estamos declarando um campo como chave estrangeira em uma tabela, podemos especificar quais aes devem ser tomadas no caso de excluso ou alterao da chave estrangeira:
ON DELETE SET NULL Quando a tupla correspondente a FK excluda seu valor marcado como nulo. CASCADE Quando a tupla correspondente a FK excludo todas as tuplas que a tinham como FK so excludas tambm. Quando a tupla Quando a tupla correspondente a FK correspondente a FK alterada seu valor alterada todas as tuplas marcado como nulo. que a tinham como FK so alteradas tambm. SET DEFAULT Quando a tupla correspondente a FK excluda seu valor marcado com o valor default especificado. Quando a tupla correspondente a FK alterada seu valor marcado com o valor default especificado.
ON UPDATE
A opo NO ACTION o default do Postgresql, e especifica que no podem ser feitas alteraes e excluses em campos que so referenciados como chave estrangeira.
Ex. de restries
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);
O que um Domnio?
um apelido (alis) para um determinado tipo de dado
Domnios SIMPLES
CREATE DOMAIN ENDER AS VARCHAR (30)
Domnios COMPLEXOS
CREATE DOMAIN SALARIO AS NUMERIC (9,2) DEFAULT 0 CHECK (VALUE>0) CREATE DOMAIN DEPTO AS INT2 CHECK (VALUE BETWEEN 0 AND 6)
DDL - Criao
CREATE TABLE
Fornecedor
nome cnpj
CREATE TABLE CLIENTE ( Domnios NOME VARCHAR(30), ENDERECO ENDER, SALARIO SALARIO
CREATE TABLE FUNCIONARIO ( CODIGO INT, NOME VARCHAR(30), SALARIO FLOAT, PRIMARY KEY(CODIGO) );
Nome Endereo
Cliente
Fone* Codigo Data_nasc ddd nmero
CREATE TABLE CLIENTE ( CODIGO INT2, NOME VARCHAR(30), ENDERECO VARCHAR(30), DATA_NASC DATE, PRIMARY KEY (CODIGO) );
CREATE TABLE FONE ( DDD VARCHAR(10), NUMERO VARCHAR(20), CLIENTE INT2 NOT NULL, PRIMARY KEY (NUMERO,DDD,CLIENTE), FOREIGN KEY(CLIENTE)REFERENCES CLIENTE(CODIGO) );
Funcionrio
Gerencia
Deptart.
CREATE TABLE FUNCIONARIO ( CODIGOF INT2, NOMEFUN VARCHAR(30), SALARIO FLOAT, PRIMARY KEY(CODIGOF) );
CREATE TABLE DEPARTAMENTO ( CODIGOD INT2, GERENTE INT2, NOMED VARCHAR(30), PRIMARY KEY(CODIGOD), FOREIGN KEY(GERENTE)REFERENCES FUNCIONARIO(CODIGOF) );
Aluno
estuda
Curso
Aluno
RA Nome Sexo Curso
CREATE TABLE CURSO ( CODIGO INTEGER, NOMEC VARCHAR(30), PRIMARY KEY(CODIGO) );
Curso
Codigo NomeC
CREATE TABLE ALUNO ( RA INT2, NOMEALUNO VARCHAR(30), SEXO CHAR(1), CURSO INTEGER, PRIMARY KEY(RA), FOREIGN KEY(CURSO)REFERENCES CURSO(CODIGO) );
Pratica
Modalidade
Atleta
CodigoA Nome Endereo Data_nasc
Pratica
CodigoA CodigoM
Modalidade
CodigoM Nome
Atleta
CodigoA NomeAtleta Endereo Data_nasc
Pratica
CodigoA CodigoM
Modalidade
CodigoM NomeMod
CREATE TABLE ATLETA CREATE TABLE MODALIDADE ( ( CODIGOA INTEGER, CODIGOM INTEGER, NOMEATLETA VARCHAR(30), NOMEMOD VARCHAR(30), ENDERECO VARCHAR(30), PRIMARY KEY(CODIGOM) DATA_NASC DATE, ); PRIMARY KEY(CODIGOA) );
Atleta
CodigoA NomeAtleta Endereo Data_nasc
Pratica
CodigoA CodigoM
Modalidade
CodigoM NomeMod
CREATE TABLE PRATICA ( CODIGOA INTEGER, CODIGOM INTEGER, PRIMARY KEY(CODIGOA,CODIGOM), FOREIGN KEY(CODIGOA)REFERENCES ATLETA(CODIGOA), FOREIGN KEY(CODIGOM)REFERENCES MODALIDADE(CODIGOM) );
Atleta
CodigoA NomeAtleta Endereo Data_nasc
Pratica
CodAtleta CodModalidade
Modalidade
CodigoM NomeMod
CREATE TABLE PRATICA ( CODATLETA INTEGER, CODMODALIDADE INTEGER, PRIMARY KEY(CODATLETA,CODMODALIDADE), FOREIGN KEY(CODATLETA)REFERENCES ATLETA(CODIGOA), FOREIGN KEY(CODMODALIDADE)REFERENCES MODALIDADE(CODIGOM) );
Exerccios
Crie as tabelas do esquema da instituio bancria utilizando a DDL da linguagem SQL:
Agncia (cod_agencia, nome_agncia, cidade_agncia, ativo) Cliente (cod_cliente, nome_cliente, rua_cliente, cidade_cliente) Conta (cod_conta, nmero_conta, nome_agncia, saldo) Depositante (cod_depositante, nome_cliente, nmero_conta)
Agncia e Cliente
agncia (cod_agncia, nome_agncia, cidade_agncia, ativo)
CREATE TABLE agncia ( cod_agncia int2, nome_agncia char(15), cidade_agncia char(30), ativo numeric(16,2), primary key (cod_agncia) )
Conta e Depositante
conta (cod_conta, nmero_conta, nome_agncia, saldo)
CREATE TABLE conta ( cod_conta int2, nmero_conta char(10), nome_agncia char(15), saldo nuneric(12,2), primary key (cod_conta) )
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
Operadores Relacionais
= > < <= >= <>, != igual a maior que menor que maior ou igual a menor ou igual a diferente de
Crie a tabela produto de maneira que no seja possvel inserir produtos cujo peso igual ao volume Produto Codigo Descricao Peso Volume
Operadores Lgicos
AND OR NOT IN BETWEEN LIKE e ou no dentro de entre como
Crie a tabela produto de maneira que seja possvel inserir somente produtos cujo peso igual a 50, 60, 70 ou 80.
Produto Codigo Descricao Peso Volume
Crie a tabela produto de maneira que seja possvel somente inserir produtos cujo volume esteja entre 20 e 80. Produto Codigo Descricao Peso Volume
DDL - Excluso
DROP DATABASE
Apaga o banco de dados atual e todos os dados que ele contm!!! DROP DATABASE
ATENCO
DDL - Excluso
DROP DOMAIN
Apaga um domnio do banco de dados
A excluso falha se houverem atributos (colunas) usando o domnio. Portanto, deve-se alterar o domnio dos atributos (colunas) que usam o domnio ou excluir estes atributos primeiro!
DDL - Excluso
DROP DOMAIN
Apaga um domnio do banco de dados
DDL - Excluso
DROP TABLE
Apaga tabelas
Fornecedor cnpj nome
Exemplo
DROP TABLE ALUNO; DROP TABLE CURSO; DICA: Apague sempre a tabela destino antes da tabela origem
Exemplo
Atleta Cdigo Nome Endereo Data_nasc.
Exemplo
Funcionrio Codigo Nome Salario
Departamento Codigo Gerente Nome
DDL - Alterao
ALTER DOMAIN
Altera a definio de um domnio, afetando as colunas nele baseadas
ALTER DOMAIN SALARIO TO NOVO_SALARIO; ALTER DOMAIN DEPTO TO DEPTO_1 TYPE INTEGER;
DDL - Alterao
ALTER TABLE
Adiciona ou elimina colunas a uma tabela. Adiciona ou elimina restries em uma tabela
Chave Primria Chave Estrangeira Chave Candidata Check
Fornecedor
nome cnpj
descrio
Fornecedor
nome
cnpj
Exerccio
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 Cdigo seja chave primria.
Cidade
Nome Codigo
pertence
1
nome
Cidade
codigo
ALTER TABLE FORNECEDOR ADD CONSTRAINT FK_CODIGO FOREIGN KEY(CIDADE) REFERENCES CIDADE(CODIGO);
Professor
cdigo nome rg endereo
Professor
cdigo nome rg endereo
Produto
volume cdigo descrio peso
TRUNCATE TABLE
Por vezes queremos remover todos os dados de uma tabela. Uma forma de o fazer atravs do comando DROP TABLE. Mas e se apenas quisermos remover todos os dados , mas no a prpria tabela? Para tal, podemos utilizar o comando TRUNCATE TABLE. A sintaxe para TRUNCATE TABLE :
TRUNCATE TABLE "nome_tabela"