Vamos dar uns toques de SQL? VIII

9 Comentários

Por Pedro Gaspar para o PPLWARE

Nas semanas anteriores temos aprendido a obter registos através de linguagem SQL, mas ate ao momento ainda não se falou de como alterar esses mesmos registos.
Esta semana vamos aprender a fazer uma tabela recorrendo ao SQL e vamos também aprender um pouco sobre os campos mais usuais neste mundo.

clip_image001

Sintaxe de criação de tabela:

CREATE TABLE  nome_tabela (
nome_campo  tipo(tamanho) [NULL/NOT NULL] ,
nome_campo2  tipo(tamanho) [NULL/NOT NULL] ,
nome_campo3 tipo [NULL/NOT NULL] ,
)
Tipo de campos existentes

image

Muito bem, temos trabalhado ate ao momento com a tabela tbl_pplware que tem os seguintes dados:


Supondo que temos uma empresa e que esta tabela representa os funcionários da nossa empresa vamos querer agora registar as horas que os mesmos trabalham, se fazem a alimentação deles dentro da empresa ou por conta própria, se fizeram o turno de manha, tarde ou noite e ainda deixar um campo para que possamos deixar uma nota
Vamos começar por criar o nosso campo id que será a nossa chave primaria, ou seja, o indica irá ser feito nesse campo, irá ser um campo numérico e tamanho máximo 9 e de incrementação automática.

Campo id

`id` INT( 9 ) NOT NULL AUTO_INCREMENT PRIMARY KEY

Iremos precisar de criar tambem um campo que nos permita ligar à outra tabela (atravez do campo id_pessoa), vamos utilizar um campo INT novamente com o nome id_p

Campo id_p

`id_p` INT( 9 ) NOT NULL

No fim de termos o nosso campo de indexação iremos criar os campos de data e hora onde precisaremos de dois, um para registar a hora de entrada do funcionário e outro para registar a hora de saída, serão campos DATETIME e não poderão ser de valor nulo.

Campos de entrada e saída:

`data_entrada` DATETIME NOT NULL ,
`data_saida` DATETIME NOT NULL

De seguida precisamos do nosso campo para registar que turno foi feito, para este vamos usar um campo tipo ENUM, no campo ENUM defenimos que valores o campo irá aceitar, e ele só aceitará esses

Campo turno:

`turno` ENUM( 'manha', 'tarde', 'noite' ) NOT NULL

Nota, se pretendesse-mos que ficasse um valor por defeito caso não seja indicado nenhum valor ao inserir também o poderemos fazer

Exemplo:

`turno` ENUM( 'manha', 'tarde', 'noite' ) NOT NULL DEFAULT 'manha'

No campo de alimentação iremos utilizar campo tipo BOOL (verdadeiro ou valso), neste campo só poderemos inserir valores 0 ou 1 (TRUE ou FALSE)

Campo alimentação:

`alimentacao` BOOL NOT NULL

E por fim o campo onde iremos deixar alguma nota caso seja necessário, para isso iremos usar uma campo VARCHAR com tamanho máximo de 250 valores, alem disso vamos dizer que o campo pode ser nulo, pois nem sempre será necessário deixar uma nota.

Campo nota:

`nota` VARCHAR( 250 ) NULL

Resultado final:

CREATE TABLE `pplware`.`horas` (

`id` INT( 9 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,

`id_p` INT( 9 ) NOT NULL ,

`data_entrada` DATETIME NOT NULL ,

`data_saida` DATETIME NOT NULL ,

`turno` ENUM( 'manha', 'tarde', 'noite' ) NOT NULL ,

`alimentacao` BOOL NOT NULL ,

`nota` VARCHAR( 250 ) NOT NULL

)

E com isto cria-mos a nossa tabela, vou adicionar alguns registos para ficar-mos com alguns dados para a próxima semana:

INSERT INTO horas( id_p, data_entrada, data_saida, turno, alimentacao, nota ) VALUES
( 1, '2011-07-14 08:00:00', '2011-07-14 12:00:00', 'manha', 1, NULL ) ,
( 2, '2011-07-14 08:00:00', '2011-07-14 12:00:00', 'manha', 0, NULL ) ,
( 3, '2011-07-14 13:00:00', '2011-07-14 16:00:00', 'tarde', 1, NULL ) ,
(4, '2011-07-14 13:00:00', '2011-07-14 16:00:00', 'tarde', FALSE, NULL ) ,
( 5, '2011-07-14 16:00:00', '2011-07-14 20:00:00', 'tarde', FALSE, NULL ) ,
( 6, '2011-07-14 22:00:00', '2011-07-15 02:00:00', 'noite', TRUE, NULL ) ,
( 7, '2011-07-14 22:00:00', '2011-07-15 02:00:00', 'noite', TRUE, NULL ) ,
( 8, '2011-07-14 02:00:00', '2011-07-15 06:00:00', 'noite', FALSE, NULL ) ,
( 9, '2011-07-14 02:00:00', '2011-07-15 06:00:00', 'noite', FALSE,'adormeceu durante a hora de trabalho' )

Resultado final da nossa tabela:

sql_06

Desafio da semana

Gostava que me deixassem queries de inserção nos comentários para eu adicionar mais registos a tabela

Partilhar:
Tags:

Comentários

9

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

  1. Avatar de Nuno Ribeiro
    Nuno Ribeiro

    Muito bem explicado :)..Parabéns 🙂

  2. Avatar de Victor MORAIS

    Viva!

    Apenas uma pequena nota: Existem funções aqui apresentadas que não funcionam em todas as linguagens SQL.

    Oracle, por exemplo, não tem AUTO_INCREMENT e usa sequencias para o efeito.

    1. Avatar de JJ
      JJ

      SQL e Oracle são duas coisas distintas, aliás bem distintas, Oracle não é um tipo de linguagem SQL.

      SQL e Oracle são duas linguagens de interacção com bases de dados relacionais distintas, feitas por duas empresas, e com imensas diferenças.

      O que disse é como dizer que existem palavras da lingua portuguesa, que não funcionam em todas as linguas Portuguesas, como por exemplo a lingua inglesa.

      Não faz qualquer sentido,

      Abraço 😉

      1. Avatar de MV
        MV

        Não é bem como descreves. SQL e Oracle não é comparável porque é errado até dizê-lo. Oracle é uma empresa que utiliza o STANDARD SQL na sua implementação, com alterações dentro da especificidade da sua plataforma.

        Como disse acima, SQL é um standard, e as diversas empresas foram criando versões, aproximações e implementações com características específicas. Como o que o Victor Morais referiu, do auto_increment, que não é utilizado em Oracle (ou em postgresql, por exemplo), ou as linguagens integradas, em que algumas implementações utilizam Java (oracle, etc), ou tcp, perl, etc.

        A analogia que fazes a duas línguas distintas está errada. Língua portuguesa e inglesa? Errado. Pensa mais em algo como várias versões do inglês, em que algumas expressões ou até gramática sofre ligeiras alterações. Mesmo STANDARD, mas alterações na implementação. O que não significa que algumas não tenham realmente algumas alterações confusas. Trabalhar com vários tipos de DB com SQL por vezes pode ser frustrante. 🙂

    2. Avatar de Gabriel Queiroz

      vale resaltar q no postgresql tbm no eh AUTO_INCREMENT, vc declara um campo do tipo serial, que eh um interiro com um função auto incremento, criando assim uma sequecia… e por ai vai.
      a de ser ver q para alguns bancos de dados existem algumas particularidades, mas não uma diferença muito distinta

  3. Avatar de Hugo
    Hugo

    Assim muito à pressa 😛

    Abraço

  4. Avatar de Carlos Correia

    A propósito das várias fugas ao standard SQL e comparação entre as várias implementações, podem tirar uma boa parte das dúvidas nesta página: http://troels.arvin.dk/db/rdbms

  5. Avatar de Pedro
    Pedro

    Muito bom mesmo. Parabés.

  6. Avatar de Gabriel Queiroz

    muito bem explicado.
    mas eu so nao diria “…um valor por defeito…”, eu diria por padrão.