Free CSS Button Css3Menu.com

Tutoriais » SQL » [DDL]-Create »
Definindo:
Este comando permite a criação do componente físico que materializa um conceito de uma Base de Dados.
Por exemplo, uma tabela é materializada em um arquivo, do mesmo modo um índice associado a um campo de uma tabela,
ou até mesmo uma visão de dados (combinação de dados resultante do processamento de dados de uma ou mais tabelas).
O comando CREATE tem uma sintaxe que DEPENDE muito da estrutura interna do arquivo que implementa um conceito no SGBD.
Desse modo, o ANSI não conseguiu estabelecer um comando Padrão.
Por consequência, definiu somente uma estrutura fundamental que os SGBDs deveriam seguir e com a proposta de complementos no comando.
Esta 'proposta' permite os 'complementos do comando' que podem ser 'customizados' em cada SGBD.
Aqui é exemplificado o comando CREATE para a criação de ua tabela com cinco campos, na forma:
CREATE TABLE public.roteiros (
       idroteiro integer NOT NULL,
       rotaid numeric(6,0) NOT NULL,
       cidadeid smallint NOT NULL,
       nuordem character(3),
       dtcadroteiro date
       );

Nota:
  • O comando acima define a existência da tabela no 'schema public'.
    Fazendo uma associação livre... 'schema' no PostgreSQL é uma implementação do conceito de Área Funcional.
    Assim, o 'schema' public pode ser associado ao modelo lógico de uma base de dados (para o SGBD PostgreSQL).
  • O comando CREATE tem uma variante que permite receber o resultado de um comando de consulta e 'criar' uma tabela com os dados processados.
    Isso pode ser escrito assim:
    CREATE TABLE <NomeDaTabela> AS ( Comando DQL que pode Gerar Dados para a Tabela );
    Por exemplo, fazemos uma seleção e depois criamos a tabela com o resultado, desta forma
    CREATE TABLE depto01 AS (SELECT * FROM departamentos WHERE deptoid_superior IN ('A01','B01'));
    CREATE TABLE depto02 AS (SELECT * FROM departamentos WHERE deptoid_superior IN ('D01','B01'));

    Os comandos acima criam os arquivos 'gravados' no diretório onde se hospedam os arquivos da Base de Dados.
    Estas tabelas passam a ter suas definições gravadas também no Dicionário de Dados da Base.
  • Realizar comandos CREATE pode ser um tanto complicado se este comando for executado em mais de uma aplicação simultaneamente (ou em ciclos muito próximos).
    A segunda tentativa vai gerar uma situação de erro.
    Para resolver isso os SGBDs implmentam um complmento do comando que cria uma tabela 'temporária' na memória do servidor de dados.
    Esta tabela 'temporária' (fica em memória RAM somente enquanto se executa a sessão de conexão com o SGBD).
    Este 'tipo de tabela' é implementado em vários SGBDs.
    Criando uma tabela temporária e a seguir mostrando seu conteúdo
    CREATE TEMPORARY TABLE func01 AS (SELECT * FROM funcionarios WHERE dt_contratacao<'2000-01-01');
    SELECT * FROM func01;

  • Tabelas criadas pelo comando CREATE devem seguir as premissas (condições fundamentais) para existência de uma tabela no modelo relacional.
    As tabelas devem NÃO apresentar tuplas repetidas (sendopossível existir a Chave Primária) e os campos NÃO podem aparecer com nomes repetidos no esquema (estrutura) da tabela.
    Note que em tabelas que resultam de junções pode ocorrer que os nomes de campo se repitam.
    Sendo assim, é possível usar o operador 'AS' para trocar os nomes de campos que reultam de um comando SQL para 'se enquadrar' nas premissas.
    Estas tabelas ficam GRAVADAS no disco rígido e passam a constar no dicionário de dados da base.
    Podemos também criar uma tabela 'temporária' (fica em memória RAM somente enquanto se executa a sessão de conexão com o SGBD).
    Este 'tipo de tabela' é implementado em vários SGBDs.
    Criando uma tabela temporária e a seguir mostrando seu conteúdo
    CREATE TEMPORARY TABLE atua01 AS
           (SELECT Clientes.*
                   FROM Clientes LEFT JOIN Pedidos ON Clientes.Cod_Cliente=Pedidos.Cod_Cliente);
    SELECT * FROM atua01;

    CUIDADO!
    A criação de tabelas (temporárias ou não), em alguns SGBDs exige que as estruturas das tabelas NÃO tenham nomes de campos repetidos.
    Mas... e SE as tabelas envolvidas na Junção Aberta tiverem campos com o mesmo nome? Como fazemos?
    Pode-se combinar a Junção Aberta com a operação de PROJEÇÃO, fazendo gerar uma tabela sem nomes de campos repetidos.
    Uma outra alternativa seria NÃO atribuir nomes iguais em campos distintos em diferentes tabelas. Assim se um campo em uma tabela for Chave Primária o nome do campo pode ser: PK_NomeDoCampo... e um campo correspondente seria FK_NomeDoCampo.

Tutoriais » SQL » [DDL]-Create »