Design e Desenvolvimento de
Banco de Dados I
SQL - Structured Query Language
Prof. Me Renato Sousa Botacim
Email: [Link]@[Link]
2
Structured Query Language
• O SQL padrão sofreu várias alterações ao longo do tempo:
• 1986 (SQL-86 e SQL-87) Publicado pela ANSI e ratificado pela ISO.
• 1989 (SQL-89) 1992 (SQL-92) Também conhecido como SQL2.
• 1999 (SQL:1999) Também conhecido como SQL 3. Inclui expressões regulares, queries
recursivas, gatilhos, tipos não escalares e algumas funcionalidades orientadas a objetos.
• 2003 (SQL:2003) Inclui suporte a XML e colunas com numeração automática.
Base álgebra relacional e cálculo relacional
3
Divisões da SQL
• DDL – Linguagem de Definição de Dados(Data Definition Language)
• DML – Linguagem de Manipulação de Dados
• DCL – Linguagem de Controle de Dados (autorização de dados e licença de
usuários para controlar quem tem acesso aos dados).
• DTL - Linguagem de Transação de Dados.
• DQL – Linguagem de Consulta de Dados (Tem apenas um comando: SELECT).
4
Principais funcionalidades
definição (DDL) e manipulação (DML) de dados
definição de visões e autorizações de acesso
definição de restrições de integridade
definição de transações
comandos para embutir em Linguagens de Programação
5
SQL - DDL
• DDL é o conjunto de comandos SQL responsáveis pela definição dos dados,
ou seja, pela criação de bancos, esquemas, tabelas, campos, tipos de dados,
constraints, etc.
• A SQL/DDL (Data Definition Language) permite ao usuário definir tabelas e
elementos associados.
• A SQL/DDL se caracteriza por poucos comandos básicos, embora
implementações comerciais tenham várias extensões
6
DDL
Comando CREATE cria um objeto (uma Tabela, por exemplo) dentro da base de
dados.
Comando ALTER altera um objeto do banco de dados.
Comando DROP apaga um objeto do banco de dados. Exemplos:
• ALTER TABLE
• CREATE INDEX
• ALTER INDEX
• DROP INDEX
• CREATE VIEW
• DROP VIEW
7
create table:
define a estrutura da tabela, suas restrições de integridade e cria uma tabela vazia
alter table:
• modifica a definição de uma tabela
• Inclusão, Exclusão e Alteração de atributos;
• Inclusão e Exclusão de Relações de Integridade.
Relações de Integridade Básicas:
• atributos chave não podem ser removidos
• atributos NOT NULL não podem ser inseridos
8
Os tipos de dados mais utilizados são:
• char(n) ou character(n) - Cadeia de caracteres de tamanho fixo n
• varchar(n) ou character varying(n) - Cadeia de caracteres com tamanho
máximo n
• text - Cadeia de caracteres sem tamanho definido
• int ou integer - Números inteiros (4 bytes)
• numeric(precisão, escala) - Números reais sem limite de tamanho
• date e time - Data e hora
• datetime - Data + hora no mesmo campo
• boolean - Valores booleanos
9
Restrições
Em SQL podem ser definidas restrições de integridade de vários tipos:
CHECK
NOT-NULL
UNIQUE
CHAVE PRIMÁRIA
CHAVE ESTRANGEIRA
10
Check
Devemos sempre dar nomes às restrições para que seja mais fácil identificar a
razão pela qual a inserção de dados falha:
Poderia ser assim:
salario numeric(9,2) CHECK (salario > 0)
Mas deve ser assim: salario numeric(9,2)
CONSTRAINT salario_positivo CHECK (salario > 0)
11
No caso da restrição
abranger mais de uma
coluna temos de usar uma
restrição de tabela (após as
definições das colunas):
12
NOT-NULL
Para garantir que uma coluna não vai ter valores nulos podemos usar uma restrição
do tipo NOT NULL
13
CHAVE PRIMÁRIA
Podemos definir uma, e só uma,
chave primária para a tabela.
Uma chave primária não pode
conter valores nulos nem pode
ter valores repetidos
Exemplo:
14
CHAVE PRIMÁRIA
Uma chave primária pode
ser composta por mais de
uma coluna (campo).
Nesse caso temos de
usar obrigatoriamente
uma restrição de tabela.
15
UNIQUE
Chaves candidatas alternativas podem ser definidas usando restrições do tipo
UNIQUE.
Estas restrições são equivalentes às restrições de chave primária mas não obrigam
os valores a ser não nulos
16
Unique
17
No caso da restrição UNIQUE for com mais de uma coluna (campo), obrigatório o
uso da restrição de tabela.
Lembrar que a restrição UNIQUE cria um índice que terá um custo de manutenção
para o SGBD.
18
Chaves Estrangeiras
Uma restrição do tipo FOREIGN KEY permite
declarar chaves estrangeiras.
Uma chave estrangeira deve sempre referenciar
uma chave primária ou única
Chaves Estrangeiras
Chaves Estrangeiras
Podemos definir o que acontece quando uma
chave estrangeira é violada durante uma operação
de remoção ou alteração
Chaves Estrangeiras
No exemplo, quando for apagado um
departamento e caso exista(m) empregado(s)
associados ao departamento que está sendo
apagado, todos estes empregados também
serão apagados.
CUIDADO
Chaves Estrangeiras
As alternativas para os valores de ON DELETE e ON
UPDATE são:
• RESTRICT - Não deixa efetuar a operação
• CASCADE - Apaga os registros associados (delete)
ou altera a chave estrangeira (update).
• SET NULL - A chave estrangeira passa a NULL
• SET DEFAULT - A chave estrangeira passa a ter o
valor padrão
Se não for definido o funcionamento default é a
restrição do tipo RESTRICT
Valor Default
Você pode definir um valor padrão que será
colocado sempre quando houver uma inclusão na
tabela e o valor da coluna não for especificado;
CREATE TABLE
CREATE TABLE
Cria uma tabela vazia
DROP TABLE
DROP TABLE
remove uma tabela com todos os seus registros
não remove tabelas referenciadas por outras tabelas
sintaxe: DROP TABLE <nome_tabela>;
Exemplo: DROP TABLE empregado
UPDATE TABLE
Depois de criada, uma tabela pode ser modificada.
ALTER TABLE medico ADD COLUMN telefone char(10) NULL;
ALTER TABLE medico ADD COLUMN cpf char(11) NULL;
ALTER TABLE medico DROP COLUMN telefone;
ALTER TABLE medico DROP COLUMN rg_medico;
ALTER TABLE medico ADD COLUMN rg_medico char(10)
NULL;
ALTER TABLE medico ADD CONSTRAINT ck_medico_idade
CHECK (idade_medico > 0);
ALTER TABLE medico ADD CONSTRAINT un_medico_cpf UNIQUE (cpf); ALTER
TABLE medico ADD CONSTRAINT fk_medico_ambulatorio FOREIGN KEY
(cod_ambulatorio) REFERENCES ambulatorio(cod_ambulatorio);
ALTER TABLE medico ALTER COLUMN especialidade SET NOT NULL;
ALTER TABLE medico DROP CONSTRAINT un_medico_cpf;
ALTER TABLE medico ALTER COLUMN especialidade DROP NOT NULL;
ALTER TABLE medico ALTER COLUMN rg_medico SET DEFAULT 'SEM RG';
ALTER TABLE medico ALTER COLUMN rg_medico DROP DEFAULT;
ALTER TABLE medico RENAME COLUMN cpf TO cpf_medico;
ALTER TABLE medico RENAME TO medicos;
ALTER TABLE ambulatorio
ADD COLUMN nome_ambulatorio VARCHAR(30) NULL;
ALTER TABLE medicos
DROP CONSTRAINT pk_medico;
ALTER TABLE ambulatorio
DROP COLUMN nome_ambulatorio;
Domains
Os domains são tipos de dados definidos pelo
utilizador de forma a padronizar e evitar repetições.
Um DOMAIN pode conter um valor default,
restrições do tipo NOT NULL e CHECK.
Índices
Os índices são utilizados, principalmente, para melhorar o
desempenho do banco de dados (embora a utilização não
apropriada possa resultar em uma degradação de desempenho);
Definidos sobre atributos para acelerar o acesso físico a dados;
São definidos automaticamente índices para atributos chave
pri(pk, unique);
Para criar um índice
• CREATE [UNIQUE] INDEX nome_índice ON
nome_tabela (nome_atributo_1[{,
nome_atributo_n }]);
Para apagar um índice
• DROP INDEX nome_índice;