2. Introdução
• SQL (Structured Query Language) é um padrão de
linguagem de consulta comercial.
• SQL usa uma combinação de construtores em
álgebra relacional e cálculo relacional.
• Embora o próprio nome se refira a SQL como uma
linguagem de consulta, ela possui outros recursos.
3. Introdução
• Modelo relacional encontra-se padronizado pela
indústria de informática. Ele é chamado de padrão
SQL.
• O padrão SQL define precisamente uma interface
SQL para a definição de:
• Tabelas
• Operações sobre tabelas (seleção, junção e outras); e
• Definição de regras de integridade de bancos de dados.
4. Introdução
• A SQL é implementada em praticamente todos os
sistemas de bancos de dados relacionais existentes.
• Fabricantes de diferentes SGBDs apresentam
variações de SQL.
• Ex.: PL/SQL
• A existência de padrões facilita a
interoperabilidade.
5. Histórico
• A IBM desenvolveu a versão original da SQL,
originalmente chamada Sequel, no início da década
de 1970.
• Parte do projeto System R.
• Com a evolução da linguagem, está passou a ser
chamada de SQL (Structured Query Language).
• A SQL se estabeleceu como linguagem padrão de
banco de dados relacional.
6. Histórico
• Em 1986 o ANSI e a ISO publicaram um padrão SQL
o SQL-86. Apos este, alguns outros surgiram:
• SQL-89
• SQL-92
• SQL:1999
• SQL:2003
7. Partes da SQL
• A SQL possui várias partes:
• Linguagem de definição de dados (DDL)
• Linguagem de manipulação de dados (DML)
• Integridade (DDL)
• Definições de visões (DDL)
• Controle de transações (DDL) - Especificar o início e o
fim de transações.
• SQL embutida e SQL dinâmica - Definem como as
instruções SQL podem ser incorporadas dentro das
linguagens de programação de finalidade geral (C, C++,
Java).
• Autorização (DDL)
8. Tipos de Domínios Básicos
• char(n) - string de caracteres de tamanho fixo n.
• varchar(n) - string de caracteres de tamanho variável, com
tamanho n máximo.
• int - subconjunto finito de inteiros que é dependente da
máquina.
• smallint - inteiro pequeno (dependente da máquina).
• numeric(p,d) - número de ponto fixo com precisão
especificada.
• Ex.: numeric(3,1) aceita o valor 33,1, mas não aceita 333,1.
• real, double precision - números de ponto flutuante.
• float(n) - número de ponto flutuante, com precisão de pelo
menos n dígitos.
9. Comandos SQL
• Os comandos SQL para definição de dados são:
• CREATE
• DROP
• ALTER
10. O comando CREATE
• O comando CREATE pode ser utilizado para criação
de:
• Tabelas (relações)
• Domínios próprios
• View
• Entre outros.
11. O Comando CREATE
• Para criação de tabelas (relações):
• CREATE TABLE : especifica uma nova relação (tabela). Cada
relação possui um nome e um conjunto de atributos
(colunas), bem como o tipo deste e possíveis restrições.
• Sintaxe:
CREATE TABLE nome (A1 D1, A2 D2, ..., An Dn,
<regra de integridade1>,
...,
<regra de integridadeK> )
• Onde nome é o nome da relação, Ai é um nome de atributo e
Di é o domínio do atributo Ai.
12. O Comando CREATE
• As definições dos atributos têm o seguinte formato:
• Atributo Tipo [NOT NULL [UNIQUE]] [DEFAULT valor]
[AUTO_INCREMENT]
• Onde:
• Atributo: nome do atributo que está sendo definido.
• Tipo: domínio do atributo.
• NOT NULL: expressa que o atributo não pode receber valores
nulos.
• UNIQUE: indica que o atributo tem valor único na tabela.
• DEFAULT valor: indica um valor a ser atribuído ao atributo
caso não seja determinado um valor na inserção.
• AUTO_INCREMENT : utilizado para automatizar um código,
geralmente a chave primária.
13. O Comando CREATE
• Existem diversas restrições de integridade
permitidas, entre elas:
• Integridade de chave:
• PRIMARY KEY (atributos chave)
• Integridade referencial:
• FOREIGN KEY (atributos) REFERENCES tabela_base(atributos)
• Integridade de domínio:
• CHECK (condição)
14. Integridade de Chave
• Definida com a cláusula PRIMARY KEY.
• Não são permitidos valores duplicados em uma
chave primária, ou seja, a chave primária é única.
• Geralmente, não é possível alterar chaves
primárias.
15. Integridade de Chave
• Exemplo da construção de uma relação utilizando
chave primária.
CREATE TABLE empregado
(matricula INT AUTO_INCREMENT,
nome VARCHAR(40) NOT NULL,
sexo CHAR,
salario NUMERIC(10,2),
depto INT NOT NULL,
PRIMARY KEY (matricula));
16. Integridade Referencial
• Definida com a cláusula FOREIGN KEY
• Não é possível definir chaves estrangeiras sem
chaves primárias (exclusivas) existentes.
• Uma chave estrangeira deve corresponder a um
valor de chave primária existente
17. Integridade Referencial
• Exemplo da construção de uma relação utilizando
chave estrangeira.
CREATE TABLE empregado
(matricula INT AUTO_INCREMENT,
...
FOREIGN KEY (depto)
REFERENCES
departamento(codDep));
18. Integridade Referencial
• A cláusula FOREIGN KEY inclui regras de
remoção/atualização:
• FOREIGN KEY (nome_coluna) REFERENCES nome_tabela
[ON DELETE {RESTRICT|CASCADE|SET NULL| SET
DEFAULT}]
[ON UPDATE {RESTRICT|CASCADE|SET NULL| SET
DEFAULT}]
• Supondo que T2 tem uma chave estrangeira para
T1, vejamos as cláusulas ON DELETE e ON UPDATE
19. Integridade Referencial
• ON DELETE:
• RESTRICT: (default) significa que uma tentativa de se
remover uma linha de T1 falhará se alguma linha em T2
combina com a chave.
• CASCADE: remoção de uma linha de T1 implica em
remoção de todas as linhas de T2 que combina com a
chave de T1.
• SET NULL: remoção de T1 implica em colocar NULL em
todos os atributos da chave estrangeira de cada linha de
T2 que combina.
• SET DEFAULT: remoção de linha em T1 implica em
colocar valores DEFAULT nos atributos da chave
estrangeira de cada linha de T2 que combina.
20. Integridade Referencial
• ON UPDATE
• RESTRICT: (default) update de um atributo de T1 falha se
existem linhas em T2 combinando.
• CASCADE: update de atributo em T1 implica que linhas
que combinam em T2 também serão atualizadas.
• SET NULL: update de T1 implica que valores da chave
estrangeira em T2 nas linhas que combinam são postos
para NULL.
• SET DEFAULT: update de T1 implica que valores da chave
estrangeira de T2 nas linhas que combinam terão
valores default aplicados.
21. Integridade Referencial
• Exemplo da construção de uma relação utilizando
chave estrangeira.
CREATE TABLE empregado
(matricula INT AUTO_INCREMENT,
...
FOREIGN KEY (depto)
REFERENCES
departamento(codDep) ON
UPDATE CASCADE);
22. A Cláusula CHECK
• Define uma condição que cada linha deve
satisfazer.
• Uma única coluna pode ter várias restrições CHECK
que fazem referência à coluna na sua definição.
• As restrições CHECK podem ser definidas no nível
da coluna ou da tabela.
23. A Cláusula CHECK
• Exemplo da construção de uma relação utilizando a
cláusula CHECK.
CREATE TABLE estudante (
nome char(15) NOT NULL,
id_estudante char(10) NOT NULL,
nivel char(15) NOT NULL,
PRIMARY KEY (id_estudante),
CHECK (nivel IN (“Bacharelado”, ”Mestrado”,
”Doutorado”)));
24. O Comando CREATE – Exemplo
CREATE TABLE empregado
(matricula INT NOT NULL AUTO_INCREMENT,
nome VARCHAR(40) NOT NULL,
sexo CHAR,
salario NUMERIC(10,2),
depto INT NOT NULL,
PRIMARY KEY (matricula),
CHECK (salario >= 724,00),
FOREIGN KEY (depto)
REFERENCES
departamento(codDep) ON UPDATE
CASCADE ON DELETE CASCADE);
Observação: este exemplo supõe que a tabela departamento já exista.
25. O Comando DROP
• Remove uma relação do banco de dados.
• Exclui todas as informações sobre a relação removida.
• Sintaxe:
DROP TABLE [IF EXISTS] nome;
Onde:
• IF EXISTS: preveni um erro de ocorrer se a relação não existir.
• nome: nome da relação a ser removida.
• Exemplo:
• DROP TABLE IF EXISTS empregado;
26. O Comando ALTER
• Permite alterar a estrutura da tabela existente.
• Adicionar ou deletar colunas, alterar o tipo de coluna
existentes, ou renomear coluna ou tabelas, entre outros.
• Os novos atributos terão valores nulos em todas as
linhas.
• A inclusão de uma coluna requer a especificação do seu
tipo de dado.
• Está não pode ser definida como NOT NULL.
27. O Comando ALTER
• Sintaxe:
• ALTER TABLE nome_relação
Opção Descrição
ADD [COLUMN] Adiciona uma ou mais colunas
CHANGE [COLUMN] Altera o nome da coluna
MODIFY [COLUMN] Altera o domínio da coluna
DROP [COLUMN] Exclui uma coluna
RENAME [TO] Renomeia a Tabela
Tabela 1 – Algumas das especificações de ALTER TABLE
28. O Comando ALTER
• Exemplos:
• ALTER TABLE nome_tbl
RENAME TO novo_nome;
• ALTER TABLE clientes DROP email;
• ALTER TABLE tarefa
ADD COLUMN complete DECIMAL(2,1)
AFTER description;
29. Escolha do SGBD
• Para está disciplina o SGBD foi escolhido o MySQL.
30. Escolha do SGBD
• O download do MySQL pode ser feito através do
site:
• http://dev.mysql.com/downloads/
• Nesta disciplina vamos utiliza-lo através do sistema
operacional Ubuntu.
• Para fazer o acesso é necessário pelo terminal digite:
• mysql -uroot -p
31. Criação do BD
• Criação do banco de dados:
• create database nome_do_banco;
• Usando o banco de dados:
• use nome_do_banco;
32. Exercício
1. Criar três relações baseadas no funcionamento
do IFAL.
• Uma das relações deve conter no mínimo 4 domínios de
atributos diferentes.
• Cada relação deve conter ao menos uma regra de
integridade.
2. Escolha uma das relações e faça no mínimo 3
alterações diferentes, sendo uma de cada vez.
3. Pesquise a sintaxe completa para ALTER TABLE e
faça, ao menos, 2 modificações diferentes na(s)
tabela(s) a sua escolha.
33. Exercício
4. Crie uma relação cliente e a relação vendedor.
5. Defina as relações a seguir usando SQL:
Fornecedor (codigo, nome, cidade)
Venda (cod_venda, quantidade, data, cod_forn)
• Ser on delete – cascade
• Ser on update – cascade
Peca (cod_peca, nome, descricao)
• É obrigatório que:
• Todos os atributos das cinco relações não sejam nulos.
• cod_venda seja auto incrementado pelo sistema.
• quantidade seja maior que zero.
• Nome da peça seja único.
34. Tipos Definidos pelo Usuário
• A SQL aceita duas formas de tipos de dados definidos
pelo usuário:
• Tipos distintos; e
• Tipos estruturados.
• É possível que vários atributos possuam o mesmo tipo
de dados.
• O tipos de dados definidos pelo usuário se propõe a
fazer algumas separações como comparar um valor
monetário em dólares e em libras, por exemplo.
35. Tipos Definidos pelo Usuário
• A cláusula CREATE TYPE (SQL:1999) pode ser utilizada
para criação de um novo tipo.
Ex.: CREATE TYPE Dolar AS numeric (10,2) final
CREATE TYPE Libra AS numeric (10,2) final
• Os tipos recém criados podem ser utilizados como tipos
de atributos nas relações.
Ex.: CREATE TABLE Conta (num_conta char(10), nome_agencia
varchar(15), saldo Dolar)
36. Tipos Definidos pelo Usuário
• Anterior ao SQL:1999 a SQL possuia uma notação
semelhante chamada tipo de domínio (SQL-92).
• A cláusula em questão era CREATE DOMAIN.
Ex.: CREATE DOMAIN Dolar AS numeric (10,2)
37. Índices
• Utilizados para encontrar registros com um valor
específico de uma coluna rapidamente.
• Sem um índice a procura de um registro ocorre de
forma sequencial.
• Qual a implicação disto?
• Quanto maior a tabela, maior será o custo.
38. Índices
• A utilização de índices torna a busca mais
otimizada.
• Não há necessidade de se varrer todos os registros.
• Como os Índices são Criados?
• Automaticamente: Um índice exclusivo é criado
automaticamente quando você define uma restrição
PRIMARY KEY ou UNIQUE em uma definição de tabela.
• Manualmente: Usuários podem criar índices não-
exclusivos em colunas para acelerar o tempo de acesso
às linhas
39. Índices
• Quando não utilizar índices:
• Quando a tabela for pequena.
• Quando as colunas não forem utilizadas com frequência
como uma condição na consulta.
• Quando a tabela for atualizada com frequência.
40. Índices
• Índices podem ser criados tanto no momento da
concepção da tabela quanto em uma tabela já
existente.
• Sintaxe de criação de índices:
CREATE [UNIQUE|FULLTEXT] INDEX nome_indice
ON nome_tabela (index_col_name,...)
41. Índices
• Exemplos:
CREATE TABLE CLIENTES(Codigo INT, Nome VARCHAR(50),
INDEX (Codigo));
CREATE TABLE TESTE(Nome VARCHAR(40) NOT NULL,
INDEX Nome_indice (Nome(10)));
CREATE TABLE TESTE (id INT NOT NULL, ultimo_nome
CHAR(30) NOT NULL, primeiro_nome CHAR(30) NOT
NULL, PRIMARY KEY (id), INDEX nome (ultimo_nome,
primeiro_nome));
42. Índices
• Caso a tabela já existir:
CREATE INDEX idx_CLIENTES_CODIGO ON
CLIENTES(Codigo);
• Para alterar:
ALTER TABLE TESTE ADD INDEX(campo1, campo2);
43. Índices
• Para eliminar um índice:
DROP INDEX indice_nome ON tabela_nome
• Ex.: DROP INDEX
OBS.: Para excluir uma chave primária, o nome do índice é
sempre PRIMARY, que deve ser especificado como um
identificador entre aspas porque PRIMARY é uma palavra
reservada.
44. Exercício
• Elabore as relações a seguir conforme o solicitado
nas regras.
Empregado(matricula, nome, salario, supervisor, depto)
Departamento(codDep, nome, gerente, dataIni)
Projeto(codProj, nome, local, depart)
Alocacao(matricula, codProj, horas)
Dependente(codDepend, matricula, nome, sexo)
45. Exercício
• Regras:
• As chaves primárias das relações devem ser
automaticamente incrementadas pelo sistema.
• Nenhum dos atributos pode ser nulo, com exceção do
atributo supervisor pertencente a relação Empregado.
• O nome do projeto e o nome do departamento devem
ser únicos.
• Quando nada for digitado para ser armazenado no
atributo supervisor, na relação Empregado, “Não tem
supervisor” deve ser escrito em seu lugar.
46. Exercício
• Qualquer atualização ou deleção deve ser feito em
cascata pelo sistema.
• Na relação Empregado, o atributo nome deve ser
utilizado como um índice de tamanho 10.
• Crie um índice para a relação Empregado e inclua o
atributo matricula como índice.
• Altere a relação Departamento de modo a incluir um
índice nos atributos nome e gerente.
• Altere a relação Dependente de modo a incluir um
índice nos atributos codDepend e matricula.
• Exclua o índice presente na relação Empregado.