Upload
jose-augusto-cintra
View
570
Download
0
Embed Size (px)
Citation preview
Minicurso de SQL
Parte I: DDL
Prof. José Augusto Cintra
htttp://www.josecintra.com/blog
Revisão 1 - Julho/2014
Apresentação
O objetivo deste minicurso é fornecer conceitos
básicos sobre a SQL, linguagem amplamente
utilizada para manipulação de Bancos de Dados
Relacionais.
Subentende-se que o leitor já possua
conhecimentos prévios sobre Modelagem de
Bancos de Dados eTeoria Relacional.
2
Os exemplos aqui apresentados são compatíveis com os bancos de dadosrelacionais com suporte para a SQL padrão.
Histórico
SQL (Structured Query Language) ou Linguagem
de Consulta Estruturada é uma linguagem para
definição, acesso, manipulação e controle de Bases de
Dados Relacionais.
Baseada na Álgebra Relacional, foi desenvolvida originalmente no
início dos anos 70 nos laboratórios da IBM, dentro do projeto System R,
que tinha por objetivo demonstrar a viabilidade da implementação do
modelo relacional proposto por E. F. Codd.
A linguagem é um grande padrão de banco de dados. Isto decorre da
sua simplicidade e facilidade de uso.
4
Características da SQL
Estilo declarativo;
Sintaxe simples e bem definida;
Pode ser utilizada interativamente ou embutida em linguagens de
programação;
Não é uma linguagem completa como C, Java ou Delphi;
Portável;
Presente nos mais importantes SGBDs Relacionais. Diferentes
fornecedores apresentam versões com algumas particularidades;
Apresenta várias padrões evolutivos: SQL86, SQL89(SQL1), SQL92
(SQL2), SQL99(SQL3). A última versão definida pela ANSI/ISO traz
características como: Stored Procedures, Triggers, Suporte à
Programação OO, XML, entre muitas outras.5
Divisões da SQL
A SQL é dividida em conjuntos, de acordo com a natureza dos comandos:
DDL Data Definition Language (Linguagem de Definição de Dados) reúne comandos
que permitem ao administrador criar os objetos de Bancos;
DML Data Manipulation Language (Linguagem de manipulação de dados) é um
subconjunto da linguagem SQL que é utilizado para realizar inclusões, alterações e
exclusões dos dados;
DQL Data Query Language (Linguagem de Consulta de Dados) É a parte da SQL mais
utilizada. Agrupa os comandos que permitem ao usuário especificar uma consulta ("query")
como uma descrição do resultado desejado.
DCL Data Control Language (Linguagem de Controle de Dados). Reúne comandos que
controlam os aspectos de autorização de dados e licenças de usuários para controlar quem
tem acesso a determinadas operações;
DTL Data Transaction Language (Linguagem de Transação de Dados). Controla uma
sequência de comandos e a integridade dos dados resultantes.
Neste minicurso, iremos abordar a DDL, a DML e a DQL. 6
7
Divisões da SQL
Os comandos da SQL são assim distribuídos:
DDL CREATE, ALTER e DROP, usado para criar, alterar e excluir objetos tais como
tabelas (TABLE),Views (VIEW) e índices (INDEX) ;
DML INSERT, UPDATE e DELETE usados para fazer a manutenção dos dados;
DCL GRANT e REVOKE, usados para atribuir e retirar permissões de acesso ao BD;
DTL BEGIN WORK ou START TRANSACTION, COMMIT e ROLLBACK,
usados para controle de transações que garantem a integridade dos dados do BD;
DQL SELECT, usado para realizar consultas (query) ao BD.
Obs: Esta divisão é apenas convenção e não tem utilidade prática nenhuma. Alguns
autores descartam a DQL e colocam o comando SELECT como pertencendo à DML.
Em caso de concursos ou provas, verifique na bibliografia da banca, qual a convenção
utilizada.
Modelo de Dados
Para os exemplos, usaremos o seguinte esquema de dados de finalidade puramente didática, sem
nos preocuparmos com a correção do modelo:
Um funcionário pode estar em um único departamento e um departamento pode possuir
vários funcionários;
Um funcionário pode participar de vários projetos e um projeto pode conter vários
funcionários. A tabela associativa func_proj faz a ligação entre funcionários e projetos;
8
Criação do Banco de Dados
O primeiro passo para podermos testar os comandos SQL é a criação do Banco de
Dados.
Fazemos isso através do comando CREATE.
Sintaxe:
CREATE {DATABASE} <nome do banco>
Exemplo:
CREATE DATABASE banco
Obs:
1. Os comandos SQL são case insensitive;
2. O comando CREATE possui diversas outras opções que são específicas de cada
SGBD e, por isso, não serão descritas aqui.
10
Criação das Tabelas do Banco de Dados
O próximo passo é a criação das tabelas do Banco de Dados e, para isso, usaremos
novamente o comando CREATE.
Na criação das tabelas, precisaremos definir para os campos os tipos de dados e
restrições, que são regras, validações impostas aos elementos para garantir integridade
dos dados.
11
Constraints (Restrições)
As restrições podem ser definidas a nível de campo ou de tabela. As principais são:
PRIMARY KEY (PK ou Chave Primária) Especifica qual coluna ou conjunto
de colunas será a chave primária da tabela;
FOREIGN KEY (FK ou Chave Estrangeira) Determina que uma coluna ou
conjunto de colunas é uma chave estrangeira e que, portanto, se relaciona a uma PK
de outra tabela.
UNIQUE Determina que um campo não poderá ter 2 linhas com o mesmo valor;
CHECK Especifica a condição que a coluna precisa atender para salvar o registro;
NOT NULL Determina que a coluna tem preenchimento obrigatório;
AUTO_INCREMENT O valor do campo será gerado automaticamente
(incremento). Deve ser usado com o tipo de dado INTEIRO e só pode haver um
campo destes em cada tabela;
DEFAULT Especifica um valor padrão para gravar no campo, caso este não seja
informado no comando de inserção.12
Integridade Referencial
Em um banco de dados relacional, quando um registro de uma tabela aponta para outro
em outra tabela, é necessário estabelecer regras para que o registro "pai" não possa ser
alterado ou excluído se ele tiver "filhos".
Exemplo: Na tabela departamento, não podemos excluir o departamento de
compras, se algum funcionário estiver cadastrado nele. Caso essa operação seja
necessária, então é preciso fazê-la de alguma forma na tabela funcionario também.
Os tipos mais comuns de restrições de integridade são:
CASCADE Ao se remover um registro da tabela referenciada pela chave estrangeira,
os registros relacionados àquele removido serão eliminados em todas as tabelas
relacionadas.
RESTRICT Não permite a remoção de registros que possuam relacionamentos em
outras tabelas.
DEFAULT ou NULL Atribuem esses valores para as chaves estrangeiras cujos
registros relacionados foram excluídos.13
Tipos de Dados
Os tipos de dados podem ser classificados em três categorias. Os mais comuns são:
Numérico
INT, INTEGERInteiros regulares
BIGINT, SMALLINT eTINYINT Inteiros grandes, pequenos e muito pequenos
FLOAT/DOUBLE Números de ponto flutuante de precisão simples ou dupla
DECIMAL /NUMERIC Números de ponto flutuante armazenados como char
Data
DATE Data (YYYY-MM-DD)
DATETIME Data e hora (YYYY-MM-DD HH:MM:SS)
TIME Hora (HH:MM:SS)
Texto
CHARTexto de comprimento fixo
VARCHARTexto de comprimento variável
TEXT/BLOBTextos Grandes/Binários 14
Tipos de Dados – Definindo o tamanho
Podemos definir um tamanho para cada campo, de acordo com a necessidade. Caso
não o façamos, o sistema assumirá um tamanho padrão, que poderá variar de acordo
com cada SGBD.
Exemplos:
INTEGER(5) Define um campo inteiro com 5 dígitos
CHAR(100) Define um campo texto com 100 caracteres
DECIMAL(12) Define um número com 12 dígitos
DECIMAL(8,2) Define um número com 6 dígitos inteiros e 2 decimais
15
16
Comando CREATE TABLE
Vejamos agora a sintaxe do comando CREATE TABLE, usado para criar uma nova
tabela em um banco de dados:
CREATETABLE nome_tabela
[ ( [ nome_coluna tipo_dados [restrição_coluna] ] |
[restrição_tabela],....) ]
Onde:
restrição_coluna =
[ NULL | NOT NULL] | [ UNIQUE | PRIMARY KEY ] |
[ REFERENCES tabela (coluna) [ ON DELETE CASCADE] ] |[ CHECK (condição) ]
restrição_tabela =
[CONSTRAINT] nome_regra [ [ UNIQUE | PRIMARY KEY ] (coluna,....) |
[ FOREIGN KEY (coluna,...) REFERENCES tabela (coluna,...) [ ON DELETE
CASCADE] ] |[ CHECK (condição) ]
Exemplos CREATE TABLE
Definição da tabela departamento:
CREATE TABLE IF NOT EXISTS departamento
(cod_depto int(11) PRIMARY KEY,
descr_depto varchar(30) NOT NULL)
Comentários:
A tabela departamento foi criada com o campo cod_depto como chave
primária.
O campo descr_depto não aceitará valores nulos e suportará até 30 caracteres de
tamanho, mas o gerenciador armazenará somente o tamanho efetivamente ocupado.
17
Exemplos CREATE TABLE
Definição da tabela funcionario:
CREATE TABLE IF NOT EXISTS funcionario
(cod_func int(11) NOT NULL,
nome_func varchar(100) NOT NULL,
nasc_func datetime,
sexo_func char(1) DEFAULT 'M',
salario_func decimal(12,2),
cod_depto int(11) NOT NULL REFERENCES departamento(cod_depto),
PRIMARY KEY (cod_func))
Comentários:
O campo sexo_func possui um valor DEFAULT (‘M’), que será gravado, caso não seja
informado na inserção;
O campo cod_depto é uma chave estrangeira que referencia o campo cod_depto da
tabela departamento;
A chave primária foi definida de forma alternativa, como restrição de tabela.18
19
Exemplos CREATE TABLE
Definição das tabelas projeto:
CREATE TABLE IF NOT EXISTS projeto
(cod_proj int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
desc_proj varchar(30) NOT NULL);
Comentários:
O campo chave da tabela será “auto incrementável”, ou seja, seu valor será gerado
automaticamente de forma sequencial (incremento). Dessa forma, na inserção ele não deverá ser
informado.
20
Exemplos CREATE TABLE
Definição das tabelas func_proj
CREATE TABLE IF NOT EXISTS func_proj
(cod_func int(11) NOT NULL REFERENCES funcionario(cod_func),
cod_proj int(11) NOT NULL REFERENCES projeto(cod_proj),
inicio_proj datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
fim_proj datetime CHECK (fim_proj >= inicio_proj),
PRIMARY KEY (cod_func,cod_proj));
Comentários:
Essa tabela fará a ligação entre funcionários e projetos;
Foi criada uma chave primária composta com os campos cod_func e cod_proj;
Existe uma regra de validação para o campo fim_proj: data de fim de projeto deve ser
maior que data de início.
21
Comando ALTER TABLE
Usamos o comando ALTER TABLE para alterar a estrutura de uma tabela existente.
Podemos adicionar, alterar e excluir campos e restrições.
Obs: Nem todas modificações são permitidas. Por exemplo, não se pode modificar uma
coluna contendo valores nulos para NOT NULL.
Existem alternativas para isso, como criar outra tabela e copiar os dados e outros truques.
Sintaxe:
ALTER TABLE nome_tabela
ADD novas colunas | novas restrições
ALTER TABLE nome_tabela
CHANGE definição das colunas
ALTER TABLE nome_tabela
DROP coluna | restrição_coluna
22
Comando ALTER TABLE - Exemplos
Adicionar um novo campo à tabela funcionario:
ALTER TABLE funcionario
ADD comissao DECIMAL(8,4) NOT NULL
Alterar o tamanho do campo descr_depto da tabela departamento:
ALTER TABLE departamento
CHANGE descr_depto VARCHAR(100);
Excluir da tabela funcionario o campo comissao recém criado:
ALTER TABLE empregado
DROP comissão
23
Comando DROP TABLE
O comando DROP é usado para excluir um objeto do
banco de dados
Sintaxe:
DROP TABLE nome_tabela
Exemplo:
DROP TABLE departamento
Obs: Este comando, assim como os demais comandos DDL, possui regras rígidas de
segurança e integridade de dados. Assim só podem ser executados em alguns casos.
Não é possível, por exemplo excluir uma tabela que possua relacionamentos.
24
FIM
Referências
www.inf.pucrs.br/~danielc/bda/SQL1.ppt
www.dsc.ufcg.edu.br/~baptista/cursos/BDadosI/Capitulo4.ppt
https://en.wikipedia.org/wiki/SQL
Para obter materiais complementares, consulte o blog em:
http://www.josecintra.com/blog