Blogger templates

Comunidade java aberto - Participe da nossa comunidade no facebook (clique aqui)

Visitas

Mostrando postagens com marcador Banco de Dados. Mostrar todas as postagens
Mostrando postagens com marcador Banco de Dados. Mostrar todas as postagens

sábado, 7 de setembro de 2013

,

Ola, pessoal nesta vídeo aula você aprendera a criar uma classe de conexão entre uma aplicação java e um banco de dados Microsoft Access 2010. clique aqui e assista as vídeos aulas Java - Banco de Dados Access

codigo para você copiar e alterar.

// Banco de dados Microsoft Access 2010
// Josenil Ezequiel
// video aula 02

package Classe_de_bancos;    // pacote onde a classe se encontra

import java.sql.*;          // biblioteca responsável pelo sql sem ela não podemos fazer uma conexão com o banco de dados
import javax.swing.*;       // estaremos utilizando alguns recurso dessa biblioteca

public class conexao    // classe mãe
{
    //CRIAÇÃO DAS VARIÁVEIS E OBJETOS

 
    /**Explicação
     *      final private = ela e privada nessa classe ou seja ela é constante
     *      o conteudo da variavel nao podera ser alterado.
     *      String driver = é uma variavel do tipo string ou seja guarda um texto.
     *      driver="sun.jdbc.odbc.JdbcOdbcDriver"; = a variavel armazena o driver que sera utilizado;
     */
 
     final private String driver="sun.jdbc.odbc.JdbcOdbcDriver";
 
     /**
      *     esta variavel esta armazenando minha fonte de dados ou seja o endereço dela.  
      */
     final private String url =  "jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb)};DBQ=c:/meubd/conta.mdb";
 
     /**
      *     varivel ususario  e senha, vamos deixa-los como vazio por padrao
      *
      */
     final private String usuario="";
     final private String senha="";
 
     /**
      *     Connection este objeto e responsavel pela conexão do banco de dados,
      *     entao temos o objeto conexão do tipo Connection  e é private ou seja
      *     so pode ser alterado aqui dentro da propria classe.
      */
     private Connection conexao;
     /**     Public= ou seja ele pode ser acessado e alterado por outra classe
      *     Statement= é responsavel por abrir o caminho até o banco de dados
      *     ResultSet= é o responsavel por armazenar o resultado dos comando sql
      */
     public  Statement statement;
     public  ResultSet resultSet;
   
     // METODO RESPONSAVEL PELA CONEXAO
 
    /**
     *  metodo do tipo public para que possa ser acessado de outras classes
     * do tipo booleano que ira retorna true or false( verdadeiro ou falso)
     */
 
     public boolean conecta ()
     {
         // variavel que retornara verdadeiro ou falso inicia-se com verdadeiro
         boolean result = true;
       
         /**
          * O comando try/catch e um comando nas linguagem de programação que diz
          * tente isso se caso de certo faça isso.
          * o catch caso de errado faça isso
          * o try pode ter uma uma infinade de catch que sao os tratamentos de
          * erros.
          * no java especificamente todo arquivo esterno é obrigatorio estar dentro
          * dele pois se tiver algum erro estara sendo tratado.
          * caso isso nao ocorra ele nao ira funcionar nas outras
          * linguaguens isso dificilmente ocorre
          */
       
         try
         {
             /** Class.forName(driver);= efetua o carregamento do driver
              * conexao= DriverManager.getConnection(url,usuario,senha); =
              * efetua a coneção com o banco de dados ele ira no endereço dado
              * pela url, verificara o usuario e a senha
              * se tudo estiver ok ele retorna true e mostra a mensagem a baixo
              **/
             Class.forName(driver);//driver
             conexao= DriverManager.getConnection(url,usuario,senha);//fonte
             JOptionPane.showMessageDialog(null,"Conectou ao banco");
         }
         /**
          * Se ele nao encontra o driver ele vai retorna essa mensagem mais o driver nao encontrado
          */
         catch(ClassNotFoundException Driver)
         {
             JOptionPane.showMessageDialog(null,"Nao Foi possivel localizar o driver de conexao "+Driver);
             result= false;      
         }
         /**
          * caso nao encontre o banco de dados, tabela ou algo do tipo
          */
         catch(SQLException Fonte)
         {
             JOptionPane.showMessageDialog(null,"Deu erro na conexao com a fonte de dados "+Fonte);
             result= false;
         }
         return result;
     }
     public void desconecta()
    {
         boolean result =true;
         try
         {
             conexao.close();
             JOptionPane.showMessageDialog(null, "Banco de dados desconetado");
         }
         catch(SQLException erroSQL)
         {
             JOptionPane.showMessageDialog(null,"Erro ao descontectar "+erroSQL);
              result= false;
         }
     }
     /**
      * (String sql)= vai ser o paremtro que desejo que seja executado
      */
     public void executa_sql(String sql)
    {
         try{
             //cria um caminho para conexao
             statement = conexao.createStatement();
             //executa a sql
             resultSet = statement.executeQuery(sql);
         }
         catch(Exception erro)
         {
             JOptionPane.showMessageDialog(null, erro.getMessage());
         }

     }
}

ate a próxima
Continue lendo

domingo, 9 de junho de 2013

Utilizando o banco Derby de forma portável

,


Utilizando o banco Derby de forma portável

Introdução

Em algumas situações desenvolvemos aplicações de pequeno porte onde queremos utilizar um banco de dados, mas não temos interesse em instalar um SGBD em cada computador que for rodar minha aplicação. Um banco de dados que pode ser usado sem a necessidade de ser instalado é o Apache Derby (a Sun Microsystems utiliza esse mesmo banco de dados com o nome de JavaDB, não sei ao certo a relação entre eles), que é implementado 100% em Java, o que se torna uma excelente opção para aplicações portáveis que utilizam banco de dados e são feitas em Java.
Existem duas formas de se acessar um banco de dados no derby, são elas:
Conexão embarcada: realiza uma conexão diretamente no arquivo da base de dados, por esse motivo não é possível criar mais de uma conexão simultaneamente para a mesma base de dados.
Conexão via serviço de rede: mesmo utilizando o SGBD derby como um banco portável é possível inicializar o serviço de rede sem realizar uma instalação, isso pode ser feito diretamente pelo código, ou pela linha de comando de um terminal, seja (L)unix ou windows.

Requisitos

Os requisitos aqui apresentados se referem a este post, nada impede criar uma aplicação em outra linguagem e utilizar um drive de conexão para o derby.
* Sua aplicação deve ser feita utilizando Java;
* baixar o arquivo: db-derby-v.x.y.z-lib.zip
- derby, derbyclient, derbynet, derbyrun: obrigatórios para executar sua aplicação
- derbytools: jar para executar funções auxiliares do banco de dados, como por exemplo ver info do Derby
- derby_LOCALE_LANGUAGE: adicione sua linguagem para sua aplicação para que o derby possa mostrar as mensagem traduzidas
* Uma JVM instalada no computador cliente

Iniciando o banco de dados derby

Se você for utilizar a conexão embarcada não é necessário iniciar o Apache Derby, uma vez que esse modo não acessa via serviço. Caso contrário você pode iniciar o banco pela linha de comando, utilizando:java -jar derbynet.jar start
Quando você inicializar o banco pela linha de comando o derby automaticamente irá procurar pela variável de ambiente DERBY_HOME que indica a pasta onde ficam guardados as bases de dados a serem acessadas, no linux você pode definir essa variável através do comando export DERBY_HOME=/home/diretorio, pelo windows, pode-se definir essa variável através Propriedades do Sistema->Avançado->Variáveis de ambiente.
Se preferir, você pode inicializar o banco derby diretamente pelo código de sua aplicação derby, basta inserir as seguintes linhas de código na sua aplicação:
try {
//Aqui você também pode utilizar um caminho relativo, porém lembre-se de que esse
//caminho inicia no mesmo diretório onde você iniciou a aplicação.
System.setProperty("derby.system.home", "/home/usuario/derby");
NetworkServerControlImpl networkServer = new NetworkServerControlImpl();
networkServer.start(new PrintWriter(System.out));
System.out.println("Conectado ao banco de dados.");
} catch (Exception ex) {
System.out.println("Não conseguiu conectar no banco de dados.");
}
Lembre-se de adicionar ao classpath os arquivos jar necessários para sua aplicação.
Caso a variável de ambiente DERBY_HOME não esteja definida (vale tanto para a inicialização via código quanto para a inicialização via terminal) o derby irá procurar automaticamente por base de dados localizadas na pasta de onde você iniciou a aplicação ou executou o comando de iniciar o derby.

Links

Site oficial: http://db.apache.org/derby/
Manual: http://db.apache.org/derby/manuals/index.html
Download: http://db.apache.org/derby/derby_downloads.html#Latest+Official+Release


(fonte: paulocanedo)
Abaixo segue a conexão completa para uso, só adaptarem...

Continue lendo

sexta-feira, 11 de janeiro de 2013

Habilitando a conexão remota no sql server 2008

,


E ai pessoas, como tenho recebido alguns e-mails pedindo para mostrar “como fazer para que outros computadores acessem o meu banco de dados” e “habilitar o acesso remoto do SQL Server 2008”, então vamos à demonstração!
Antes de começar, se o servidor estiver fora de um “domínio” ou você não saiba o que é “domínio”, dê uma olhada neste artigo:
http://sqlfromhell.wordpress.com/2009/05/24/habilitando-sql-authentication-e-o-usuario-sa/
Em seguida, habilitamos o Firewall do Windows (permitindo exceções). Mas para ambientes de teste não há problema em deixá-lo desabilitado.
Dentre as diversas exceções, adicionamos mais uma porta:
Para boa parte dos cenários, a porta TCP 1433 já vai suprir as necessidades:
Em outros cenários mais específicos, pode existir a necessidade de habilitar as portas UPD 1434, TCP 1434 e outras (at. http://msdn.microsoft.com/en-us/library/ms175483.aspx  ).
No SQL Server Management Studio, verifique se nas propriedades do servidor esta habilitada a opção “Allow remote connections to this server”. Caso não esteja habilitada, será necessário habilitá-la.
No SQL Server Configuration Manager, mais precisamente nos protocolos da sua instância (ex.: SQLEXPRESS, SQL2005, MSSQLSERVER…), entre nas propriedades do protocolo TCP/IP:
E habilite o protocolo TCP/IP. Em alguns cenários também se faz necessário habilitar o protocolo “Named Pipes”.
E recomendo definir a porta de conexão:
Se você quiser configurar outras portas para o SQL Server, dê uma olhada neste artigo:
http://sqlfromhell.wordpress.com/2009/09/05/portas-sql-server/
Reinicie o serviço do SQL Server da sua instância e o SQL Server Browser, depois em uma máquina cliente, tente se conectar ao servidor com um usuário válido:
Se tudo ocorrer como previsto, teremos a conexão:
Bem, estou usando uma VM “zerada” que até o momento tem o Windows Server 2003 R2 e o SQL Server 2008, assim existe grande possibilidade de não funcionar em outros cenários.
Pontos a levar em consideração para tratar outros cenários:
  • Se você não conseguir ao menos dar um “ping” ou compartilhar uma pasta do servidor à rede ou conectar remoto com o Remote Desktop Connection (mstsc.exe), isso pode ser sinal que tem algo errado com o firewall ou a rede ou até mesmo com o Windows (então não é culpa do SQL Server, ainda…).
  • Programas de Antivírus ou Firewall de terceiros, também são grandes culpados por problemas com o acesso remoto, tanto no servidor como no cliente.
  • O usuário que você esta utilizando para se conectar pode não ter permissão para se conectar ou o servidor não esta no domínio (at. http://sqlfromhell.wordpress.com/2009/05/24/habilitando-sql-authentication-e-o-usuario-sa/ ). Para “testar”, no servidor tente se conectar ao SQL Server com o usuário que você esta utilizando na máquina cliente.
  • Para “testar”, não utilize o SQL Server Management Studio 2005 para se conectar a um SQL Server 2008, pois algumas vezes isso não dá muito certo.
Mais uma coisa, se eu não responder um comentário em 24h é sinal que não estou com acesso à internet, pois possivelmente estarei preso na ilha de LOST (probabilidade 0,001%) ou estou numa “missão” extraordinária pelo Exército Brasileiro (probabilidade 4%) ou estou apagando algum incêndio em alguma consultoria (probabilidade 85%) ou dedicado a algum trabalho acadêmico (probabilidade 10%), então também vale a pena procurar os fóruns do MSDN e/ou o suporte da Microsoft.
Na internet, encontrei outros dois artigos bons sobre o assunto:
Instalando e Configurando o SQL Server 2005 Express – Nilton Pinheiro:
http://www.mcdbabrasil.com.br/downloads/install_sqlexpress.pdf 
Como configurar Conexão Remota no SQL Server 2005 – Diego Nogare:
http://www.linhadecodigo.com.br/artigo/1260/como-configurar-conexao-remota-no-sql-server-2005.aspx 
Continue lendo

sábado, 24 de novembro de 2012

Triggers (Gatilhos)

,



Se até agora você esta acostumado a trabalhar com banco de dados do tipo ISAM ( Dbase , FoxPro, Access , Paradox...); desenvolver uma aplicação para gerenciar os dados neste caso significa criar uma aplicação que faça o controle sobre todo ambiente desde a interface , passando pela manutenção dos dados e as regras de negócios do sistema.

É o sistema que deve controlar e tomar as decisões sobre o que fazer em determinadas situações. Assim em um programa para controlar os produtos de uma empresa quando a quantidade de um produto atingir uma certa quantidade o sistema deverá avisar o operador/usuário para providenciar a reposição do mesmo.

Ao trabalhar com base de dados Cliente/Servidor como SQL Server , Oracle , Informix , dentre outras, podemos usar um recurso muito poderoso chamado Trigger.

Um Trigger é bloco de comandos Transact-SQL que é automaticamente executado quando um comando INSERT , DELETE ou UPDATE for executado em uma tabela do banco de dados.
Os Triggers são usados para realizar tarefas relacionadas com validações , restrições de acesso , rotinas de segurança e consistência de dados ; desta forma estes controles deixam de ser executados pela aplicação e passam a ser executados pelos Triggers em determinadas situações 
  • Mecanismos de validação envolvendo múltiplas tabelas
  • Criação de contéudo de uma coluna derivada de outras colunas da tabela
  • Realizar análise e e atualizações em outras tabelas com base em alterações e/ou incluções da tabela atual
A criação de um Trigger envolve duas etapas :
  1. Um comando SQL que vai disparar o Trigger ( INSERT , DELETE , UPDATE)
  2. A ação que o Trigger vai executar ( Geralmente um bloco de códigos SQL )
Como não poderia deixar de ser , existem certas limatações na utilização de um Trigger :
  • Não é possivel criar um Trigger para uma visão
  • O resultado da execução de um Trigger é retornado para a aplicação que o chamou.
  • O comando WRITETEXT não ativa um Trigger
  • O comando TRUNCATE TABLE não pode ser reconhecido por um Trigger
  • Não podemos usar em um Trigger os seguintes comandos SQL :
    • ALTER DATABASE , ALTER TRIGGER , ALTER PROCEDURE , ALTER TABLE , ALTER VIEW . CREATE DATABASE , CREATE INDEX , CREATE PROCEDURE, CREATE SCHEMA, CREATE TABLE , DROP DATABASE, DROP TABLE , DROP PROCEDURE, DROP TRIGGER, DROP INDEX, GRANT , LOAD DATABASE, REVOKE, RESTORE DATABASE, TRUNCATE TABLE.
Como criar um Trigger
Podemos criar um Trigger usando o comando Create Trigger do SQL Server ou através do Enterprise Manager. A Sintaxe de um Trigger é a seguinte:

CREATE TRIGGER trigger_name 
ON { table | view } 
[ WITH ENCRYPTION ] 
{ 
    { { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] } 
        [ WITH APPEND ] 
        [ NOT FOR REPLICATION ] 
        AS 
        [ { IF UPDATE ( column ) 
            [ { AND | OR } UPDATE ( column ) ] 
                [ ...n ] 
        | IF ( COLUMNS_UPDATED ( ) { bitwise_operator } updated_bitmask ) 
                { comparison_operator } column_bitmask [ ...n ] 
        } ] 
        sql_statement [ ...n ] 
    } 
} 
  1. ON Table - a tabela para o qual o trigger esta sendo criado
  2. FOR - deve ser seguido do tipo de comando que acionam o trigger
  3. AFTER - determina que o trigger somente sera disparado quando todas as rotinas especificadas no comando de disparo forem executadas com sucesso
  4. INSTEAD OF - Determina que o trigger será executado ao invés do comando de disparo do mesmo.
  5. [ DELETE ] [INSERT] [UPDATE] - indicam o tipo de ação que deve disparar o trigger.
Quando você for criar um Trigger deverá definir :
  1. O nome
  2. A Tabela para o qual o Trigger irá ser criado
  3. Quando o Trigger deverá ser disparado
  4. Os comandos que determinam qual ação o Trigger deverá executar
Exemplo de Triggers:

1- O trigger abaixo será disparado quando alguém tentar incluir ou alterar dados na tabela Titles. Ele emite uma mensagem ao usuário. ( 50009 é uma mensagem definida para o usuário em sysmessages.)

USE pubs
IF EXISTS (SELECT name FROM sysobjects
      WHERE name = 'reminder' AND type = 'TR')
   DROP TRIGGER reminder
GO
CREATE TRIGGER reminder
ON titles
FOR INSERT, UPDATE 
AS RAISERROR (50009, 16, 10)
GO

Fonte(macoratti)
Continue lendo

segunda-feira, 19 de novembro de 2012

Cálculo com horas no Postgres

,

Olá galera,
Esses dias uma pessoa me mandou e-mail, pedido minha ajuda.
Vocês já sabem que estou sempre disposto a ajudar, muitas vezes
não dou a resposta, mas explico e mostro as ferramentas que auxiliam no desenvolvimento do problema.

Dê um peixe a um homem faminto e você o alimentará por um dia. Ensine-o a pescar, e você o estará alimentando pelo resto da vida. Provérbio chinês
Isso é algo, que tenho por base de pensamento em determinadas situações.
Mas como a dúvida que me enviaram eu vi que era um pouco complexa se tratando de POSTGRES! 

Enfim, vamos lá.

Foi apresentado o seguinte problema.

Uma criança vai ao parque de diversões se divertir, ela paga R$ 15,00 para entrar, ela fica no parque desde das 10:30h até as 15:37h. Qual é o tempo total que ela ficou no parque?

Primeiramente parece ser algo simples, é um conta de menos, onde subtrai o horário de saída com o horário de entrada.
Mas nem sempre é assim, no ramo de informática, principalmente se tratando de Postgres, no SQL Server é algo muito simples, gasta-se 1 linha de código para ser feito.

Vamos lá, nós temos a seguinte tabela

ID -> Identificação sequencial de entradas e saídas do parque
HORA_ENTRADA -> Hora que a pessoa entrou
HORA_SAIDA -> Hora que a pessoa saiu


CREATE TABLE PLAYGROUND(
ID integer,
HORA_ENTRADA timestamp,
HORA_SAIDA timestamp
);

Tipo Primitivo TimeStamp -> Formato que acompanha Data e Hora

Vamos inserir alguns registros, pensando que entrou 3 pessoas no Parque


INSERT INTO PLAYGROUND VALUES(1,'2012-11-19 14:00:00','2012-11-19 15:30:00');
INSERT INTO PLAYGROUND VALUES(2,'2012-11-19 12:00:32','2012-11-19 17:30:51');
INSERT INTO PLAYGROUND VALUES(3,'2012-11-19 9:42:01','2012-11-19 14:50:51');

Mostrando todos registros inseridos

SELECT * FROM PLAYGROUND;

Temos abaixo o seguinte resultado








Vamos fazer o cálculo de tempo total que a pessoa permaneceu no local


SELECT 
*,
(to_timestamp(to_char(HORA_SAIDA,'HH24:MI:SS'),'HH24:MI:SS') 

to_timestamp(to_char(HORA_ENTRADA,'HH24:MI:SS'),'HH24:MI:SS')) AS     TEMPO_PERMANECIDO,


FROM PLAYGROUND 
ORDER BY ID;

Temos abaixo o resultado da pesquisa




Lembrando que não é preciso criar um campo para armazenar o tempo total, pois viola as regras da 3ª Forma Normal. Se o campo pode ser obtido por algum cálculo não é necessário que ele faça parte da tabela.

Vamos explicar passo a passo

to_char(HORA_SAIDA,'HH24:MI:SS'),'HH24:MI:SS')  -> Converte campo para o formato de texto do tipo Char com a seguinte formatação HH24:MI:SS que é Horas to tipo 24h (pode ser 12h) e depois converte essa conversão do tipo Char para novamente TimeStamp (to_timestamp(to_char(HORA_SAIDA,'HH24:MI:SS'),'HH24:MI:SS') convertendo também para o formato de 24h.
Também foi usado o comando AS do SQL que é apelidar o nome do campo.

Ok!

Vamos detalhar mais essa situação, agora vamos obter o tempo máximo permanecido e o tempo minimo permanecido no local.


SELECT 
*,
(to_timestamp(to_char(HORA_SAIDA,'HH24:MI:SS'),'HH24:MI:SS') 

to_timestamp(to_char(HORA_ENTRADA,'HH24:MI:SS'),'HH24:MI:SS')) AS TEMPO_PERMANECIDO,

(SELECT MAX(to_timestamp(to_char(HORA_SAIDA,'HH24:MI:SS'),'HH24:MI:SS') 

to_timestamp(to_char(HORA_ENTRADA,'HH24:MI:SS'),'HH24:MI:SS')) 
FROM PLAYGROUND) AS MAIOR_TEMPO_PERMANECIDO,

(SELECT MIN(to_timestamp(to_char(HORA_SAIDA,'HH24:MI:SS'),'HH24:MI:SS') 

to_timestamp(to_char(HORA_ENTRADA,'HH24:MI:SS'),'HH24:MI:SS')) 
FROM PLAYGROUND) AS MENOR_TEMPO_PERMANECIDO

FROM PLAYGROUND 
ORDER BY ID;

Vejam, foi usado mais dois SubSelects que mostra o tempo Maximo com a função MAX e o tempo Minimo com a função MIN.

O Subselect funciona quando queremos retornar apenas um resultado da pesquisa, ou seja, aqui queremos retorna apenas o maior tempo e o menor tempo

Temos abaixo o resultado da pesquisa



Lembrando que todo esse processo poderia ser feito no próprio Java, mas se o banco de dados pode fazer isso, é melhor ainda, vai economizar muitas e muitas linhas de código para fazer isso no java..

A operação que pode ser feita, pode ser qualquer operação aritimética + , - , * , /
Esse código pode diminuir, tambem é possivel implementar várias outras funções como, mostrar a média,
para isso só usar mais SubSelect.

É isso aí gente, calculando com Postgres..


Continue lendo

sexta-feira, 26 de outubro de 2012

Sub-Consultas SQL (Sub-Select)

,

Sub-consultas SQL


Uma sub-consulta é uma instrução SELECT aninhada dentro de outra instrução SELECT, INSERT, DELETE ou UPDATE. Veja abaixo alguns exemplos de sintaxe:

  • Comparação [ANY|SOME|ALL] (instrução sql)

  • Expressão [NOT] IN (instrução sql)
  • Expressão [NOT] EXISTS (instrução sql)

Os predicados ANY e SOME, sinônimos, são utilizados para recuperar registro na consulta principal que satisfaçam a comparação com qualquer registro da sub-consulta.

Tabela A
XY
15
29
310
46

Tabela B

X Y 10 4 20 3 30 11 40 9

Exemplo:

Listagem 11: Exemplo de subconsulta
1
2
SELECT * FROM A
WHERE Y > ANY (SELECT Y FROM B WHERE X>20)

Resultado:
XY
310

Os registros da tabela A que forem maior do que qualquer registro do resultado da sub-consulta serão selecionados. Repare que nenhum registro da tabela A é maior do que 11, no entanto, o terceiro registro é maior do que 9.
Vamos a outro exemplo:

Listagem 12: Exemplo de subconsulta com o operador ANY
1
SELECT * FROM A WHERE Y > ANY (SELECT Y FROM B WHERE X < 40)
Resultado:
XY
15
29
310
46

Todos os registros foram selecionados porque o valor de y no resultado da sub-consulta assume 3, que é menor do que todos os valores de y da tabela A. Se utilizarmos o ANY com sinal de igualdade teremos o mesmo resultado da cláusula IN. Exemplo:

Listagem 13: Exemplo com o operador ANY e sinal de igualdade
1
SELECT * FROM A WHERE Y = ANY (SELECT Y FROM B)
Resultado:
XY
29

O predicado ANY também pode ser utilizado em conjunto com os comandos UPDATE e DELETE. Veja o exemplo:


Listagaem 14: Update usando o operador ANY
1
2
3
UPDATE A
SET X = X * 10
WHERE Y > ANY (SELECT Y FROM B WHERE X < 40)

Listagem 15: Delete usando o operador ANY
1
2
DELETE FROM A
WHERE Y > ANY (SELECT Y FROM B WHERE X < 40)


O predicado ALL é utilizado para recuperar os registros da consulta principal que satisfaçam a comparação com todos os registros recuperados na sub-consulta. Observe os exemplos:


Listagem 16: Exemplo de select com operador ANY
1
SELECT * FROM A WHERE Y > ALL (SELECT Y FROM B)

Resultado:
XY


Listagem 17: Outro exemplo de select com operador ANY
1
SELECT * FROM A WHERE Y > ALL (SELECT Y FROM B WHERE X > 30)
Resultado:
XY
310


O uso de != ALL equivale a NOT IN.


Listagem 18: Subconsulta com operador ALL
1
SELECT * FROM A WHERE Y != ALL (SELECT Y FROM B)
Resultado:
XY
15
310
46


O predicado IN é utilizado para recuperar apenas os registros na consulta principal que contém equivalência na sub-consulta. É o mesmo que =ANY.


Listagem 19: Consulta com operador IN
1
SELECT * FROM A WHERE Y IN(SELECT Y FROM B)
Resultado:
XY
29


No código a seguir retornamos os empregados que venderam um montante maior que R$ 50.000,00.

Listagem 20: Select com operador IN utilizando HAVING
1
2
3
4
SELECT * FROM EMPREGADO WHERE CODIGO IN
(SELECT CODEMPREGADO FROM VENDAS
GROUPY BY CODEMPREGADO
HAVING MAX(VALORTOTAL) > 50000)

De maneira contrária, NOT IN pode ser utilizado para recuperar apenas os registros na consulta principal para os quais não exista equivalência na sub-consulta.


Listagem 21: Select com operador NOT IN
1
SELECT * FROM A WHERE Y NOT IN(SELECT Y FROM B)

Resultado:
XY
15
310
46


O predicado EXISTS determina se a sub-consulta retorna algum registro. Esta cláusula produz resultados semelhantes ao uso de IN. Veja exemplo:

Listagem 22: Consulta com operador EXISTS
1
2
3
4
5
SELECT * FROM EMPREGADO WHERE EXISTS
(SELECT * FROM PEDIDOS
 WHERE EMPREGADO.CODIGO = PEDIDOS.CODEMPREGADO
 GROUP BY PEDIDOS.CODEMPREGADO
 HAVING MAX(PEDIDOS.VALOR_TOTAL) > 50000)

Neste comando são retornados o nome e o departamento dos funcionários cuja soma de vendas ultrapassaram R$ 50.000,00.

O predicado NOT EXISTS também pode ser utilizado produzindo o efeito contrário:

Listagem 23: Consulta com operador NOT EXISTS
1
2
3
SELECT * FROM EMPREGADO WHERE NOT EXISTS
(SELECT * FROM PEDIDOS
WHERE EMPREGADO.CODIGO = PEDIDOS.EMPREGADO)

Conclusão



Referências

  • Slides do professor Daniel Wildt da Universidade Federal do Rio Grande do Sul
  • BATTISTI, 
  • Julio. SQL SERVER 2005 ADMINISTRAÇÃO E DESENVOLVIMENTO


Fonte(linhadecodigo)
Continue lendo
 

Java Aberto Copyright © 2011 -- Template created by O Pregador -- Powered by Blogger