Vamos dar uns toques de SQL? VIII
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.
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
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:
Desafio da semana
Gostava que me deixassem queries de inserção nos comentários para eu adicionar mais registos a tabela
Este artigo tem mais de um ano
Muito bem explicado :)..Parabéns 🙂
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.
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 😉
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. 🙂
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
Assim muito à pressa 😛
Abraço
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
Muito bom mesmo. Parabés.
muito bem explicado.
mas eu so nao diria “…um valor por defeito…”, eu diria por padrão.