domingo, 29 de janeiro de 2017

Alter table

Olá!

O comando ALTER TABLE é utilizado com o propósito de realizar alterações em uma tabela do banco de dados. Assim, com esse comando é possível adicionar, deletar ou modificar as colunas de uma tabela.

De modo que as modificações realizadas com o ALTER TABLE podem afetar a estrutura física da tabela, e também as regras (constraints) que são aplicadas em cada coluna. Por exemplo, para adicionar ou remover a regra de que o campo não pode ser nulo em uma tabela já existente é necessário utilizar o ALTER TABLE.

Alguns exemplos da aplicação do ALTER TABLE:
  • Adicionar uma coluna na tabela, sintaxe:
ALTER TABLE nome_da_tabela ADD nome_da_nova_coluna tipo_de_dado_da_coluna
ALTER TABLE pessoa         ADD sobrenome           VARCHAR (50)

  • Remover uma coluna da tabela, sintaxe:
ALTER TABLE nome_da_tabela DROP COLUMN nome_da_coluna
ALTER TABLE pessoa         DROP COLUMN sobrenome

  • Modificar o tamanho do campo da tabela, sintaxe:
ALTER TABLE nome_da_tabela ALTER COLUMN nome_da_coluna novo_tipo_de_dado
ALTER TABLE pessoa         ALTER COLUMN sobrenome      VARCHAR (80)

Fique atento a sintaxe do comando para o banco de dados em que você está trabalhando, pois há pequenas particularidades na sintaxe deste comando para cada banco de dados. Por exemplo, veja abaixo como seria a sintaxe para modificar o tipo de dado da coluna de uma tabela no MySQL, DB2, PostgreSQL:

MySQL
ALTER TABLE nome_da_tabela
  MODIFY COLUMN nome_da_coluna  novo_tipo_de_dado

DB2
ALTER TABLE nome_da_tabela
  ALTER COLUMN nome_da_coluna SET DATA TYPE novo_tipo_de_dado

PostgreSQL
ALTER TABLE nome_da_tabela
  ALTER COLUMN nome_da_coluna TYPE novo_tipo_de_dado

O comando possui vários sub-comandos para diversos tipos de operações, e cada banco de dados possui uma particularidade para a sintaxe desses sub-comandos. Para visualizar todos os sub-comandos disponíveis visite os links a seguir:




Note também que em alguns bancos de dados algumas operações não são permitidas, e em outros são. Então, dependendo da aplicação a ser desenvolvida/trabalhada a escolha do banco de dados pode ser definida com base nessas operações, exemplo: em uma aula de SQL, os bancos de dados que permitem mais operações podem demonstrar melhor a funcionalidade de cada sub-comando do ALTER TABLE.


Consultar a relação de Termos e Abreviaturas acesse aqui.

Felipe Barbosa Ferreira
Até o próximo post!

domingo, 8 de janeiro de 2017

Constraints - Restrições/Regras

Olá!

No SQL as constraints (restrições / regras) servem para definir regras para os dados que podem ser armazenados em uma coluna. Uma constraint pode ser simples como a restrição de um campo não receber valor nulo, ou a constraint pode ser complexa de modo a avaliar um ou mais campos, e com uma ou mais condições.

Quando a constraint não é respeitada a ação que está sendo executada é abortada, por exemplo: tentar inserir um novo registro com valor nulo em campo com a restrição NOT NULL.

Alguns exemplos de constraint:
  • NOT NULL: define que o campo da tabela não recebe valor nulo
  • DEFAULT: especifica um valor padrão para o campo (quando não informado)
  • UNIQUE: determina que cada registro da tabela deve conter um valor único
A constraint de um campo pode ser criada no momento da criação da tabela (Create table), ou também em uma tabela já existente (Alter table), segue os exemplos:

Definir constraint na criação da tabela:

       CREATE TABLE PESSOA
           (
               CODIGO_PESSOA  INT         NOT NULL
           ,   NOME           VARCHAR(30)
           ,   SOBRENOME      VARCHAR(50) WITH DEFAULT 'Não informado'
           ) 

Definir constraint em uma tabela existente:

       ALTER TABLE PESSOA
       ALTER NOME SET NOT NULL

Consultar a relação de Termos e Abreviaturas acesse aqui.
Felipe Barbosa Ferreira
Até o próximo post!

sábado, 5 de novembro de 2016

Null Values

Olá!

Por padrão campos de uma tabela de um banco de dados (DB) podem suportar valores nulos, ou seja, é opcional designar um valor para o campo.

Sendo que quando o campo está NULL (valor nulo), ele é tratado diferente dos outros campos que possuem valores, pois NULL é usado como um espaço reservado para valores desconhecidos ou não determinados.

Assim, é possível inserir ou atualizar registros do DB com a designação ou não de valor para os campos que aceitam valor nulo. Quando um registro é salvo com um campo sem valor, isto significa que o campo está NULL.

E ao realizar a pesquisa em uma tabela que retorne registros que possuam valores nulos, a representação do campo que estar nulo na maior parte dos DB é feita com espaços, conforme:

PESSOA
CD_PESSOANOMEAPELIDO
1FelipeFelipeB
2Ana
3João
4AlineAlineS
5MairaMairaD

Como os campos nulos recebem um tratamento diferente dos demais campos que possuem valor, eles não podem ser testados com os operadores relacionais (<, >, =, <=, >=, <>). Para realizar uma consulta que verifique se o valor do registro a ser selecionado possui valor nulo ou não é necessário usar os operadores IS NULL ou IS NOT NULL.


  • IS NULL
O operador IS NULL é usado quando a consulta no DB tem o objetivo de selecionar os registros que possuem valor nulo. Exemplo ao executar o SQL abaixo com este operador na tabela PESSOA:

SELECT NOME
     , APELIDO
  FROM PESSOA
 WHERE APELIDO IS NULL;

Temos o seguinte resultado:

reposta_da_consulta
NOMEAPELIDO
Ana
João


  • IS NOT NULL
O operador IS NOT NULL é usado com o objetivo de selecionar registros de uma tabela que não possuam valor nulo, exemplo do SQL abaixo:

SELECT NOME
     , APELIDO
  FROM PESSOA
 WHERE APELIDO IS NOT NULL;

O resultado:

reposta_da_consulta
NOMEAPELIDO
FelipeFelipeB
AlineAlineS
MairaMairaD

Enfim, tenham atenção pois algumas interfaces/IDE utilizadas para manipular os dados dos DB, não representam o campo com valor nulo com espaço, assim caso tenha algum caractere "estranho" na resposta da sua consulta, verifique se o campo está com valor null.

Consultar a relação de Termos e Abreviaturas acesse aqui.
Felipe Barbosa Ferreira
Até o próximo post!

sábado, 15 de outubro de 2016

Alias da coluna e tabela

Olá!

O palavra alias do Inglês traduzida para o Português possui o significado de pseudônimo. E para facilitar a entender está palavra quando abordada em SQL considere seu significado como: "nome temporário".

Sendo um nome temporário, o alias tem o objetivo de facilitar a leitura do código da instrução SQL, e também do seu resultado.

Para definir o alias de uma coluna é necessário somente adicionar o nome temporário na frente do nome da coluna, conforme:

SELECT nome_coluna nome_temporario_alias
  FROM nome_tabela;

Assim, se o nome da coluna estiver abreviado como NM_PSS, o alias pode ser a tradução das abreviaturas: NOME_PESSOA.

Entretanto, quando é utilizado mais de uma palavra para o alias, e a separação dessas palavras é realizada por espaços, é necessário usar as aspas para conter o nome do alias e a palavra AS entre o nome da coluna e o nome do alias. Veja:

SELECT nome_coluna AS "nome temporario alias"
  FROM nome_tabela;

Observação: em alguns bancos de dados (DB) os colchetes [ ] são utilizados em vez das aspas.

Quando o alias é aplicado na tabela, não é recomendado utilizar a separação por espaços, pois acaba dificultando a leitura do código, veja o comparativo:

Alias sem espaços:
SELECT TAB_1.nome_coluna COL_1
  FROM nome_tabela TAB_1;

Alias com espaços:
SELECT "TAB 1".nome_coluna AS "COL 1"
  FROM nome_tabela AS "TAB 1";

Note que no exemplo anterior está sendo somente utilizado somente uma coluna e uma tabela, quando usado mais de uma tabela e vários campos, as aspas começam a poluir o código, veja:

    SELECT "TAB 1".nome_coluna AS "COL 1"
      FROM nome_tabela_um   AS "TAB 1"
INNER JOIN nome_tabela_dois AS "TAB 2"
        ON "TAB 1".nome_coluna = "TAB 2".nome_coluna;

Então, não é somente aplicar nomes que facilitam a leitura, é necessário avaliar a necessidade real de aplicar um alias em uma coluna ou tabela. Segue abaixo uma das formas de aplicar o alias na tabela e coluna para "limpar" o exemplo de código anterior.

    SELECT A.nome_coluna AS COL_1
      FROM nome_tabela_um   A
INNER JOIN nome_tabela_dois B
        ON A.nome_coluna = B.nome_coluna;

Os alias também podem ser aplicados para funções, exemplo:

SELECT SUM(nome_coluna) somatorio
     , AVG(nome_colunamedia
  FROM nome_tabela;

Assim, tenha cuidado quando utilizar alias nas instruções SQL, eles possuem o objetivo de facilitar a leitura da instrução SQL, porém quando não aplicado da forma correta torna difícil a leitura do código SQL, consequentemente a manutenção do código também.

Consultar a relação de Termos e Abreviaturas acesse aqui.
Felipe Barbosa Ferreira
Até o próximo post!

sábado, 8 de outubro de 2016

Count( ) - Quantificar registros

Olá!

A função Count( ) tem o objetivo de mensurar a quantidade de registros que estão cadastrados em uma tabela, ou também para avaliar quantos registros se encontram em uma determinada condição.

Sintaxe:
SELECT COUNT(*) FROM nome_tabela;

Deste modo a função Count() retornará a quantidade de registros cadastrados na tabela. Para os exemplos a seguir considerar a tabela abaixo:

PESSOA
CD_PESSOANOMESOBRENOMEIDADE
1FelipeBarbosa23
2AnaVieira20
3JoãoHavana19
4AlineBarbosa21
5MairaVieira25
6AnaHavana19
7AlineHavana22

Exemplos para totalizar a quantidade de registros da tabela PESSOA:

1) - Todos registros na tabela PESSOA.
SELECT COUNT(*)
  FROM PESSOA;

Resultado: 7 registros

2) - Desconsiderar registros que possuam valor nulo, sintaxe: SELECT COUNT(nome_campo) FROM nome_tabela.
SELECT COUNT(NOME)
  FROM PESSOA;


Resultado: 7 registros

Note que é o mesmo valor do exemplo 1, pois no campo NOME não há valores nulos

3)- Desconsiderar registros com o mesmo valor.
SELECT COUNT(DISTINCT NOME)
  FROM PESSOA;


Resultado: 5 registros


4) - Totalizar a quantidade nomes cadastrados para cada sobrenome.
  SELECT SOBRENOME
       , COUNT(*) AS QT_NOMES
    FROM PESSOA
GROUP BY SOBRENOME;

Resultado: 
SOBRENOMEQT_NOMES
Barbosa2
Vieira2
Havana3

Estes foram exemplos simples da utilização do COUNT( ), com está função há variadas formas de quantificar os registros de uma tabela. A totalização do número de pessoas que habita cada estado de um país pode ser considerada um exemplo vivido da utilização desta função.

Consultar a relação de Termos e Abreviaturas acesse aqui.
Felipe Barbosa Ferreira
Até o próximo post!

quinta-feira, 29 de setembro de 2016

Group By - Agrupar registros

Olá!

O comando Group By tem o objetivo de realizar o agrupamento dos registros de uma consulta, sendo que primeiramente é realizado a seleção dos registros da tabela e depois é aplicado o agrupamento no resultado da consulta.

Sintaxe: GROUP BY campo(s)_presentes_no_select

Note que os campos mencionados no GROUP BY são todos os campos presentes no SELECT.

Tabela para os exemplos:
PESSOA
CD_PESSOANOMESOBRENOMEIDADE
1FelipeBarbosa23
2AnaVieira20
3JoãoBarbosa19
4AlineBarbosa21
5MairaFerreira25
6AnaHavana19
7AlineFerreira22

Exemplo de consulta com o Group By:
  SELECT NOME
    FROM PESSOA
   WHERE IDADE > 18
GROUP BY NOME;

Resultado:
Resposta da execução do SQL
1º aplicação do Where2º aplicação do Group By
FelipeFelipe
AnaAna
JoãoJoão
AlineAline
MairaMaira
Ana
Aline

Como o agrupamento é realizado na resposta da consulta, repare que as linhas que possuem o mesmo valor não são apresentadas em registros diferentes, e isso não significa que elas foram descartadas. O que acontece é que foram agrupadas em um único registro.

Outro exemplo de consulta com o Group By:
  SELECT NOME
       , SOBRENOME
    FROM PESSOA
   WHERE IDADE > 18
GROUP BY NOME
       , SOBRENOME;

Resultado:
Resposta da execução do SQL
NOMESOBRENOME
FelipeBarbosa
JoãoBarbosa
AlineBarbosa
AnaVieira
MairaFerreira
AlineFerreira
AnaHavana

OK! Mas para o primeiro exemplo, poderíamos ter utilizado o Distinct, e para o segundo exemplo o Order By?

Sim, o resultado visual seria o mesmo. Entretanto, com Distinct os registros que possuem o mesmo valor são desprezados totalmente, e com o Order By os registros seriam agrupados somente em efeito visual. 

Assim, é necessário avaliar o objetivo da consulta, pois na maioria das vezes o Group By é utilizado quando ocorre o questionamento de quantidade sobre um determinado grupo de informações, ou a necessidade de utilizar uma função agregada.

Exemplo: Quantos nomes cada sobrenome possui, ou seja, quantos nomes há cadastrados para o sobrenome Barbosa, Vieira, Ferreira e Havana? Para responder essa questão, é necessário elaborar um SQL agrupado pelo sobrenome e uma função para realizar a contagem (Count( ) no próximo post).

Então, podemos dizer que o SQL que contém o comando Group By tem dois passos de execução, o primeiro é agrupar os registros em conjuntos, e o segundo é agrupar os registros desses conjuntos que possuem valores iguais em um único registro, veja o fluxo abaixo para o questionamento anterior sobre a quantidade de nomes para cada sobrenome:

Fluxo da execução do SQL
1º passo de execução2º passo de execuçãoResultado Final
SOBRENOMEContadorSOBRENOMEContadorSOBRENOMEContador
Barbosa1Barbosa1 + 1 + 1Barbosa3
Barbosa1  Barbosa1Vieira1
Barbosa1  Barbosa1Ferreira2
Vieira1Vieira1Havana1
Ferreira1Ferreira1 + 1
Ferreira1  Ferreira1
Havana1Havana1

Note que no primeiro passo de execução os registros são agrupados em conjuntos, e no segundo passo de execução os registros que possuem o mesmo valor são agrupados em uma linha. O resultado final indica que temos 3 nomes para o sobrenome Barbosa, 2 nomes para o sobrenome Ferreira, 1 nome para o sobrenome Vieira e Havana.

Consultar a relação de Termos e Abreviaturas acesse aqui.
Felipe Barbosa Ferreira
Até o próximo post!

domingo, 18 de setembro de 2016

Operador Between

Olá!

Com o operador Between podemos realizar uma consulta no banco de dados (DB) que retorne as informações dos registros que estejam em um intervalo, ou seja, entre o valor-A e o valor-B, de modo que o valor-A é o início do intervalo e o valor-B é o fim do intervalo.

Sintaxe:
expressão BETWEEN valor-A AND valor-B

Onde:
  • expressão: pode ser um campo da tabela, ou o resultado de um sub-select, ou outro conjunto de valores;
  • valor-A: valor de início do intervalo
  • valor-B: valor de fim do intervalo
Sendo que valor-A e valor-B estão inclusos na análise dos dados, e também eles devem possuir o mesmo tipo de dado da expressão.

Para os exemplos considerar a tabela abaixo:
PESSOA
CD_PESSOANOMESOBRENOMEIDADE
1FelipeBarbosa23
2AnaVieira20
3JoãoSantos19
4AlineSilva21
5MairaDantas25
6AnaHavana19
7AlineFerreira22

Exemplo de instrução SQL com Between:
SELECT NOME
  FROM PESSOA
 WHERE IDADE BETWEEN 19 
                 AND 22;

Resultado:
Ana
João
Aline
Ana
Aline

Também é possível realizar a comparação com caracteres, datas e outros tipos de dados, veja:
SELECT NOME
  FROM PESSOA
 WHERE SOBRENOME BETWEEN 'A' 
                     AND 'D';

Resultado:
Felipe
Maira

O operador Between possui o comando NOT como opcional, e quando utilizado é desprezado todos os registros que se encontram dentro do intervalo determinado, exemplo:
SELECT NOME
  FROM PESSOA
 WHERE SOBRENOME NOT BETWEEN 'A' 
                         AND 'D';

Resultado:
Ana
João
Aline
Ana
Aline

Em comparação aos operadores relacionais o Between é equivalente ao  => e =<.

Enfim, lembre-se que os valores que estão sendo comparados devem possuir o mesmo tipo de dado, e que os valores de início e fim estão contidos na resposta da instrução do SQL.

Consultar a relação de Termos e Abreviaturas acesse aqui.
Felipe Barbosa Ferreira
Até o próximo post!