Linguagem de consulta estruturada - SQL I
Linguagem de Definição de Dados (DDL).
Desenvolvida pelo departamento de pesquisa da IBM na década de 1970 (System R) - Sequel.
Linguagem padrão de Bancos de Dados Relacionais, apresenta váriOs padrões evolutivos, que foram evoluindo com o tempo: SQL86, SQL89(SQL1), SQL92 (SQL2), SQL99(SQL3).
A última versão definida pela ANSI/ISO traz características novas como: store procedures, triggers, suporte à programação OO, XML, entre outras (SQL2003).
Diferentes fornecedores de SGBDS apresentam versões de SQL com algumas particularidades próprias.
Caracetrísticas
- Estilo declarativo, não procedimental.
- Permissão de otimizações.
- Utilização por várias classes de usuários.
- Sintaxe simples e bem definida.
- Presença em todos os SGBDs Relacionais.
- Incorporação comumente a uma outra linguagem.
- Não constituição de uma linguagem de programação Delphi, C ou Java.
- Portabilidade entre sistemas operacionais.
Linguagem
- Disponibiliza uma série de comandos DDL para definição de dados.
- Disponibiliza um conjunto de comandos DML para manipulação de dados.
- Proporciona um conjunto de instruções para definição de visões (tabelas virtuais).
- Permite controle de autorização de acesso.
- Permite controle de transações e concorrência.
- Disponibiliza instruções para especificação de restrições de integridade.
SQL- DDL
Principais comandos da DDL:
CREATE- Cria uma definição;
ALTER - Alterar alguma definição;
DROP - Exclui uma definição.
Outros comandos da DDL:
TABLE - Define uma tabela, seus campos e as restrições de campo;
INDEX - Define um índice associado a um campo de uma tabela;
DOMAIN - Define um tipo de dado;
GRANT - Define usuários e autorizações para cada um;
EXCEPTION - Define uma mensagem de erro;
TRIGGER - Define um conjunto de instruções que são automaticamente executadas antes ou depois de um comando INSERT, UPDADE ou DELETE;
PROCEDURE - Define um conjunto de instruções. Podem receber ou retornar valores. Podem ser executadas através de uma solicitação do usuário ou por um TRIGGER.
CREATE DATABASE - Cria um novo banco de dados ou esquema.
CREATE {DATABASE | SCHEMA} <nome do banco>
CREATE TABLE - Cria uma nova tabela com seus campos e define as restrições de campo.
CREATE TABLE <nome da tabela> (
<coluna> <tipo-do-dado> [not null] [not null with default],
<coluna> <tipo-do-dado> [not null] [not null with default], ...
primary key (<coluna-pk>)
foreign key (<coluna-fk>) references <tabela-pai> (<coluna-pk- pai>)
)
DDL – CREATE TABLE
Onde:
<tabela> : Define o nome da tabela.
<coluna>: Define o nome da coluna. A definição das colunas de uma tabela é feita relacionando-as uma após a outra, separadas por vírgula.
<tipo-do-dado> : Define o tipo e o tamanho da coluna definida.
<not null> : Define uma coluna de preenchimento obrigatório.
<not null with default> : Define uma coluna de preenchimento obrigatório e que, no momento da inclusão de uma linha na tabela, tenha um valor pré-definido.
primary key (<coluna-pk>) : Define a coluna que será a chave primária da tabela. No caso de mais de uma coluna ser chave primária, separá-las por vírgula.
foreign key (<coluna-fk>) references <tabela-pai> (<coluna-pk-pai>): Define a <coluna-fk>, de <tabela>, como chave estrangeira. A <tabela-pai> define a tabela-pai relacionada a fk e <colunapk-pai>. Define a coluna pk, de <tabela-pai>.
Exemplo:
create table curso
(
cod_curso INTEGER not null,
nome_curso VARCHAR(40) not null,
primary key (cod_curso)
);
create table turma
(
cod_turma INTEGER not null,
nome_turma VARCHAR(40) not null,
cod_curso INTEGER not null,
primary key (cod_turma),
foreign key (cod_curso) references curso (cod_curso)
);
CONSTRAINTS: Constraints são regras agregadas a colunas ou tabelas. Assim, pode-se definir como obrigatório o preenchimento de uma coluna que tenha um valor-padrão quando uma linha for incluída na tabela ou quando aceitar apenas alguns valores pré-definidos. No caso de regras aplicadas a tabelas, tem-se a definição de chaves primárias e estrangeiras.
Exemplos:
create table aluno
(
matricula INTEGER not null,
nome_aluno VARCHAR(40) not null,
sexo CHAR(1) check (upper(sexo) = ‘M’ or upper(sexo) = ‘F’),
cpf NUMERIC(11) unique,
cod_curso INTEGER not null,
primary key (matricula),
foreign key (cod_curso) references curso (cod_curso)
);
ALTER TABLE - Altera definições na estrutura de uma tabela do BD, acrescentando, alterando e removendo nomes,formatos das colunas e regras de integridade referencial.
Exemplo:
ALTER TABLE <nome da tabela> (
[ drop <coluna> ] |
[ add <coluna> <tipo-do-dado> [not null] [not null with default]] |
[ rename <coluna> <novo-nome-coluna>] |
[ rename table <novo-nome-tabela>] |
[ add primary key ( <coluna-pk> ) ] |
[ drop primary key ( <coluna-pk> ) ] |
[ add foreign key (<coluna-fk>) references <tabela-pai> (<coluna-pk-pai>)
[ drop foreign key (<coluna-fk>) references <tabela-pai> ]
)
Onde:
<tabela> : Define o nome da tabela.
drop <coluna> : Remove a coluna da estrutura da tabela.
add <coluna> <tipo-do-dado> [not null] [not null with default] : Acrescenta uma nova coluna. No caso da existência de linhas nesta tabela, o valor da nova coluna será de acordo com as definições das cláusulas not null e not null with default.
rename <coluna> <novo-nome-coluna>: Troca o nome da coluna.
rename table <tabela>: Troca o nome da tabela.
Onde:
add primary key (<coluna-pk>): Define uma chave primária à uma nova coluna acrescentada na tabela.
add foreign key (<coluna-fk>) references <tabela-pai> (<coluna-pk-pai>): Acrescenta uma nova chave estrangeira.
drop foreign key (<coluna-fk>) references <tabela-pai> : Remove a definição de chave estrangeira.
drop primary key (<coluna-pk>): Remove a definição de chave primária da coluna.
Exemplo:
create table aluno
(
matricula INTEGER not null,
nome_aluno VARCHAR(40) not null,
cod_curso INTEGER not null,
primary key (matricula)
);
alter table aluno
add foreign key (cod_curso) references curso (cod_curso);
);
CREATE INDEX- Cria uma estrutura de índice de acesso para uma determinada coluna de uma tabela. Um índice permite um acesso mais rápido aos dados e pode ser criado a partir de uma ou mais colunas da tabela. Toda chave primária possui um índice definido.
Exemplo:
CREATE [UNIQUE] INDEX <nome do indice> on <tabela>
( <coluna> [ASC] [DESC], <coluna> [ASC] [DESC]
)
Onde:
<índice>: Define o nome do índice. A cláusula unique define que não existirão duas linhas com o mesmo conteúdo de <coluna>. A definição do índice de uma chave primária contém unique.
<tabela>: Define o nome da tabela que contém a coluna que terá o índice
<coluna>: Define a coluna da tabela. As opções ASC/DESC representam, respectivamente, uma ordenação ascendente e descendente.
DROP - Remove um objeto do banco de dados.
DROP <OBJETO> <nome do objeto>;
Exemplo:
REMOVE TABELA :
drop table curso;
REMOVE VIEW :
drop view v_curso;
REMOVE ÍNDICE :
drop index curso_pk;