Linguagem SQL Sub-linguagem DDL

Propaganda
Linguagem SQL
Sub-linguagem DDL
A SQL - Structured Query Language, foi desenvolvido pela IBM em meados dos anos 70
como uma linguagem de manipulação de dados (DML - Data Manipulation Language) para suas
primeiras tentativas de desenvolvimento de bancos de dados relacionais. Sua vantagem sobre
modelos de dados anteriores é que as operações realizadas sobre os dados são especificadas numa
linguagem não procedural e conjuntos de dados são manipulados com um único comando. Isto
faz com que os programadores não tenham de navegar por uma estrutura complexa de banco de
dados, reduzindo a quantidade de código necessário para acessar os dados.
SQL tornou-se padrão depois de 1986, quando o American National Standards Institute
(ANSI), definiu a SQL como linguagem padrão para os bancos de dados relacionais. Desde então,
o SQL já sofreu diversas atualizações oficiais. O novo padrão SQL chama-se SQL3, nesta versão
a mais importante é a adição de características de orientação a objetos na linguagem. .
Atualmente este padrão é utilizado para o acesso a diversos bancos de dados relacionais, tais
como Oracle, DB2, SQL Server, Sybase, Mysql, Postgresql, Interbase, Firebird etc.
Os comandos da SQL podem ser agrupados em três categorias:
●
●
●
·DML – Data Manipulation Language
·DDL – Data Definition Language
·DCL – Data Control Language
A DDL da SQL é composta de um conjunto de comandos que permite definir, alterar e
excluir a estrutura de uma base de dados, para ser manipulada por meio de comandos da sublinguagem DML da SQL.
1 - CREATE DATABASE
Sintaxe básica:
CREATE DATABASE nome_da_base_dados
Exemplos:
CREATE DATABASE DeptoPessoal
Para alguns SGBD é necessário informar, no momento da criação, o usuário e a sua
respectiva senha
CREATE DATABASE DeptoPessoal user “sidney” password “xxxx”
2 - CREATE TABLE
Este comando cria uma nova tabela em um banco de dados.
Sintaxe:
CREATE TABLE nome_da_tabela (
Coluna1 <tipo_dado>,
Coluna2 <tipo_dado>,
...
coluna <tipo_dado>
n
Restrição1
Restrição2
...
Restriçãon )
•
•
•
•
•
•
•
•
Cada coluna
é a definição de um campo da tabela associado a um tipo de dado
n
Exemplo:
Nome varchar(50)
Idade int ou idade integer (depende do SGBD)
Os tipos de dados dependem o SGBD em questão, todos empregam o padrão SQL-ANSI,
entretanto cada qual possui sua particularidade.
Cada Restriçãon é uma restrição para um campo definido anteriormente.
Qualquer campo pode ser declarado como NOT NULL.
A chave primaria deve ser declarada como NOT NULL.
Pode-se empregar o termo UNIQUE para identificar que o valor do campo é único.
Uma tabela que faz referência a outra, por meio de uma chave estrangeira, deve ser criada
antes de fazer a referência
Notação para restrição
o Caso 1: Descrição informal da restrição:
Exemplo genericos:
Primary Key (coluna , coluna ,..., coluna ),
i
j
k
Foreign key (coluna ) References nome_tabela1(coluna ) on delete [set
n
t
null | cascade | no action] )
Unique(campon )
o Caso 2: Descrição formal da restrição:
Exemplo genéricos:
Constraint Pk_nome Primary Key (coluna , coluna ,..., coluna ),
i
j
k
Constraint Fk_nome Foreign key (coluna ) References
n
nome_tabela1(coluna ) on delete [set null | cascade | no action] )
t
Constraint UQ_campo Unique(campon )
REFERÊNCIA DE TABELAS
A Referência da chave estrangeira – a referência na definição da chave estrangeira
determina o que fazer com quando um elemento da outra tabela for deletado. Isto é feito por meio
da palavra chave ON DELETE que determina o que deve ser feito com a tupla (linha) desta
tabela, quando o elemento refenciado por foreign key for deletado. Casos possíveis:
 NO ACTION – não permite a exclusão da linha
 CASCADE – apaga a todas as linhas que possuírem o campo
referenciado
 SET NULL aponta para nulo os campos que possuem a
referencia
Exemplos:
CREATE TABLE funcionario (
Cod_fun integer not null PRIMARY KEY,
Nome_fun char(30),
Sexo_fun varchar(1),
Cod_dep varchar(2),
Cpf decimal(13,0) not null UNIQUE,
FOREIGN KEY (cod_dep) References departamento(cod_dep) on delete SET NULL,
)
CREATE TABLE funcionario (
Cod_fun integer not null,
Nome_fun char(30),
Sexo_fun varchar(1),
Cod_dep varchar(2),
Cpf decimal(13,0) not null,
PRIMARY KEY (cod_fun),
FOREIGN KEY (cod_dep) References departamento(cod_dep) on delete CASCADE ,
UNIQUE (cpf)
)
CREATE TABLE funcionario (
Cod_fun integer not null,
Nome_fun char(30),
Sexo_fun varchar(1),
Cod_dep varchar(2),
Cpf decimal(13,0) not null,
CONSTRAINT PK_fun PRIMARY KEY (cod_fun),
CONSTRAINT FK_depto FOREIGN KEY (cod_dep) References
departamento(cod_dep) on delete NO ACTION,
CONSTRAINT UQ_CPF UNIQUE(cpf)
)
É possível determinar valores por omissão, default , na criação de uma tabela.
CREATE TABLE funcionario (
Cod_fun integer not null,
Nome_fun char(30),
Sexo_fun varchar(1) default ‘M’,
cod_dep varchar(2),
admissao date default today,
PRIMARY KEY (cod_fun),
FOREIGN KEY (cod_dep) References departamento(cod_dep) on delete no action
)
Obs: A data atual, obtida do S.O., para o valor de um campo do tipo date depende do SGBD
podendo ser now, today, sysdate etc
RESTRIÇÕES PARA ATRIBUTOS
Por meio do comando check é possível criar uma restrição para uma linha da tabela, nem
todo SGBD aceita efetuar uma restrição logo após a definição do campo, neste caso é necessário
se criar uma restrição ao final da definição da tabela.
Exemplos:
Não funciona
no postgres
CREATE TABLE funcionario (
Cod_fun integer not null,
Nome_fun char(30),
Salario decimal(10,2) check salario > 0 ,
Estado_civil char(10) check value in (‘casado’,’solteiro’,’divorciado’)
…
PRIMARY KEY (cod_fun)
)
CREATE TABLE funcionario (
Cod_fun integer not null,
Nome_fun char(30),
Salario decimal(10,2),
Estado_civil char(10),
…
CONSTRAINT Tipo_estado_civil check Estado_civil ( value in
(‘casado’,’solteiro’,’divorciado’) ),
CONSTRAINT Tipo_salario check salario > 0 ,
CONSTRAINT PK_func PRIMARY KEY (cod_fun)
)
3 - CREATE DOMAIN
Permite a criação de domínios específicos a serem usados na definição de colunas da
tabela
Sintaxe:
CREATE DOMAIN nome_dominio
AS
Tipo_de_dado
[Default valor]
[NOT NULL]
[CHECK (CONDIÇÃO)]
Algumas situações de uso da cláusula condição:
•
•
Value [not] between valor1 and valor2
Value [not] IN (valor , valor , valor , …valor )
1
2
3
n
Exemplo:
CREATE DOMAIN tipo_sexo AS varchar(1) CHECK (VALUE IN ('M','F'))
4 - CREATE INDEX
Permite criar índices par acesso a informações. O interbase já cria automaticamente
índices para manter as restrições das chaves primarias e estrangeiras. Porém, quando
necessitamos fazer consultas a dados por outros campos por intermédio de Group By e Order by
com uma certa freqüência devemos criar índices para obtermos um acesso mais rápido.
Sintaxe:
CREATE
[unique] [asc | desc] index nome_indice on nome_tabela[coluna , coluna ,
i
k
…]
O índice pode ser único ou ou não assim como pode ser ascendente ou descendente
Exemplo:
CREATE desc index nome_fun_idx on funcionario[nome_fun , salario]
i
5 - ALTER TABLE
Este comando permite alterar a estrutura de uma tabela.
5.1 Para adicionar e excluir um campo da tabela.
Sintaxe:
Inclusão
ALTER TABLE
nome_tabela
nome_coluna tipo_dado
Exclusão
ADD ALTER TABLE
nome_tabela
nome_coluna
OBS: É possível adicionar e remover mais de uma coluna em um único comando
Ex:
ALTER TABLE funcionario DROP comissao
ALTER TABLE funcionario ADD nascimento date, comissão decimal(10,2)
5.2 Para modificar o tipo de dado de um determinado campo.
Sintaxe:
ALTER TABLE nome_tabela ALTER COLUMN nome_coluna TYPE tipo_dado
DROP
Ex:
ALTER TABLE funcionario ALTER COLUMN comissao TYPE varchar(50)
5.3 Para renomear o nome de um campo.
Sintaxe:
ALTER TABLE nome_tabela RENAME nome_coluna TO novo_nome_coluna
Ex:
ALTER TABLE funcionario RENAME nome_func TO nome_funcionario
Exemplo:
CREATE DATABASE XPTO
CREATE TABLE engenheiro(
matr INTEGER NOT NULL PRIMARY KEY,
crea INTEGER NOT NULL UNIQUE,
nome VARCHAR(50));
CREATE TABLE gerente(
mat INTEGER NOT NULL PRIMARY KEY,
nome VARCHAR(50)
comissao DECIMAL(10,2));
CREATE TABLE cliente(
codigo INTEGER NOT NULL PRIMARY KEY,
nome VARCHAR(50) not null,
endereco VARCHAR(40));
CREATE TABLE projeto(
codigo INTEGER NOT NULL PRIMARY KEY,
nome VARCHAR(50),
valor DECIMAL(15,2),
matr INTEGER NOT NULL,
mat INTEGER NOT NULL,
codigo_cli INTEGER NOT NULL,
FOREIGN KEY (matr) REFERENCES engenheiro (matr),
FOREIGN KEY (mat) REFERENCES gerente (mat),
FOREIGN KEY (codigo_cli) REFERENCES cliente (codigo));
CREATE TABLE realiza(
matr INTEGER,
codigo INTEGER,
FOREIGN KEY (matr) REFERENCES engenheiro (matr),
FOREIGN KEY (codigo) REFERENCES projeto (codigo),
PRIMARY KEY (matr,codigo));
ALTER TABLE cliente ADD telefone char(10);
ALTER TABLE funcionario DROP comissao
6 - DROP DATABASE
Sintaxe:
DROP DATABASE nome_da_base_dados
Exemplo:
DROP DATABASE DeptoPessoal
7 - DROP TABLE
Sintaxe:
DROP TABLE nome_tabela
Exemplo:
DROP TABLE funcionario
8 - DROP INDEX
Sintaxe:
DROP INDEX nome_do_index
Exemplo:
DROP INDEX nome_fun_idx
Download