sexta-feira, 10 de julho de 2015

SQL - Comandos de manipulação da estrutura das tabela e do Banco de Dados.

Esse post é um tutorial simples sobre comandos SQL de manipulação da estrutura da nossa Base de Dados, ele tem como intuito ensinar a como realizar as alterações que muitos programadores fazem através dos objetos do banco de dados através de comandos em SQL.

Atenção: este post não tem o foco de melhores práticas, normalização etc. por isso, iremos realizar as manipulações com apenas uma tabela.
**** Fiquem bem atentos quando forem aplicar, e só façam mesmo quando tiver certeza pois os comando a seguir são irreversíveis. ****


CREATE DATABASE


Esse comando irá criar a nossa Base de Dados para que nela seja criadas as tabelas.

Seleção 1 - Criando a Base de Dados.
CREATE DATABASE TESTES;

DROP DATABASE


Esse comando irá apagar a nossa Base de Dados por completo do servidor, ou seja todas as suas tabelas e registro serão apagados também.

Seleção 2 - Apagando a Base de Dados por completo do servidor de Banco de Dados.
DROP DATABASE TESTES;

CREATE TABLE


Esse comando irá criar a tabela "tabtestes" na nossa Base de Dados com os campos "Nome" e "Cidade".

Seleção 3 - Criando as tabelas.
CREATE TABLE tabtestes(
    Nome  varchar(50)  NULL,
    Cidade  varchar(50) NULL 
)

DROP TABLE


Esse comando irá apagar por completo uma tabela da nossa Base de Dados e consequentemente todos os seus registros.

Seleção 4 - Excluindo tabelas.
DROP TABLE tabtestes;

ALTER TABLE


Esse comando pode ser utilizado para várias funções:
  • Para incluir um novo campo numa tabela já existente.
  • Alterar o tipo do campo numa tabela existente.
  • Apagar um campo (não um registro) numa tabela existente.
  • Alterar o campo entre NULL e NOT NULL.


Seleção 5 - Incluíndo campos numa tabela já existente.
ALTER TABLE tabtestes ADD CEP VARCHAR(50);
Seleção 6 - Alterar o tipo do campo numa tabela já existente.
ALTER TABLE tabtestes ALTER COLUMN Nome VARCHAR(100);
Seleção 7 - Apagando o campo da tabela.
ALTER TABLE tabtestes DROP COLUMN CEP;
Seleção 8 - Alterar o tipo do campo numa tabela já existente.
ALTER TABLE tabtestes ALTER COLUMN Cidade VARCHAR(100) NOT NULL;
ALTER TABLE tabtestes ALTER COLUMN Cidade VARCHAR(100) NULL;

Conclusão


Esses foram mais alguns comandos importantíssimos no desenvolvimento de profissionais que vão atuar como programadores ou administradores de banco de dados.

Fiquem atentos e vamos para os estudos!!
Se tiverem alguma dúvida ou sugestões de novos posts favor me avise pelo Facebook ou então deixando seu comentário no blog.

sexta-feira, 3 de julho de 2015

#2 Tutorial Android - Criando duas activitys e passando dados de uma para outra

Fontes

activity_main.xml
<RelativeLayout
    xmlns:android= "http://schemas.android.com/apk/res/android"
    xmlns:tools= "http://schemas.android.com/tools" 
    android:layout_width= "match_parent"
    android:layout_height= "match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight= "@dimen/activity_horizontal_margin"
    android:paddingTop= "@dimen/activity_vertical_margin"
    android:paddingBottom= "@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <TextView 
        android: text="@string/lbNome"
        android: layout_width="wrap_content"
        android: layout_height="wrap_content"
        android: id="@+id/textView" />

    <EditText
        android: layout_width="500px"
        android: layout_height="wrap_content"
        android: id="@+id/txtNome"
        android: layout_below="@+id/textView"
        android: layout_alignParentStart="true" />

    <Button
        android: layout_width="wrap_content"
        android: layout_height="wrap_content"
        android: text="@string/btnOk"
        android: id="@+id/btnOk"
        android: layout_centerVertical="true"
        android: layout_alignEnd="@+id/txtNome" />

    <TextView
        android: text="@string/lbSobreNome"
        android: layout_width="wrap_content"
        android: layout_height="wrap_content"
        android: id="@+id/textView2"
        android: layout_below="@+id/txtNome"
        android: layout_alignParentStart="true"
        android: layout_marginTop="47dp" />

    <EditText
        android: layout_width="500px"
        android: layout_height="wrap_content"
        android: id="@+id/txtSobrenome"
        android: layout_alignParentStart="true"
        android: layout_below="@+id/textView2"
        android: layout_alignParentLeft="true" />


</RelativeLayout>

	
MainActivity.java
package com.infoplace.helloworld;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;


public class  MainActivity extends  Activity {

    private Button BtnOk;
    private EditText txtNome, txtSobreNome;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        BtnOk = (Button) findViewById(R.id.btnOk);
        txtNome = (EditText) findViewById(R.id.txtNome);
        txtSobreNome = (EditText) findViewById(R.id.txtSobrenome);

        BtnOk.setOnClickListener(new  View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Toast.makeText(MainActivity.this, "Nome: " + txtNome.getText() + "   Sobre Nome: " + txtSobreNome.getText(), Toast.LENGTH_SHORT).show();
                Intent it = new Intent(MainActivity.this, ActivityRecebe.class);
                Bundle params = new Bundle();
                params.putString("nome", txtNome.getText().toString());
                params.putString("sobrenome", txtSobreNome.getText().toString());
                it.putExtras(params);
                startActivity(it);
                finish();
            }
        });

    }

    @Override
    public boolean  onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}


	
activity_activity_recebe.xml
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="com.infoplace.helloworld.ActivityRecebe">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Text"
        android:textSize="50dp"
        android:textColor="@color/azulEscuro"
        android:id="@+id/lbNome"
        android:layout_alignParentTop="true"
        android:layout_alignParentStart="true" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Text"
        android:textColor="@color/vermelho"
        android:textSize="50dp"
        android:id="@+id/lbSobreNome"
        android:layout_below="@+id/lbNome"
        android:layout_alignParentStart="true"
        android:layout_marginTop="47dp" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Button"
        android:id="@+id/button"
        android:layout_centerVertical="true"
        android:layout_alignParentStart="true" />

</RelativeLayout>
	
ActivityRecebe.java
package com.infoplace.helloworld;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;


public class ActivityRecebe extends Activity {

    private TextView lbNome, lbSobreNome;
    private Button btnFechar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_activity_recebe);

        lbNome = (TextView) findViewById(R.id.lbNome);
        lbSobreNome = (TextView) findViewById(R.id.lbSobreNome);
        btnFechar = (Button) findViewById(R.id.button);

        Intent it = getIntent();
        Bundle params = new Bundle();
        params = it.getExtras();

        if (params != null){
            lbNome.setText(params.getString("nome"));
            lbSobreNome.setText(params.getString("sobrenome"));
        }

        btnFechar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_activity_recebe, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

	
Essa foi mais um vídeo aula seguindo o projeto de Android. Espero que gostem e principalmente entendam!

Fiquem atentos e vamos para os estudos!! Se tiverem alguma dúvida ou sugestões de novos posts favor me avise pelo Facebook ou então deixando seu comentário no blog.

segunda-feira, 29 de junho de 2015

SQL Joins: Entenda como funciona o retorno dos dados

Muitos programadores têm a dificuldade de saber qual resultado é retornado de cada join no SQL. Por conta disso, esse post foi feito com base em estudos e consultas na prática. A Figura 1 vai nos ajudar a entender os resultados obtidos de cada join.
Figura 1 - Joins em SQL.
Em cima dessa figura, vamos criar a estrutura e realizar as consultas usando cada join.

Para isso, o primeiro passo é criar as tabelas A e B, conforme mostra o código da Seleção 1.

Mas atenção: este post não tem o foco de melhores práticas, normalização etc. por isso, serão criadas apenas duas tabelas simples com apenas um campo chamado nome para visualizar o resultado de cada join.

Seleção 1 - Criando as tabelas.

CREATE TABLE TabelaA(
Nome varchar(50) NULL
)
GO
CREATE TABLE TabelaB(
Nome varchar(50) NULL
)


Já o segundo passo inclui a inserção de valores nas tabelas A e B. A Seleção 2 exibe os valores que serão incluídos nas tabelas A e B.

Seleção 2 - Inclusão de dados nas tabelas.

INSERT INTO TabelaA VALUES('Willian')
INSERT INTO TabelaA VALUES('Pamela')
INSERT INTO TabelaA VALUES('Alfredo')
INSERT INTO TabelaA VALUES('Carlos')

INSERT INTO TabelaB VALUES('Pamela')
INSERT INTO TabelaB VALUES('Tiago')
INSERT INTO TabelaB VALUES('Jefferson')
INSERT INTO TabelaB VALUES('Alfredo')



Vamos analisar cada um dos joins.

Inner Join

Usando o inner join, conforme mostra a Figura 2, teremos como resultado todos os registros comuns nas duas tabelas









Figura 2 - Usando Inner Join.

Para isso executaremos os comandos presentes na Seleção 3.

Seleção 3 - Usando Inner Join

SELECT a.Nome, b.Nome
FROM TabelaA as A
INNER JOIN TabelaB as B
on a.Nome = b.Nome


Na prática, o resultado será conforme a Figura 3.

Retorno do Inner Join















Figura 3 - Retorno do Inner Join.

Left Join



Usando o Left Join, conforme mostra a Figura 4, teremos como resultado todos os registros que estão na tabela A (mesmo que não estejam na tabela B) e os registros da tabela B que são comuns na tabela A. Para entender melhor, executaremos o código presente na Seleção 4.









 Figura 4 - Usando Left Join

Seleção 4 - Usando Left Join

SELECT a.Nome, b.Nome
FROM TabelaA as A
LEFT JOIN TabelaB as B
on a.Nome = b.Nome


E na prática o resultado será conforme a Figura 5.
















Figura 5 - Retorno do Left Join.

Right Join



Usando o Right Join, conforme mostra a Figura 6, teremos como resultado todos os registros que estão na tabela B (mesmo que não estejam na tabela A) e os registros da tabela A que são comuns na tabela B. Para vermos isso na prática, executaremos os comandos da Seleção 5.









Figura 6 - Usando Right Join

Seleção 5 -Usando Right Join

SELECT a.Nome, b.Nome
FROM TabelaA as A
RIGHT JOIN TabelaB as B
on a.Nome = b.Nome


O resultado desses comando será o mesmo apresentado na Figura 7.

















Figura 7 - Retorno do Right Join.

Outer Join


Usando o Outer Join (conhecido por Full Outer Join ou Full Join), conforme mostra a Figura 8, teremos como resultado todos os registros que estão na tabela A e todos os registros da tabela B. Na prática, você deve executar os mesmos comando presentes na Seleção 6.









Figura 8 - Usando Full Outer Join e Full Join

Seleção 6 -Usando Full Outer Join ou Full Join

SELECT a.Nome, b.Nome
FROM TabelaA as A
FULL OUTER JOIN TabelaB as B
on a.Nome = b.Nome

SELECT a.Nome, b.Nome
FROM TabelaA as A
FULL JOIN TabelaB as B
on a.Nome = b.Nome


E na prática o resultado será conforme a Figura 9.





















Figura 9 - Retorno do Full Outer Join ou Full Join

Left Excluding Join



Na Figura 10 temos o uso do Left Excluding Join, que retorna como resultado todos os registros que estão na tabela A e que não estejam na tabela B. Os comandos desses join estão presentes na Seleção 7 e o resultado desses comandos são apresentados na Figura 11.









Figura 10 - Usando Left Excluding Join

Seleção 7 - Usando Left Excluding Join

SELECT a.Nome, b.Nome
FROM TabelaA as A
LEFT JOIN TabelaB as B
on a.Nome = b.Nome
WHERE b.Nome is null
















Figura 11 - Retorno do Left Excluding Join

Right Excluding Join



Usando o Right Excluding Join, conforme mostra a Figura 12, teremos como resultado todos os registros que estão na tabela B e que não estejam na tabela A. Para vermos isso na prática, precisamos executar os comandos da Seleção 8. Como resultado, teremos os mesmos registros retornados na Figura 13.









Figura 12 - Usando Right Excluding Join.

Seleção 8 - Usando Right Excluding Join.

SELECT a.Nome, b.Nome
FROM TabelaA as A
RIGHT JOIN TabelaB as B
on a.Nome = b.Nome
WHERE a.Nome is null
















Figura 13 - Retorno do Right Excluding Join.

Outer Excluding Join



Usando o Outer Excluding Join, conforme mostra a Figura 14, teremos como resultado todos os registros que estão na tabela B (que não estejam na tabela A) e todos os registros que estão na tabela A (que não estejam na tabela B).









Figura 14 - Usando Outer Excluding Join

Para isso, executaremos o comando da Seleção 9.

Seleção 9 - Usando Outer Excluding Join

SELECT a.Nome, b.Nome
FROM TabelaA as A
FULL OUTER JOIN TabelaB as B
on a.Nome = b.Nome
WHERE a.Nome is null or b.Nome is null

SELECT a.Nome, b.Nome
FROM TabelaA as A
FULL JOIN TabelaB as B
on a.Nome = b.Nome
WHERE a.Nome is null or b.Nome is null


E na prática o resultado será conforme a Figura 15.























Figura 15 - Retorno do Outer Excluding Join

Conclusão



Esses foram mais alguns comandos importantíssimos no desenvolvimento de profissionais que vão atuar como programadores ou administradores de banco de dados.

Fiquem atentos e vamos para os estudos!!
Se tiverem alguma dúvida ou sugestões de novos posts favor me avise pelo Facebook ou então deixando seu comentário no blog.

Comandos SQL Avançados

Bom galera continuando nosso tutorial de SQL a partir dos comandos SQL Básicos estou postando agora os comandos mais avançados em SQL, espero que gostem!

Trabalhando com Funções


NVL



A função NVL é utilizada para substituir O código abaixo apenas para exibição. o valor nulo do campo pesquisado por outro valor determinado.

O código abaixo seleciona o campo punit dos registros da tabela pcmov, atribuindo valor 0 se for nulo.

Seleção 1: NVL

select nvl(punit,0) FROM pcmov

NVL2



A função NVL2 é utilizada para substituir O código abaixo apenas para exibição. o valor do campo, sendo este nulo ou não.

O código abaixo seleciona o campo vpago dos registros da tabela pcprest, atribuindo valor 0 se NÃO for nulo, e atribuindo 2 se for nulo.

Seleção 2: NVL2

select nvl2(vpago,0,2) FROM pcprest

NULLIF



A função NULLIF compara dois valores. Se os valores forem iguais, a função retornará valor nulo. Se os valores dos campos valor e vpago forem iguais, a função retornará valor nulo. Se os valores desses campos forem diferentes, a função retornará o primeiro valor.

Seleção 3: NULLIF

select valor, vpago, nullif(valor, vpago) FROM pcprest;

COALESCE



A função COALESCE verifica os valores da expressão e retorna o primeiro valor não nulo.

O código abaixo seleciona dos registros da tabela pcprest, dentre os campos vldesconto, vpago e valor o primeiro que apresentar valor não nulo.

Seleção 4: Usando a função COALESCE

select coalesce(vldesconto, vpago, valor) FROM pcprest;

DECODE



A função Decode tem como objetivo ‘decodificar’ o valor do campo selecionado, atribuindo um valor de resposta para cada valor de condição estipulado.

O código abaixo mostra como selecionar dos registros da tabela pcmov o campo numnota, e exibe mensagem de acordo com as condições: se o campo numnota for igual a 100, exibe ‘CEM’, se for 200, exibe ‘DUZENTOS’, se for 300, exibe ‘TREZENTOS’, se não for nenhum dos anteriores, exibe ‘NENHUM’.

Seleção 5: Usando função decode

select numnota, decode(numnota, 100, ‘CEM’, 200, ‘DUZENTOS’, 300, ‘TREZENTOS’, ‘NENHUM’) resultado FROM pcmov;

CASE



A função CASE é utilizada para determinar a exibição do resultado a partir de condições especificadas dentro da função.

O código abaixo seleciona dos registros da tabela pcmov o campo numnota, e exibe mensagem de acordo com as condições: caso o campo numnota seja menor que 100, exibe a mensagem ‘MENOR QUE 100’, caso o campo numnota esteja entre 101 e 200, exibe a mensagem ‘ENTRE 101 E 200’, caso contrário, exibe a mensagem ‘MAIOR QUE 200’.

Seleção 6: Usando Case

select numnota, case when numnota < 100 then ‘MENOR QUE 100’
when numnota between 101 and 200 then ‘ENTRE 101 E 200’
else ‘MAIOR QUE 200’ end “RESULTADO”
FROM pcmov;


Obs.: Para melhor entendimento da função: para todo ‘case’ deve existir um ‘end’, e para todo ‘when’ deve existir um ‘then’. O ‘else’ existe sozinho, como última alternativa da função.

LOWER



O código abaixo seleciona dos registros da tabela pcempr os campos matricula e nome, convertendo o conteúdo do campo nome para que seja exibido todo em caracterees minúsculos.

Seleção 7: Usando função Lower

select matricula, lower(nome) FROM pcempr;

UPPER



O código abaixo seleciona dos registros da tabela pcempr os campos matricula e nome, convertendo o conteúdo do campo nome para que seja exibido todo em caracterees maiúsculos.

Seleção 8: Usando função Upper

select matricula, upper(nome) FROM pcempr;

INITCAP



O código abaixo seleciona dos registros da tabela pcempr os campos matricula e nome, convertendo o conteúdo do campo nome para que seja exibido com as iniciais em caracterees maiúsculos.

Seleção 9: Usando função initcap

select matricula, initcap(nome) FROM pcempr;

SUBSTR



A função SUBSTR tem como objetivo extrair parte do conteúdo do campo selecionado, de acordo com os parâmetros informados na função, independente do tipo do campo (numérico, texto ou data).

O código abaixo seleciona dos registros da tabela pcempr os campos matricula e nome, exibindo, do campo nome, apenas o conteúdo a partir do primeiro caractere, os próximos 5 caracterees.

Seleção 10: Usando Substr

select matricula, substr(nome,1,5) FROM pcempr;

LENGTH



A função LENGTH tem como objetivo exibir o tamanho do valor que está gravado no campo selecionado.

O código abaixo seleciona dos registros da tabela pcempr os campos matricula e nome, e exibe, logo em seguida, o tamanho do conteúdo do campo nome.

Seleção 11: Usando Length

select matricula, nome, length()FROM pcempr;

REPLACE



A função REPLACE tem como objetivo possibilitar a substituição de caracteres específicos por outros.

O código abaixo seleciona dos registros da tabela pcempr os campos matricula e nome, e exibe, logo em seguida, o campo nome, substituindo o caractere ‘A’ por ‘*’.

Seleção 12: Usando replace

select matricula, nome, replace(nome,'A','*') FROM pcempr;

Obs.: Podem ser substituídos 1 caracteree por vários, vários caracterees por 1, vários por vários, ou até mesmo 1 ou vários por nenhum caracteree. Para substituir por nenhum caractere, basta abrir e fechar as aspas simples, não informando nenhum valor.

ROUND



A função ROUND tem como objetivo efetuar o arredondamento de números para a quantidade de casas decimais determinada na função.

O código abaixo seleciona dos registros da tabela pctabpr os campos codprod, numregiao, ptabela, e exibe, logo em seguida, o campo ptabela com seu valor arredondado para 2 casas decimais.

Seleção 13: Usando Round

select codprod, numregiao, ptabela, roundO(ptabela,2) FROM pctabpr;

TRUNC



A função TRUNC tem como objetivo efetuar o truncamento(corte) de números para a quantidade de casas determinada na função.

O código abaixo seleciona dos registros da tabela pctabpr os campos codprod, numregiao, ptabela, e exibe, logo em seguida, o campo ptabela com seu valor truncado na segunda casa decimal.

Seleção 14: Usando função Trunc

select codprod, numregiao, ptabela, trunc(ptabela,2) FROM pctabpr;

MOD



A função MOD tem como objetivo exibir o resto da divisão de um valor por outro.

O código abaixo seleciona dos registros ds tabela pcprest, o resto da divisão do campo valor por 2.

Seleção 15: Usando MOD

select mod(valor,2) FROM pcprest;

Obs.: para facilitar o entendimento desta função, recomendamos utilizar a seleção da divisão informada, com truncamento para nenhuma casa decimal.

Exemplo: select trunc(( valor/2),0) FROM pcprest;

Trabalhando com Datas

Função SYSDATE



O código abaixo seleciona a data do sistema.

Seleção 16: Selecionando data do sistema com Sysdate

select sysdate FROM dual;

Aritmética com Datas



O código abaixo seleciona a data do sistema adicionando 2 dias.

Seleção 17: Adicionando dias

select sysdate+2 FROM dual;

O código abaixo seleciona a data do sistema subtraindo 2 dias.

Seleção 18: Subtraindo dias

select sysdate-2 FROM dual;

O código abaixo seleciona dos registros da tabela pcnfsaid os campos numnota, dtsaida, dtentrega, e exibe, logo em seguida, a diferença entre os campos dtentrega e dtsaida, apelidando o campo com o nome de ‘diferenca’.

Seleção 19: Diferença entre datas

select numnota, dtsaida, dtentrega, dtentrega-dtsaida diferenca FROM pcnfsaid;

Funções de Conversão



O código abaixo seleciona dos registros da tabela pcmov os campos dtmov e numnota e, logo em seguida, o campo numnota sendo convertido para caractere, no formato de 6 dígitos.

Seleção 20: NUMBER to VARCHAR

select dtmov, numnota, to_char(numnota,'000000') FROM pcmov;

O código abaixo seleciona dos registros da tabela pcmov os campos dtmov e numnota e, logo em seguida, o campo dtmov sendo convertido para caractere, no formato ‘dd/mm’.

Seleção 21: DATE to VARCHAR

select dtmov, numnota, to_char(dtmov,'dd/mm') FROM pcmov;

Elementos para formatação de data



  • YYYY é ano completo em números
  • YEAR é ano escrito por extenso
  • MM é mês em dois dígitos
  • MONTH é mês escrito por extenso
  • MON é mês escrito com as 3 primeiras letras iniciais
  • DY é dia escrito com a abreviação em 3 letras
  • DAY é dia escrito por extenso
  • DD é dia em dois dígitos
  • D é dia da semana O código abaixo de 1 a 7.
  • DDD é dia do ano O código abaixo de 1 a 356.
  • WW é número da semana dentro do ano
  • W é número da semana dentro do mês

Funções de Grupo (AVG, COUNT, MAX, MIN, SUM)



AVG



A função AVG tem como finalidade efetuar o cálculo de média simples do campo informado na função. O código abaixo seleciona a média dos valores do campo vltotal dos registros da tabela pcnfsaid.

Seleção 22: Usando função AVG

select avg(vltotal) FROM pcnfsaid;

COUNT



A função COUNT tem como finalidade efetuar a contagem do campo informado na função.

O código abaixo efetua contagem do campo numnota dos registros da tabela pcnfsaid.

Seleção 23: Usando função Count

select count(numnota) FROM pcnfsaid;

MAX



A função MAX tem como finalidade exibir o maior valor encontrado no campo informado na função.

O código abaixo seleciona o maior valor encontrado no campo vltotal dentre todos os registros da tabela pcnfsaid.

Seleção 24: Usando função MAX

select max(vltotal) FROM pcnfsaid;

MIN



Assim como acontece na função MAX, a função MIN faz exatamente o inverso, ou seja, exibe o menor valor encontrado no campo informado na função.

O código abaixo seleciona o menor valor encontrado no campo vltotal dentre todos os registros da tabela pcnfsaid.

Seleção 25: Usando função MIN

select min(vltotal) FROM pcnfsaid;

SUM



A função SUM tem como finalidade efetuar a soma dos valores do campo informado na função.

O código abaixo seleciona a soma dos valores do campo vltotal de todos os registros da tabela pcnfsaid.

Seleção 26: Usando função SUM

select sum(vltotal) FROM pcnfsaid;

GROUP BY



Sempre que algumas das funções de grupo citadas no item 6 for utilizada, e também forem selecionados campos ‘puros’ das tabelas utilizadas, é necessário utilizar a expressão ‘GROUP BY ’ para determinar o agrupamento das informações que serão exibidas.

O código abaixo seleciona dos registros da tabela pcmov os campos dtmov, codprod, a soma do campo qt, onde o campo codprod for 0 ou 1, agrupando as informações pelos campos codprod e dtmov.

Seleção 27: Usando GROUP BY

select dtmov, codprod, sum( qt)
FROM pcmov WHERE codprod in (0,1)
GROUP BY codprod, dtmov;


Relacionamento entre tabelas



Em boa parte das pesquisas de dados, pode ser necessário exibir informações de campos existentes em mais de uma tabela. Para que isso seja possível, é necessário determinar a junção/relacionamento que será empregada nas tabelas que estão sendo utilizadas.

O código abaixo seleciona os campos codcli[pcnfsaid], cliente[pcclient] e numnota[pcnfsaid], dos registros das tabelas pcnfsaid e pcclient, onde o valor do campo codcli da tabela pcnfsaid for igual ao valor do campo codcli da tabela pcclient. Os resultados serão exibidos apenas se essa condição for obedecida.

Seleção 28: Relacionamento entre tabelas

select pcnfsaid.codcli, pcclient.cliente, pcnfsaid.numnota
FROM pcnfsaid, pcclient
WHERE pcnfsaid.codcli = pccleint.codcli;


O código abaixo seleciona os campos codcli[pcnfsaid], cliente[pcclient] e numnota[pcnfsaid], dos registros das tabelas pcnfsaid e pcclient, onde o valor do campo codcli da tabela pcnfsaid for igual ao valor do campo codcli da tabela pcclient. Caso os valores dos campos não sejam iguais, as informações solicitadas da tabela pcnfsaid serão exibidas, e os campos da tabela pcclient serão exibidos em branco.

Seleção 29: Exibindo resultados apenas se a condição for obedecida

select pcnfsaid.codcli, pcclient.cliente, pcnfsaid.numnota
FROM pcnfsaid, pcclient
WHERE codcli = codcli (+);


O código abaixo seleciona os campos codusur[pcnfsaid], nome[pcusuari], codsupervisor[pcusuari] e nome[pcsuperv], dos registros das tabelas pcnfsaid, pcusuari e pcsuperv, onde o valor do campo codusur da tabela pcnfsaid for igual ao valor do campo codusur da tabela pcusuari, e o valor do campo codsupervisor da tabela pcusuari for igual ao valor do campo codsupervisor da tabela pcsuperv. Os resultados serão exibidos apenas se ambas as condições forem obedecidas.

Seleção 30: Exibindo campos em branco

select pcnfsaid.codusur, pcusuari.nome, pcusuari.codsupervisor, pcsuperv.nome
FROM pcnfsaid, pcusuari, pcsuperv
WHERE pcnfsaid.codusur = pcusuari.codusur
and pcusuari.codsupervisor = pcsuperv.codsupervisor;


O código abaixo seleciona os campos codusur[pcnfsaid], nome[pcusuari], codsupervisor[pcusuari] e nome[pcsuperv], dos registros das tabelas pcnfsaid, pcusuari e pcsuperv, onde o valor do campo codusur da tabela pcnfsaid for igual ao valor do campo codusur da tabela pcusuari, e o valor do campo codsupervisor da tabela pcusuari for igual ao valor do campo codsupervisor da tabela pcsuperv. Caso os valores dos campos codsupervisor[pcusuari] e codsupervisor[pcsuperv] não forem iguais, as demais informações serão exibidas normalmente, porém, as informações da tabela pcsuperv não serão exibidas.

Seleção 31: Exemplo de relacionamento

select pcnfsaid.codusur, pcusuari.nome, pcusuari.codsupervisor, pcsuperv.nome
FROM pcnfsaid, pcusuari, pcsuperv
WHERE pcnfsaid.codusur = pcusuari.codusur
and pcusuari.codsupervisor = pcsuperv.codsupervisor( +);


Cláusula HAVING



A cláusula HAVING tem funcionamento muito parecido ao funcionamento das cláusulas de restrição WHERE, porém, com uma grande diferença. Enquanto a cláusula WHERE é utilizada para efetuar restrições de informações baseadas em campos das tabelas, a cláusula HAVING é utilizada para efetuar restrições de informações baseadas em resultados das funções de grupo (SUM, AVG, MAX, MIN e COUNT).

O código abaixo seleciona dos registros da tabela pcnfsaid os campos codcli e a soma do campo vltotal, agrupando as informações pelo campo codcli.

As informações só serão exibidas se o valor da soma do campo vltotal for maior que 10000.

Seleção 32: Usando Having

select codcli, sum(vltotal)
FROM pcnfsaid
GROUP BY codcli
having sum(vltotal) > 10000;


Sub-select’s



Como o próprio nome diz, sub-select’s são select’s que podem ser utilizados dentro de um select maior, com o objetivo de auxiliar na extração de dados, seja através da consulta de uma nova informação, ou através da utilização de seus resultados no processo de restrição de dados.

O código abaixo seleciona todos os campos dos registros da tabela pcprodut, onde o valor do campo codprod não existir na lista distinta de valores do campo codprod de todos os registros da tabela pcmov.

Seleção 33: Usando sub-selects

select * FROM pcprodut
WHERE codprod not in (select distinct(codprod) FROM pcmov);


Conclusão



Esses foram mais alguns comandos importantíssimos no desenvolvimento de profissionais que vão atuar como programadores ou administradores de banco de dados.

Fiquem atentos e vamos para os estudos!!
Se tiverem alguma dúvida ou sugestões de novos posts favor me avise pelo Facebookou então deixando seu comentário no blog.

quarta-feira, 24 de junho de 2015

Comandos SQL Básicos.

Bom galera resolvi inserir no blog os comandos SQL Básicos para aumentar o conhecimento de vocês sobre o assunto e para que quando chegarmos nessa etapa do tutorial em android vocês estejam experts.

Comando “select

O comando select é o “comando base” para todos os comandos de pesquisa de informações no banco de dados.

Seleção 1: Selecionando todas as colunas

select * from pcnfsaid;

O código acima seleciona todos os registros da tabela pcnfsaid, sem restrição de campos.

Seleção 2: Selecionando colunas específicas

select numnota, dtsaida, vltotal from pcnfsaid;

O código acima seleciona os campos numnota, dtsaida e vltotal de todos os registros da tabela pcnfsaid.
Usando operadores aritméticos (usando ou não parênteses)

O código abaixo seleciona os campos numnota, dtsaida, vltotal, vldesconto, calcula vltotal-vldesconto, colhendo informações de todos os registros da tabela pcnfsaid.

  • Regras de precedência: multiplicação(*), divisão(/), adição(+), subtração(-).
  • Multiplicação e divisão tem prioridade sobre adição e subtração.
  • Operadores de mesma prioridade são executados da esquerda para a direita.
  • Parênteses podem ser usados para forçar a prioridade dos cálculos e tornar o entendimento das fórmulas mais claro.


Seleção 3: Como usar operadores aritiméticos

select numnota, dtsaida, vltotal, vldesconto, vltotal-vldesconto from pcnfsaid;

Definindo apelido para campos selecionados

A atribuição de apelidos aos campos selecionados tem como objetivo facilitar o entendimento das informações exibidas nos resultados das pesquisas.

Existem 4 maneiras diferentes de se atribuir apelidos aos campos selecionados, são elas:

  • select codprod as codigo from pcprodut;
  • select codprod codigo from pcprodut;
  • select codprod as “Codigo do Produto” from pcprodut;
  • select codprod “Codigo do Produto” from pcprodut;


Observe que a única diferença entre os exemplos 1 e 2 é a utilização ou não do termo “as”. A utilização desse termo é opcional, e tem como objetivo melhorar o entendimento das seleções efetuadas. Esta diferença também pode ser observda entre os exemplos 3 e 4.

Observe que enquanto nos exemplos 1 e 2 os apelidos são escritos sem a utilização de aspas(“), os exemplos 3 e 4 fizeram a utilização desse caracter. A utilização de aspas(“) é necessária quando o apelido a ser atribuído contém espaços em branco.

Concatenar

O comando concatenar consiste em unificar as informações de dois campos distintos da tabela utilizada, de forma que sejam exibidas em apenas um campo. Também podem ser utilizadas strings que não sejam informações existentes nas tabelas.

O código abaixo seleciona o campo especie, concatenando com o campo seria, seleciona também o campo numnota, de todos os registros da tabela pcnfsaid.

Seleção 4: Exemplo de concatenação

select especie || serie, numnota from pcnfsaid;

O código abaixo mostra como concatenar a string “Emitido em:” com o valor do campo dtemissao, com a string “ com vencimento em:”, com o valor do campo dtvenc, onde os campos são da tabela pcprest, utilizando todos os registros da tabela.

Seleção 5: Outro exemplo de concatenação

select “Emitido em:” || “dtemissao:” || “ com vencimento

em:” || dtvenc from pcprest;


Distinct

O comando “distinct” consiste em exibir as informações da tabela utilizada de maneira distinta, de forma que informações não sejam exibidas de maneira redundante.

Seleção 6: Usando Distinct

select distinct codcli from pcnfsaid;

O código acima mostra como selecionar o campo codcli da tabela pcnfsaid de maneira distinta, ou seja, cada informação do campo codcli será exibido apenas uma vez, não importando quantas outras vezes essa informação esteja presente em outros registros da tabela utilizada.

Restringindo Dados (where)

O comando de restrição “where” é o comando de restrição mais utilizado. O comando “where” quer dizer “onde”, ou seja, com a utilização do comando “where”, serão exibidas as informações solicitadas, onde as mesmas obedecerem as restrições informadas.

Condições de Comparação (=, >, >=, <, <=, <>, in, like, between, is null) “=“ é igual

O código abaixo seleciona todos os campos dos registros da tabela pcnfsaid onde o valor do campo numnota for igual a 50.

Seleção 7:Usando where com =

select * from pcnfsaid where numnota = 50;

“>” é maior

O código abaixo seleciona todos os campos dos registros da tabela pcnfsaid onde o valor do campo numnota for maior que 45)

Seleção 8: Usando where com >

select * from pcnfsaid where numnota > 45;

“>=“ é maior ou igual

O código abaixo seleciona todos os campos dos registros da tabela pcnfsaid onde o valor do campo numnota for maior ou igual a 50.

Seleção 9: Usando where com >

select * from pcnfsaid where numnota >=50;

“<” é menor

O código abaixo seleciona todos os campos dos registros da tabela pcnfsaid onde o valor do campo numnota for menor que 10.

Seleção 10: Usando Where com <

select * from pcnfsaid where numnota < 10;

“<=“ é menor ou igual

O código abaixo seleciona todos os campos dos registros da tabela pcnfsaid onde o valor do campo numnota for menor ou igual a 5.

Seleção 11: Usando where com <=

select * from pcnfsaid where numnota <= 5;

“<>” é diferente

O código abaixo seleciona todos os campos dos registros da tabela pcnfsaid onde o valor do campo numnota for diferente de 2.

Seleção 12: Usando where com diferente(<>)

select * from pcnfsaid where numnota <> 2;

“in” é na lista

O código abaixo seleciona todos os campos dos registros da tabela pcnfsaid onde o valor do campo numnota pertencer à lista 1,3,5,6,8.

Seleção 13: Usando where com In

select * from pcnfsaid where numnota in (1,3,5,6,8);

“like” é como, parecido

O código abaixo seleciona todos os campos dos registros da tabela pcnfsaid, onde o valor do campo numnota começar com o número 1, não importando quantos e quais números venham na sequência.

Seleção 14: Usando Like

select * from pcnfsaid where numnota like “1%”;

O código abaixo seleciona todos os campos dos registros da tabela pcnfsaid, onde o valor do campo numnota começar com o número 1, e que tenham apenas um número na sequência, com qualquer valor.

Seleção 15: Outro exemplo de like

select * from pcnfsaid where numnota like “1_”;

O código abaixo seleciona todos os campos dos registros da tabela pcnfsaid, onde o valor do campo numnota começar com o número 1, e que tenham apenas dois números na sequência, com qualquer valor.

Seleção 16: Mais um exemplo de like

select * from pcnfsaid where numnota like “1__”;

O código abaixo seleciona todos os campos dos registros da tabela pcnfsaid, onde o primeiro número do campo numnota tiver qualquer valor, o segundo número for 1, não importando quantos e quais números venham na sequência.

Seleção 17: Outra opção de uso do like

select * from pcnfsaid where numnota like “_1%”;

“between” é a cláusula que coloca a busca entre dois valores

O código abaixo seleciona todos os campos dos registros da tabela pcnfsaid, onde o valor do campo numnota estiver entre os valores 1 e 10, incluindo os valores 1 e 10.

Seleção 18: Cláusula between

select * from pcnfsaid where numnota between 1 and 10;

Obs.: na condição “between” os valores informados como limites são considerados nos resultados.
“is null” quer dizer é nulo

O código abaixo seleciona todos os campos dos registros da tabela pcnfsaid, onde o valor do campo comissao for nulo.

Seleção 19: Usando is null

select * from pcnfsaid where comissao is null;

Obs.: Campo nulo é o campo que não possui nenhum valor atribuído. Campos com um caractere de espaço ou 0(zero) tem valor atribuído. Campo nulo é campo vazio.

Condições Lógicas (not, and, or)

NOT

A condição lógica “not” é utilizada para acrescentar uma condição de negação, possibilitando a exclusão de registros na seleção, por exemplo:

Seleção 20: Usando NOT

select * from pcprest
where duplic = 4
and codcob not in (“DESD”,”CHP”);


O código acima seleciona todos os campos dos registros da tabela pcprest, onde o campo duplic for igual a 4, e o campo codcob não for DESD e CHP.

Seleção 21: Usando is not null

select * from pcnfsaid
where comissao is not null;


O código acima seleciona todos os campos dos registros da tabela pcnfsaid, onde o campo comissão não for nulo.

O código abaixo seleciona todos os campos dos registros da tabela pcclient, onde o conteúdo do campo cliente não seja parecido com “JOSE”, ou seja, o nome “JOSE” não pode ser parte do conteúdo do campo cliente.

Seleção 22: Usando not like

select * from pcclient
where cliente not like “%JOSE%”;


O código abaixo seleciona todos os campos dos registros da tabela pcclient, onde o valor do campo dtcadastro não estiver entre “01-jan-2007” e “31-jan-2007”.

Seleção 23: Usando not between

select * from pcclient
where dtcadastro not between “01-jan-2007” and “31-jan-2007”;


AND

A condição lógica “and” é utilizada para acrescentar uma condição de inclusão, ou seja, o resultado será exibido apenas se todos os critérios de pesquisa forem obedecidos.

Abaixo veremos como trabalhar com essa condição.

O código abaixo seleciona todos os campos dos registros da tabela pcprest, onde o campo duplic for igual a 2 e o campo codcob for diferente de DESD.

Seleção 24: Usando condição AND

select * from pcprest
where duplic = 2
and codcob <> “DESD”;


OR

A condição lógica “or” é utilizada para acrescentar uma condição de alternativa, ou seja, o resultado será exibido caso seja obedecido o primeiro critério OU caso seja obedecido o segundo critério.

O código abaixo seleciona todos os campos dos registros da tabela pcprest, onde o campo duplic for igual a 2, e o campo codcob for igual a BK, ou onde o campo duplic for igual a 3, e o campo codcob for igual a CHP.

Seleção 25: Usando OR

select * from pcprest
where duplic = 2
and codcob = “BK”
or duplic = 3
and codcob = “CHP”;


Obs.: No exemplo acima citado, observe que serão obedecidas as condições antes do “OR” ou depois do “OR”, não importando quantas outras condições sejam utilizadas.

  • Ordenando os resultados (order by, order by desc)
  • Ordenando por coluna simples

O código abaixo seleciona todos os campos dos registros da tabela pcempr, ordenando as informações pelo campo matricula, em ordem crescente.

Seleção 26: Ordenação em coluna simples

select * from pcempr
order by matricula;


O código abaixo seleciona todos os campos dos registros da tabela pcempr, ordenando as informações pelo campo matricula, em ordem decrescente.

Seleção 27: Usando ordenação decrescente

select * from pcempr
order by matricula desc;


Ordenando por múltiplas colunas

O código abaixo seleciona todos os campos dos registros da tabela pcprest, ordenando as informações pelos campos duplic, codcli e codcob, em ordem crescente.

Seleção 28: Usando ordenação por múltiplas colunas

select * from pcprest
order by duplic, codcli, codcob;


O código abaixo seleciona todos os campos dos registros da tabela pcprest, ordenando as informações pelos campos duplic, em ordem crescente, codcli em ordem crescente e codcob em ordem decrescente.

Seleção 29: Ordenando em ordem decrescente

select * from pcprest
order by duplic, codcli, codcob desc;


Conclusão
Nessa postagem vimos algumas operações básicas da linguagem SQL. Com a leitura do mesmo qualquer pessoa agora pode começar a estudar e fazer diversos testes em bancos de dados. Espero que tenham gostado e em breve postarei uma sobre SQL Avançado, fiquem atentos e vamos para os estudos!!

Se tiverem alguma dúvida ou sugestões de novos posts favor me avise pelo Facebook ou então deixando seu comentário no blog.

domingo, 21 de junho de 2015

#1 Tutorial Android - Criando projeto, AVD e Iniciando Desenvolvimento


Fontes Java:
package com.infoplace.helloworld;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;


public class MainActivity extends Activity {

private Button btnHello;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

btnHello = (Button) findViewById(R.id.btnHello);

btnHello.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "Hello World!! Infoplace Sistemas", Toast.LENGTH_SHORT).show();
}
});

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}

@Override public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();

//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}

return super.onOptionsItemSelected(item);
}
}


Arquivo XML:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

<TextView android:text="@string/infoplace" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView" />

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btnHello"
android:id="@+id/btnHello"
android:layout_below="@+id/textView"
android:layout_alignParentStart="true" />


</RelativeLayout>

quinta-feira, 18 de junho de 2015

Instalando e Configurando Android Studio



Links para download:
Java JRE
Java JDK
Android Studio


Definição:
Ao todo existem 3 variaveis de ambiente que são usadas pelo java SDK, provávelmente na instalação algumas já serão configuradas mas nem sempre isso ocorre… por isso será ensinado como configurar tudo corretamente.

Segue a definição de cada uma delas:
JAVA_HOME: Diretório raiz de instalação do Java, além de ser usado para configurar as variáveis seguintes também é continuamente referenciado por aplicativos e frameworks desenvolvidos com Java.

JAVA_HOME
C:\Program Files\Java\jdk1.8.0_45\jre


CLASSPATH: Diretório que indica à JVM onde procurar as bibliotecas ( classes Java).

CLASSPATH
.;%JAVA_HOME%


PATH: Lista de diretórios que contém aplicativos que podem ser chamados pelo console. Com o PATH apontando para o diretório de executáveis do Java podemos chama-los de qualquer local do mesmo computador.

Path
;%JAVA_HOME%\\bin