Mostrando postagens com marcador Exercicios. Mostrar todas as postagens
Mostrando postagens com marcador Exercicios. Mostrar todas as postagens

Comando SELECT - Principais cláusulas

Desenvolvida nos anos 70, SQL é uma linguagem de pesquisa declarativa para banco de dados relacional. Muitas das características originais do SQL foram inspiradas na álgebra relacional. Essa caracteristica permite a seleção de dados previamente cadastrados dentro da base atraves da instruções SELECT. A sintaxe abaixo apresenta a sintaxe mais basica da instrução.

SELECT <lista_de_campos ou *
FROM <nome_da_tabela>

Exemplos:

SELECT CODIGO, NOME FROM CLIENTE
/*Seleção dos campos CODIGO e NOME da tabela cliente*/

SELECT * FROM CLIENTE
/*Seleção de todos os campos da tabela cliente, onde o "*" indica que todos campos e registros devem ser selecionados*/

Nos exemplos acima, todos os registros da tabela CLIENTE serão selecionados, agora imagine se a tabela CLIENTE tiver 150 mil registros!!!!!
Achar um cliente ou um grupo de clientes especificos dentre dessa seleção não será uma tarefa facil. Para refinar as buscas, diversas cláusulas podem ser adicionadas à instrução permitindo a extração de dados especificos da base. Na sintaxe abaixo temos algumas clasulas que podem ser adicionadas a instrução.

SELECT [DISTINCT | ALL]   * |nomes_das_colunas
FROM nome_da_tabela
[WHERE campo <operador> termo]
[ORDER BY  nome_da_coluna];

Com base na sintaxe acima, vamos definir alguma possibilidades que irão refinar nossas seleções:

Selecionando registros específicos:

Para selecionar registros específicos devemos utilizar a cláusula Where, onde através dessa cláusula poderemos atribuir condições de filtragem para selecionar um ou mais campos da tabela. A partir do exemplo apresentado na figura 1 iremos refinar nossa seleção com a cláusula where.
Figura 1. Clientes cadastrados na tabela CLIENTE da base de dados.
Com base na tabela apresentada na figura 1, vamos selecionar todas as clientes da base de dados, ou seja, vamos selecionar todos registros cujo sexo seja feminino. Para executar a demanda proposta vamos utilizar o comando abaixo cuja execução do comando pode ser visualizadas na figura 2.

SELECT  * FROM Cliente
WHERE sexo=‘F’;

Figura 2. Seleção de todas as clientes da base de dados.
Em outro exemplo, na figura 3 temos um exemplo onde serão selecionados todos clientes de São Paulo.
Figura 3. Seleção de todos clientes que moram em São Paulo.
Dependendo da campo utilizado na consulta, outros operadores relacionais podem ser utilizandos. Na Tabela 1 temos uma relação de operadores relacionais que podem ser utilizados na clausula Where. Na coluna exemplo, o campo preço é utilizado como referencia.
Tabela 1. Operadores relacionais que podem ser utilizando na clausula WHERE.
Em geral, os operadores acima são bem intuitivos(caso voce tenha alguma duvida, pode postar aqui no blog que responderei o mais rapido possivel), devido a essa facilidade, irei comentar somente os operadores LIKE, BETWEEN e IN.

Operador LIKE:

O operador LIKE é utilizando em colunas definidas como dados tipo caractere onde a consulta pode ser realizada utilizando somente parte da string armazenada na base de dados. Imagine que você não lembra o sobrenome do seu cliente (Figura 1), para realizar uma consulta usando somente uma parte da string (neste caso só o primeiro nome do cliente) devemos associar o operador Like e o "%" que servirá como curinga. Na figura 4 temos um exemplo de como selecionar todos os clientes cujo nome começa com "Zé".
Figura 4. Seleção usando operador LIKE e curinga "%"
Para selecionar todos cliente "Zé" não importando o sobrenome, o curinga foi utilizando logo após a palavra "Zé%". O curinga pode seu utilizado em qualquer ponto da string e se necessario, pode ser utilizando mais de um curinda conforme os exemplos das figura 5 e 6.
Figura 5. Exemplo usando operador like e curinga no inicio da string

Figura 6. Exemplo usando operador like e dois curingas.
Alem do curinga "%" que irá substituir uma sequencia de caracteres, podemos utilizar o sublinhado "_" como curinga, substituindo um caractere especifico.

Operador Between:

O operador Between é usado quando precisamos selecionar linhas de uma tabela cujo valor de um campo encontra-se dentro de um intervalo específico. Com diversas aplicações, esse tipo de consulta pode ser usado para filtrar os dados num determinado intervalos de tempo (datas), ou estabelecer intervalos de classe muito utilizandos em estatística. Sua sintaxe é a seguinte: 

SELECT campos FROM tabela 
WHERE campo BETWEEN inicio_intervalo AND fim_intervalo;

Na figura 7 temos um exemplo onde é exibido todos personagens da tabela Ducktales criados entre 1940 e 1950.
Figura 7. Uso do operador Between para filtrar periodo

Usando o mesmo principio apresentado na figura 7, podemos utilizar o operador NOT BETWEEN (sintaxe abaixo) e exibir todos personagens da tabela Ducktales criados fora do intervalo de 1940 a 1950. O resultado da seleção utilizando o NOT BETWEEN pode ser visto na figura 8.

SELECT campos FROM tabela 
WHERE campo NOT BETWEEN inicio_intervalo AND fim_intervalo;

Figura 8. Uso do operador NOT Between selecionando todos personagens fora do intervalo.

Operador IN:

O operador IN trabalha com a ideia de conjuntos selecionando informações que estão ou não contidas nesse conjunto. Diferente do operador relacional de igualdade (=) que seleciona dados a paritr de um valor especifico, o IN permite selecionar diversos valores com base numa lista de valores. Sua sintaxe é a seguinte:

SELECT campos FROM tabela WHERE campo IN (valor1, valor2, valor3);

.....



Ordenando os registros para exibição (order by):

A cláusula ORDER BY é utilizada para mostrar as linhas da consulta seguindo o critério de ordenação (crescente ou decrescente) definido pelo utilizador usando uma coluna como referencia. Nas figura 9 e 10 podemos ver exemplo de ordenação crescente e decrescente.
Figura 9. Seleção ordenada pelo campo NOME em ordem crescente.

Figura 10. Seleção ordenada pelo campo NOME em ordem decrescente.



Pesquisa case sensitive:

O oracle é case sensitive, ou seja, quando vamos realizar uma seleção é preciso diferenciar letras maisculas de letras minusculas. Como nem sempre temos certeza sobre como a string foi inserida na base de dados, em geral são utlizados as funções LOWER() e UPPER() que tornam a seleção case insensitive. Esse assunto será tratado em outra postagem.....





Ainda ta com duvida, curta nossa pagina no facebook no link abaixo e poste sua duvida lá.


Trabalhando com Sensores de Infravermelho

Dentre todas as radiações que somos expostos diariamente, somente uma pequena porção (espectro visível) que se manifesta atraves da emissão de luz é possivel ser observada pelo olho humano. Na figura 1 um espectro eletromagnético é apresentado onde podemos observar que há varias outras radiações invisível com comprimento de onde especifico e bem conhecidos.

Figura 1.   Espectro eletromagnético - créditos Shutterstock.com 



Dentre as ondas eletromagneticas não visiveis, podemos citar o Infravermelho (IR) cujo nome significa "abaixo do vermelho" e seu comprimento de onda varia de 750 nm a 1mm.
Devido da facilidade de trabalhar com o infravermelho, nos anos 40 (2ª Guerra mundial) apareceram os primeiros controles remotos que usavam o infravermelho para enviar uma sequencia de pulsos para um receptor que interpretava esse sinal e executar alguma função, nesse casos especifico, o controle remoto detonava bombas a distancia. Até os dias de hoje o controle remoto trabalha da mesma maneira o que nos permite usa-lo para realizar algum tipo de automação.

Para realizar nosso projeto com controle remoto, você poderá comprar qualquer sensor de IR (por exemplo Hx1838) assim como qualquer controle remoto IR.......


Identificando cada botão do controle:

No principio de funcionamento do controle, cada botão corresponde um código específico, gerado por um microprocessador que fará o emissor IR piscar numa determinada sequencia binária. Quando essa sequencia pulsada chega ao receptor, o microcontrolador do receptor irá processar essa sequencia bits e realizar uma ação. 
Como você comprou qualquer controle e não conhece a codificação de cada botão, será preciso criar um circuito simples para "mapear" seu controle. Na figura 2 temos um circuito simples usando um sensor IR ligando a saída do seu Arduino. Quando qualquer botão do controle for apertado o Arduino irá receber o sinal via porta 11.

Figura 2. Circuito simples para receber dados de controle IR

Para verificar o código de cada botão, iremos pressionar um botão qualquer do controle. O sinal emitido pelo controle será capturado pelo Arduino através do sensor IR e repassado para a porta serial.  Na porta serial será possível associar cada botão a um código em Hexadecimal.
Para realizar esse e qualquer outro projeto usando sensores de IR, vamos precisar usar a biblioteca IRremote.h que pode ser facilmente achada na net. (Não sabe o que é uma biblioteca? clique aqui), os comando da biblioteca serão comentados no código abaixo:

Programa usado para códigos de cada botão do controle IR

#include <IRremote.h>

int RECV_PIN = 11;

IRrecv irrecv(RECV_PIN);  // indicando que pino 11 será usado como entrada de dados o sensor IR
decode_results results;

void setup()  
{
    Serial.begin(9600);   // incializa porta Serial
    irrecv.enableIRIn(); // Inicializa o receptor IR
}
 
void loop()  
{
    if (irrecv.decode(&results)) //verifica se algo foi capturado no sensor IR
   {
       Serial.println(results.value, HEX); //Exibir na serial valor em Hexa lido no sensor
       irrecv.resume();  //Le o próximo valor 
   }
}

Se tudo deu certo, agora você sabe qual a codificação de cada botão do controle.
Agora com base no circuito da figura 3, vamos controlar 4 Led's que serão ligados nas portas 4,5,6 e 7. Cada Led será ligado por um botão do controle (1,2,3 e 4) e todos os Leds serão apagados quando o botão 5 for pressionado.
Figura 3. Circuito de controle de Led's por controle IR.
Segue código equivalente  ao problema apresentado acima:

#include <IRremote.h>

int RECV_PIN = 11;
int pino1 = 7;
int pino2 = 6;
int pino3 = 5;
int pino4 = 4;

IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()  
{
    Serial.begin(9600);   // incializa porta Serial
    pinMode(pino1, OUTPUT);
    pinMode(pino2, OUTPUT);
    pinMode(pino3, OUTPUT);
    pinMode(pino4, OUTPUT);
    irrecv.enableIRIn(); // Inicializa o receptor IR  
}
 
void loop()
{
   if (irrecv.decode(&results))
  {
    Serial.println(results.value, HEX);
    irrecv.resume();
  }

    if (results.value == 0xFD08F7) //Verifica se a tecla 1 foi acionada  
    {
      digitalWrite(pino1, HIGH);  //Acende o led vermelho  
    }
    if (results.value == 0xFD8877) //Verifica se a tecla 2 foi acionada  
    {
      digitalWrite(pino2, HIGH); //Acende o led verde  
    }
    if (results.value == 0xFD48B7) //Verifica se a tecla 3 foi acionada  
    {
      digitalWrite(pino3, HIGH); //Acende o led Amarelo  
    }
    if (results.value == 0xFD28D7) //Verifica se a tecla 4 foi acionada
    {
      digitalWrite(pino4, HIGH); //Acende o led azul  
    }
    if (results.value == 0xFDA857) //Verifica se a tecla 5 foi acionada  
    {
      //Apaga todos os leds  
      digitalWrite(pino1, LOW);
      digitalWrite(pino2, LOW);
      digitalWrite(pino3, LOW);
      digitalWrite(pino4, LOW);
    }
 
}


Agora Pratique:

Exercício 1. Reproduza o mesmo projeto apresentado na figura 3 e adicione mais tres funções ao controle:

      - O botão "play" fará todos os Led's piscarem ao mesmo tempo com intervalo de 0,5s.
   - O botão "avançar" fará com que os Led's acendam de maneira sequencial da direita para a esquerda com intervalos de 0,5s 
    - O botão "retroceder" fará com que os Led's acendam de maneira sequencial da esquerda para a direita com intervalos de 1s
Na figura 4 temos os botões que serão usados nessa automação 
Figura 4. Botões que serão usados

Exercício 2. Reproduza o mesmo projeto apresentado no exercício 1 só que agora a frequência com os Led's irão oscilar pode variar. Neste projeto, cada numero do controle representará uma velocidade (e.g.   botão 1 = 0,1 s - botão 8 = 0,8s, etc)

Desafio:

Desafio 1. Agora que você já domina o uso de controles IR, tente controlar dois motores CC usado uma ponte H e o controle IR. Não sabe controlar motor CC ou usar a ponte H? Acesse nossa postagem sobre assunto clicando aqui.

Desafio 2. Você tem controle de vídeo-game, TV ou celular que possui IR na sua casa? Tente fazer uma automação de maneira semelhante ao vídeo que pode ser acessado clicando na figura abaixo.


 Clique aqui e assista um vídeo sobre o assunto no Youtube.


Ainda ta com duvida, curta nossa pagina no facebook no link abaixo e poste sua duvida lá.


Banco de dados - Jogos de Video Game

Essa atividade é baseada no trabalho entregue pelos alunos da disciplina de Desenvolvimento de Banco do Campus Vila Prudente:

GABRIEL DE BARROS PONTES
NATHALYA APARECIDA MUNIZ PELICAS
PAULO CESAR DA SILVA

Instruções sobre a atividade

1ª Atividade DEVE ser realizada de maneira COLABORATIVA em grupos de 2 a 4 alunos. 
2ª Atividade vale 10 ponto e e faz parte da nota da Avaliação 1.
3ª Atividade de Derivação de modelos deverá ser entregue para o professor na próxima aula.
4ª As questões 1, 1.2 e 3 devem ser enviados por email.
5ª O título do e-mail de entrega dever ser [ATIVIDADE DE BD - GAMES].
6ª Somente 1 integrante do grupo deve enviar  o e-mail.
7ª No corpo do e-mail deve constar o nome e RA de todos integrantes do grupo.
8ª Responder individualmente as questões no FORMs no final da atividade.

Os alunos citados acima desenvolveram um Banco de dados para guardar informações sobre jogos de vídeo game. O DER da figura apresenta a modelagem conceitual do Banco de dados criado para armazenar as informações dos jogos.....


Questão 1. Derivação de modelos - Faça no caderno a derivação do  DER abaixo (entregar para o professor na próxima aula com o nome dos alunos do grupo).
OBSERVAÇÕES:  Para facilitar a visualização do modelo, o diagrama abaixo não possui atributos,  use as tabelas do dicionario de dados da Questão 2 para definir os campos do modelo lógico. 


Figura 1. Modelagem conceitual - Diagrama de Entidade Relacionamento do BD jogos.
Questão 1.2. Implementação - Implemente o modelo acima no Oracle 11g usado como referencia o Dicionario abaixo.

OBSERVAÇÕES:  No dicionario abaixo, não há referencias sobre as chaves estrangeiras [FK], mas todas as FK's devem ser criadas no BD.











Questão 2 - Inserção de dados - Inserir 3 registros em cada tabela, se tiver duvida sobre o que inserir, leia a descrição do campo no Dicionario de dados.





Ainda ta com duvida, curta nossa pagina no facebook no link abaixo e poste sua duvida lá.