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: Exemplos: CREATE DATABASE nome_da_base_dados 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.
CREATE TABLE nome_da_tabela ( Coluna 1 <tipo_dado>, Coluna 2 <tipo_dado>,... coluna n <tipo_dado> Restrição 1 Restrição 2... Restrição n Cada coluna n é a definição de um campo da tabela associado a um tipo de dado 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ção n é 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 n References nome_tabela1(coluna t on delete [set null cascade no action] Unique(campo n o Caso 2: Descrição formal da restrição: Exemplo genéricos: Constraint Pk_nome Primary Key (coluna, coluna,..., coluna, i j k REFERÊNCIA DE TABELAS Constraint Fk_nome Foreign key (coluna n References nome_tabela1(coluna t on delete [set null cascade no action] Constraint UQ_campo Unique(campo n 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: 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, 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 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. 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 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 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 tabela Permite a criação de domínios específicos a serem usados na definição de colunas da 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 1, valor 2, valor 3, valor n 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. ] CREATE [unique] [asc desc] index nome_indice on nome_tabela[coluna i, coluna k, O índice pode ser único ou ou não assim como pode ser ascendente ou descendente CREATE desc index nome_fun_idx on funcionario[nome_fun i, salario] 5 - ALTER TABLE Este comando permite alterar a estrutura de uma tabela. 5.1 Para adicionar e excluir um campo da tabela. Inclusão Exclusão ALTER TABLE nome_tabela ADD ALTER TABLE nome_tabela DROP nome_coluna tipo_dado 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. ALTER TABLE nome_tabela ALTER COLUMN nome_coluna TYPE tipo_dado
Ex: ALTER TABLE funcionario ALTER COLUMN comissao TYPE varchar(50 5.3 Para renomear o nome de um campo. ALTER TABLE nome_tabela RENAME nome_coluna TO novo_nome_coluna Ex: ALTER TABLE funcionario RENAME nome_func TO nome_funcionario 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 DROP DATABASE nome_da_base_dados DROP DATABASE DeptoPessoal 7 - DROP TABLE DROP TABLE nome_tabela DROP TABLE funcionario 8 - DROP INDEX DROP INDEX nome_do_index DROP INDEX nome_fun_idx