Buscar

Aula 16 120411 SQL (Parte 1)

Prévia do material em texto

Banco de Dados
Haroldo Amaral (haroldo.amaral@gmail.com)
Licenciatura em Computação – 5º Período
12/04/2011
Aula 16 – SQL (Parte 1)
Introdução
Criação de Esquemas e Tabelas
Alteração de Tabelas
Inserção, Remoção e Atualização de Valores em Tabelas
Privilégios de Acesso
12/04/2011
Banco de Dados
2
Introdução
12/04/2011
Banco de Dados
3
Introdução
12/04/2011
Banco de Dados
4
Primeira versão:
SEQUEL, definida por Chamberlain, em 1974, na IBM
Revisada e ampliada entre 1976 e 1977, tendo seu nome alterado para SQL
Linguagem padrão para SGBDs Relacionais
Em 1986, o American National Standard Institute (ANSI) e a International Standard Organization (ISO) definiram uma versão padrão da SQL (SQL-86 ou SQL1)
Em 1992, o padrão foi revisado e bastante modificado, gerando o SQL-92 (ou SQL2)
Em 1999, desenvolvido o padrão SQL:1999, que começou como SQL3
Posteriormente, SQL :2003, SQL:2006 (recursos XML) e SQL:2008 (recursos de BD de objeto)
Introdução
12/04/2011
Banco de Dados
5
Fundamentada no modelo relacional (álgebra relacional e cálculo relacional de tupla), incluindo comandos para:
Definição de dados
Consulta a dados
Atualização de dados
DDL e DML
Introdução
12/04/2011
Banco de Dados
6
Além disso, ela possui facilidades para:
Definir visões sobre o banco de dados
Especificar segurança e autorização
Definir restrições de integridade
Especificar controles de transação
Ela, também, possui regras para embutir instruções SQL em linguagens de programação (Java, COBOL, C/C++, etc.)
Utilizada tanto de forma interativa como incluída em linguagens hospedeiras
Introdução
12/04/2011
Banco de Dados
7
Introdução
12/04/2011
Banco de Dados
8
Os padrões mais recentes (a partir do SQL:1999) são divididos em duas partes:
Uma especificação núcleo
Extensões especializadas
O núcleo é implementado por todos os fornecedores de SGBDR compatíveis
As extensões são implementadas como módulos opcionais adquiridos para aplicações de BD específicas
Mineração de dados, dados espaciais, dados temporais, data warehousing, processamento analítico on-line (OLAP), dados multimídia, etc.
Introdução
Enfoques da Linguagem
12/04/2011
Banco de Dados
9
Introdução
Enfoques da Linguagem
12/04/2011
Banco de Dados
10
Introdução
Vantagens
Desvantagens
12/04/2011
Banco de Dados
11
Independência de fabricante
Portabilidade entre sistemas
Redução de custos com treinamento
Comandos em inglês
Consulta interativa
Múltiplas visões de dados
Manipulação dinâmica dos dados
A padronização inibe a criatividade
Está longe de ser uma linguagem relacional ideal
Falta de ortogonalidade nas expressões
Discordância com as linguagens hospedeiras
Não dá suporte a alguns aspectos do modelo relacional
Comandos
12/04/2011
Banco de Dados
12
Criação de esquemas
Criação, alteração e destruição de tabelas
Inserção, modificação e remoção de dados
Extração de dados de uma tabela – consultas
Definição de visões
Definição de privilégios de acesso
12/04/2011
Banco de Dados
13
Exemplo Ilustrativo
12/04/2011
Banco de Dados
14
Pnome
Minicial
Unome
Cpf
Datanasc
Endereco
Sexo
Salario
Cpf_superv
Dnr
EMPREGADO
Dnome
Dnumero
Cpf_gerente
Data_inicio_gerente
DEPARTAMENTO
Dnumero
Dlocal
LOCALIZACOES_DEP
Projnome
Projnumero
Projlocal
Dnum
PROJETO
Fcpf
Pnr
Horas
TRABALHA_EM
Fcpf
Nome_dependente
Sexo
Datanasc
Parentesco
DEPENDENTE
CHAVES ESTRANGEIRAS?
12/04/2011
Banco de Dados
15
Criação de Esquemas e Tabelas
O Comando CREATE SCHEMA
12/04/2011
Banco de Dados
16
Um esquema SQL é identificado por um nome de esquema, incluindo um identificador de autorização para indicar o proprietário (usuário ou conta), bem como descrições para cada elemento (tabelas, restrições, views, domínios e outras construções)
A instrução CREATE SCHEMA é usada, de forma geral:
Exemplo:
	CREATE SCHEMA EMPRESA AUTHORIZATION ‘Jose’;
Os elementos do esquema podem ser definidos depois
CREATE SCHEMA <nome do esquema>
	AUTHORIZATION <nome usuario/conta>;
Catálogo de um Esquema
12/04/2011
Banco de Dados
17
Além do conceito de esquema, SQL usa o conceito de catálogo
Coleção nomeada de esquemas
Contém um esquema especial, chamado INFORMATION_SCHEMA, que fornece informações sobre todos os esquemas no catálogo e todos os descritores de seus elementos
As restrições de integridade podem ser definidas entre as relações somente se existirem nos esquemas do mesmo catálogo
Os esquemas dentro do mesmo catálogo também podem compartilhar elementos, como definições de domínio
O Comando CREATE TABLE
12/04/2011
Banco de Dados
18
O comando CREATE TABLE é usado para criação de tabelas, dando-lhe um nome e especificando seus atributos e restrições (de chave, de integridade de entidade, de integridade referencial, etc.)
Forma geral:
Onde a descrição dos atributos  <nome> <tipo>
Exemplo:
	CREATE TABLE FUNCIONARIO ...
CREATE TABLE <nome da tabela>
	(<descrição dos atributos>
	 <descrição das chaves>
	 <descrição das restrições>);
Tipos de Dados de Atributos e Domínios
12/04/2011
Banco de Dados
19
Numéricos
Inteiros de vários tamanhos
INT (ou INTEGER) e SMALLINT
Reais (ponto flutuante) de várias precisões
FLOAT (ou REAL) e DOUBLE PRECISION
O formato dos números pode ser declarado usando DECIMAL(i, j) ou DEC(i, j) ou NUMERIC(i, j)
i é a precisão  número total de dígitos decimais
j é a escala  número de dígitos depois do ponto decimal
O valor padrão para a escala é zero e o valor da precisão é definido pela implementação
Tipos de Dados de Atributos e Domínios
12/04/2011
Banco de Dados
20
Cadeias de caracteres
De tamanho fixo
CHAR(n) ou CHARACTER(n), onde n é o número de caracteres
Para cadeias de tamanho fixo, uma cadeia mais curta é preenchida com caracteres em branco à direita
Espaços preenchidos são ignorados quando cadeias são comparadas
Para fins de comparação, as cadeias são consideradas ordenadas em ordem alfabética. Assim se uma cadeia str1 aparecer antes de outra cadeia str2, então str1 é considerada menor que str2
De tamanho variável
VARCHAR(n) ou CHAR VARYING(n) ou CHARACTER VARYING(n), onde n é o número máximo de caracteres
Literais são delimitados por aspas simples e são case sensitive
Concatenação de cadeias  operador ||
Tipos de Dados de Atributos e Domínios
12/04/2011
Banco de Dados
21
Cadeias de caracteres
Outro tipo de dado de tamanho variável (CHARACTER LARGE OBJECT ou CLOB) está disponível para especificar colunas que possuem grandes valores de texto,como documentos
O tamanho máximo de CLOB pode ser especificado em kilobytes (K), megabytes (M) ou gigabytes (G)
Por exemplo:
CLOB(20M) especifica um tamanho máximo de 20 megabytes
Tipos de Dados de Atributos e Domínios
12/04/2011
Banco de Dados
22
Cadeias de bits (Bit-string)
De tamanho fixo n
BIT(n)
De tamanho variável
BIT VARYING(n), onde n é o número máximo de bits
O valor padrão para n é 1
Literais são delimitados por aspas simples, porém precedidos por B para distingui-los de cadeias de caracteres
B’10101’
Outro tipo de dados de tamanho variável (BINARY LARGE OBJECT ou BLOB) está disponível para especificar colunas que possuem grandes valores binários, como imagens
O tamanho máximo de BLOB pode ser especificado em kilobits (K), megabits (M) ou gigabits (G)
Por exemplo:
BLOB(30G) especifica um tamanho máximo de 30 gigabits
Tipos de Dados de Atributos e Domínios
12/04/2011
Banco de Dados
23
Booleano
Possui os valores TRUE e FALSE
Como SQL permite valores null, um terceiro valor booleano foi definido - UNKNOWN
Tipos de Dados de Atributos e Domínios
12/04/2011
Banco de Dados
24
Datas e Horários
DATE (data) contém dez posições e seus componentes são YEAR (ano), MONTH (mês) e DAY (dia), no formato YYYY-MM-DD
TIME tem, no mínimo, oito posições com os componentes HOUR (hora), MINUTE (minuto) e SECOND (segundo), no formato HH:MM:SS
A comparação < pode ser usada com datas e horários
Literais são representados porcadeias entre aspas simples precedidas das palavras DATE ou TIME 
Por exemplo: 
DATE ‘2008-09-27’, TIME ‘09:12:47’
Tipos de Dados de Atributos e Domínios
12/04/2011
Banco de Dados
25
Datas e Horários
Um tipo TIME(i), onde i é chamado de precisão em segundos fracionários de tempo, especifica i + 1 posições adicionais para TIME
Uma posição para um caractere separador de período adicional (.), e i posições para especificar as frações de um segundo
Por exemplo:
12:00:30.57
Um tipo TIME WITH TIME ZONE inclui seis posições adicionais para especificar o deslocamento com base no fuso horário universal padrão, que está na faixa de +13:00 a -12:59, em unidades de HOURS:MINUTES
Caso WITH TIME ZONE não for incluído, o valor padrão é o fuso horário local para a sessão SQL
Tipos de Dados de Atributos e Domínios
12/04/2011
Banco de Dados
26
Datas e Horários
Um tipo de dado TIMESTAMP inclui os campos DATE e TIME, mais um mínimo de seis posições para frações decimais de segundos e um qualificador opcional WITH TIME ZONE
Valores literais são representados por cadeias entre aspas simples precedidos pela palavra-chave TIMESTAMP, com um espaço em branco entre data e hora
Por exemplo:
TIMESTAMP ‘2011-05-12 10:50:00.123’
Outro tipo relacionado a DATE, TIME e TIMESTAMP é o INTERVAL, que especifica um intervalo (um valor relativo) que pode ser usado para incrementar (ou decrementar) um valor absoluto de uma data, hora ou timestamp
Tipos de Dados de Atributos e Domínios
12/04/2011
Banco de Dados
27
É possível declarar um domínio e o seu nome ser usado na especificação de um atributo
Por exemplo, para criar um domínio TIPO_CPF, usa-se o seguinte comando:
CREATE DOMAIN TIPO_CPF AS CHAR(11);
CREATE DOMAIN <nome dominio> AS <tipo domínio>;
Restrições de Atributos
12/04/2011
Banco de Dados
28
Permitir valores nulos e não nulos
Como SQL permite que atributos possuam valores nulos (NULL), uma restrição NOT NULL pode ser especificada, caso o valor NULL não seja permitido para determinado atributo
Por exemplo:
Nome VARCHAR(15) NOT NULL
Também é possível definir um valor default para um atributo, através da cláusula DEFAULT <valor>
Caso nenhum valor default seja atribuído a atributos que são NOT NULL, seu valor será NULL
Por exemplo:
Cpf_gerente CHAR(11) NOT NULL DEFAULT ‘12345678900’
Restrições de Atributos
12/04/2011
Banco de Dados
29
Através da cláusula CHECK, após uma definição de atributo ou domínio, é possível limitar os seus valores
Por exemplo, para não permitir que o salário seja inferior ao valor mínimo:
Salario INT NOT NULL CHECK (Salario >= 450)
Por exemplo, para permitir que o número de departamento seja definido no intervalo de 1 até 21:
CREATE DOMAIN D_NUM AS INTEGER
	CHECK (D_NUM > 0 AND D_NUM < 21)
Restrições de Chaves Primárias
12/04/2011
Banco de Dados
30
Através da cláusula PRIMARY KEY, especificamos os atributos que compõem a chave primária de uma tabela
Por exemplo:
PRIMARY KEY (Dnumero, Dlocal)para a tabela LOCALIZACAO_DEP
Caso a chave primária possua um único atributo, podemos usar a cláusula PRIMARY KEY diretamente na definição do atributo
Por exemplo:
Para a tabela DEPARTAMENTO, Dnumero INT PRIMARY KEY
A cláusula UNIQUE especifica chaves alternativas, da mesma forma como especificamos chaves primárias
Por exemplo:
Na tabela DEPARTAMENTO, UNIQUE (Dnome), para indicar que esse atributo é uma chave alternativa
PRIMARY KEY <atributos>;
Restrições de Integridade Referencial
12/04/2011
Banco de Dados
31
Através da cláusula FOREIGN KEY, especificamos chaves estrangeiras
Por exemplo:
FOREIGN KEY (Cpf_gerente) REFERENCES FUNCIONARIO(Cpf), para definir a chave estrangeira da tabela DEPARTAMENTO, Cpf_gerente, que referencia a chave primária Cpf da tabela FUNCIONARIO, indicando o gerente de um departamento
FOREIGN KEY <atributos> REFERENCES 
	<tabela referenciada(atributos)>;
Restrições de Integridade Referencial
12/04/2011
Banco de Dados
32
Entretanto, como vimos, uma restrição de integridade referencial pode ser violada quando:
Tuplas são inseridas ou excluídas ou
Um valor de atributo da chave estrangeira ou primária é modificado
A ação default da SQL é rejeitar a operação de atualização
Porém, o projetista do banco de dados pode especificar uma ação alternativa, conectando uma cláusula de ação a qualquer restrição de chave estrangeira através das opções:
SET NULL, CASCADE e SET DEFAULT qualificadas com ON DELETE ou ON UPDATE
Restrições de Integridade Referencial
12/04/2011
Banco de Dados
33
Por exemplo, na tabela FUNCIONARIO:
	FOREIGN KEY (Cpf_supervisor) REFERENCES FUNCIONARIO(Cpf) ON DELETE SET NULL ON UPDATE CASCADE
Significa que, se a tupla para um funcionário supervisor for excluída, o valor de Cpf_supervisor será automaticamente definido como NULL para todas as tuplas de funcionário que estavam referenciando a tupla do funcionário excluído
Por outro lado, se o valor de Cpf, para um funcionário supervisor, for atualizado, o novo valor será propagado em cascata de Cpf_supervisor para todas as tuplas de funcionário que referencia a tupla de funcionário atualizada
12/04/2011
Banco de Dados
34
Exemplo Ilustrativo
(Esquema 1)
12/04/2011
Banco de Dados
35
12/04/2011
Banco de Dados
36
Nomeação de Restrições
12/04/2011
Banco de Dados
37
As restrições vistas até agora podem ser nomeadas, através da palavra-chave CONSTRAINT
Os nomes de todas as restrições, dentro de um esquema, precisam ser únicos (exclusivos)
Com isso, um nome de restrição é usado para identificar uma restrição caso ela deva ser removida, posteriormente, e substituída por outra
Nomear restrições é opcional
12/04/2011
Banco de Dados
38
Exemplo Ilustrativo
(Esquema 2)
12/04/2011
Banco de Dados
39
12/04/2011
Banco de Dados
40
Alteração de Tabelas
Alteração de Tabelas
12/04/2011
Banco de Dados
41
A SQL possui comandos de evolução de esquema que podem ser usados para alterar um esquema, acrescentando ou removendo tabelas, atributos, restrições e outros elementos
DROP e ALTER
O Comando DROP
12/04/2011
Banco de Dados
42
O comando DROP é usado para remover elementos (tabelas, restrições, domínios) do esquema, inclusive o próprio esquema
Possui duas variações:
CASCADE e RESTRICT
O Comando DROP
12/04/2011
Banco de Dados
43
O comando DROP (continuação)
Para remover o esquema:
DROP SCHEMA <nome esquema> CASCADE / RESTRICT
CASCADE  remove tudo (tabelas, domínios e outro elementos)
RESTRICT  remove apenas se o esquema não tiver elementos
Para remover tabelas:
DROP TABLE <nome tabela> CASCADE / RESTRICT
CASCADE  além da própria tabela, remove todas as restrições , views e outros elementos que referenciam a tabela sendo removida
RESTRICT  remove apenas se a tabela não for referenciada em quaisquer restrições
O comando DROP remove também a definição da tabela do catálogo.
Para remover apenas os registros, o comando DELETE deve ser usado (veremos em breve!)
O Comando ALTER
12/04/2011
Banco de Dados
44
O comando ALTER é usado para alterar a definição de tabelas do esquema, permitindo inserção, remoção e modificação de seus elementos
Por exemplo, para incluir atributo que indique a tarefa de um funcionário:
ALTER TABLE FUNCIONARIO ADD COLUMN Tarefa VARCHAR(12);
Podemos, também, incluir uma cláusula DEFAULT para definirmos um valor padrão para o atributo
ALTER TABLE <nome tabela> <ação>;
O Comando ALTER
12/04/2011
Banco de Dados
45
O comando ALTER (continuação)
Assim como no comando DROP, a remoção possui duas variações, CASCADE e RESTRICT
Por exemplo:
ALTER TABLE FUNCIONARIO DROP COLUMN Endereco CASCADE
Todas as restrições e views que referenciam a coluna são removidas automaticamente do esquema, junto com a coluna
O Comando ALTER
12/04/2011
Banco de Dados
46
O comando ALTER (continuação)
Podemos alterar uma definição de coluna, removendo uma cláusula DEFAULT existente ou definindo uma nova
Por exemplo:
ALTER TABLE DEPARTAMENTO ALTER COLUMN Cpf_gerenteDROP DEFAULT;
ALTER TABLE DEPARTAMENTO ALTER COLUMN Cpf_gerente SET DEFAULT ‘33344455566’;
Podemos alterar as restrições especificadas de uma tabela, acrescentando ou removendo uma restrição nomeada
Por exemplo:
ALTER TABLE FUNCIONARIO DROP CONSTRAINT CHESUPERFUNC CASCADE;
12/04/2011
Banco de Dados
47
Inserção, Remoção e Atualização de Valores em Tabelas
O Comando INSERT
12/04/2011
Banco de Dados
48
O comando INSERT é usado para acrescentar os valores de uma nova tupla em uma tabela, na mesma ordem em que os atributos foram definidos com o comando CREATE TABLE
Por exemplo, para inserir uma tupla na tabela FUNCIONARIO:
INSERT INTO FUNCIONARIO VALUES (‘Ricardo’, ‘K’, ‘Marini’, ‘65329865388’, ‘30-12-1960’, Rua Itapira, 44, Santos, SP’, ‘M’, 37.000, ‘65329865388’);
INSERT INTO <nome tabela> VALUES <valores atributos>;
O Comando INSERT
12/04/2011
Banco de Dados
49
O comando INSERT também permite que o usuário especifique apenas os nomes de atributos cujos os novos valores serão fornecidos
Por exemplo, para inserir uma tupla para um novo funcionário do qual se conhece apenas os atributos Pnome, Unome, Dnr e Cpf:
INSERT INTO FUNCIONARIO(Pnome, Unome, Dnr, Cpf) VALUES (‘Ricardo’, ‘Marini’, 4, ‘65329865388’);
Os demais atributos não especificados serão definidos com o seu valor default ou NULL
Um SGBD que implementa totalmente a SQL deve aceitar ou impor todas as restrições de integridade
O Comando DELETE
12/04/2011
Banco de Dados
50
O comando DELETE remove tuplas de uma tabela
Para tal, uma cláusula WHERE é incluída a fim de selecionar as tuplas a serem excluídas
Quando o comando é executado, as tuplas são explicitamente excluídas de apenas uma tabela por vez
Para que a exclusão se propague para tuplas de outras relações, ações de disparo referencial devem ser especificadas
DELETE FROM <nome tabela> WHERE <condição>;
O Comando DELETE
12/04/2011
Banco de Dados
51
Exemplos de remoção de tuplas com o comando DELETE:
DELETE FROM FUNCIONARIO WHERE Unome = ‘Braga’;
DELETE FROM FUNCIONARIO WHERE Cpf = ‘12345678966’;
DELETE FROM FUNCIONARIO WHERE Dnr = 5;
O comando DELETE sem a cláusula WHERE especifica que todas as tuplas deverão ser removidas
Equivalente ao comando DROP, exceto que a tabela permanece no banco de dados
Por exemplo:
DELETE FROM FUNCIONARIO;
O Comando UPDATE
12/04/2011
Banco de Dados
52
O comando UPDATE é usado para modificar valores de atributo de uma ou mais tuplas selecionadas de uma tabela
Assim como no comando DELETE, uma cláusula WHERE seleciona as tuplas a serem modificadas
Uma cláusula SET adicional especifica os atributos a serem modificados, bem como os seus novos valores
As atualizações de valores de atributos podem ser propagadas para outras tuplas de outras tabelas, caso ações de disparo referencial tenham sido especificadas
UPDATE <nome tabela> SET <atributo = valor> WHERE <condição>;
O Comando UPDATE
12/04/2011
Banco de Dados
53
Exemplos:
Para alterar o local e número de departamento que controla o número de projeto 10 para os novos valores ‘Santo André’ e 5:
UPDATE PROJETO SET Projlocal = ‘Santo André’, Dnum = 5 WHERE Projnumero = 10;
Para dar a todos os funcionários no departamento ‘Pesquisa’ um aumento de 10% no salário
UPDATE FUNCIONARIO SET Salario = Salario *1,1 WHERE Dnr = 5;
12/04/2011
Banco de Dados
54
Privilégios de Acesso
O Comando GRANT
12/04/2011
Banco de Dados
55
Para garantir privilégios de acesso, o comando GRANT pode ser usado da seguinte forma:
Onde:
<privilégios>: SELECT, INSERT, DELETE, UPDATE, ALL PRIVILEGES
<usuário>: usuário cadastrado ou PUBLIC
Exemplo:
Conceder a permissão de consulta sobre a tabela FUNCIONARIO ao usuário ‘acs’
	GRANT SELECT ON FUNCIONARIO TO ‘acs’;
GRANT <privilégios> ON <tabela/view>
TO <usuário>;
O Comando REVOKE
12/04/2011
Banco de Dados
56
Para remover privilégios de acesso, o comando REVOKE pode ser usado da seguinte forma:
Onde:
<privilégios>: SELECT, INSERT, DELETE, UPDATE, ALL PRIVILEGES
<usuário>: usuário cadastrado ou PUBLIC
Exemplo:
Remover a permissão de consulta dada aos demais usuários da tabela Projeto
	REVOKE SELECT ON PROJETO TO PUBLIC;
REVOKE <privilégios> ON <tabela/view>
FROM <usuário>;
Referências Usadas
12/04/2011
Banco de Dados
57

Continue navegando