24
Minicurso de SQL Parte I: DDL Prof. José Augusto Cintra htttp :// www.josecintra.com/blog Revisão 1 - Julho/2014

SQL Minicurso Parte I - DDL

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.

Introduçã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

DDL

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