[firebase-br] Ajuda pra montar um SQL mais rápido

Carlos H. Cantu (TeamFB) listas em warmboot.com.br
Sex Fev 22 09:11:29 -03 2008


Em uma das edições da dbFreeMagazine (www.dbfreemagazine.com.br) saiu
um artigo sobre selects e suas variações.

No meu segundo livro também tem um capítulo dedicado ao tema.

[]s
Cantu (Membro do TeamFB - FireBase)
http://www.warmboot.com.br
FireBase - http://www.FireBase.com.br

FH> Valeu pessoal, funcionou muitíssimo melhor com o INNER...

FH> Agora.. alguém poderia me explicar a diferença entre o INNER e o LEFT join?

FH> []s

FH> Fellipe H.

FH> "Fellipe Henrique" <fellipe.h em uol.com.br> 
FH> escreveu na mensagem news:fpkjki$eo1$1 em ger.gmane.org...
>> Olá amigos, tenho um SQL, porém ele demora muito pra retornar os dados, já 
>> tentei adicionar indices e nada. O que eu quero, é trazer os clientes 
>> ATIVOS,  QUE COMPRARAM, UM DETERMINADO PRODUTO  em um determinado periodo. 
>> segue o meu SQL, hoje ele demora por volta de uns 2 minutos pra trazer  no 
>> máximo uns 10 registros. Se alguém puder me ajudar ficarei extremamente 
>> grato.
>>
>> Desde já agradeço
>> Fellipe H.
>>
>> SQL:
>> SELECT vp2.data_emissao, vp2.data_faturamento ,
>>      VP2.idvenda_pedido , C.STATUS ,VP2.IDCLIENTE,
>>      C.RAZAO_SOCIAL, prod.idgrupo, prod.idsubgrupo , prod.referencia, 
>> prod.descricao,
>>      vpi.preco_unit, vpi.qnt, vp2.idrepresentante , rep.nome, 
>> gru.descricao as fk_nomegru,
>>      ( vpi.preco_unit * vpi.qnt ) as fk_total,
>>      sub.descricao as fk_nomesub,
>>      ( SELECT FIRST 1 CC.TELEFONE  FROM CLIENTE_CONTATOS CC
>>        WHERE CC.IDCLIENTE = VP2.IDCLIENTE  ) AS FK_FONE,
>>      ( SELECT FIRST 1 CC.NOME FROM CLIENTE_CONTATOS CC
>>        WHERE CC.IDCLIENTE = VP2.IDCLIENTE  ) AS FK_CONTATO ,
>>      C.CIDADE , C.ENDERECO
>> FROM VENDA_PEDIDO VP2
>> LEFT JOIN CLIENTE C ON (C.IDCLIENTE = VP2.IDCLIENTE)
>> LEFT JOIN venda_pedido_itens VPI ON (vpi.idvenda_pedido = 
>> VP2.idvenda_pedido )
>> LEFT JOIN produto prod ON (prod.idproduto = VPi.idproduto )
>> LEFT JOIN grupo gru ON ( gru.idgrupo = prod.idgrupo )
>> LEFT JOIN sub_grupo sub ON ( sub.idsub_grupo = prod.idsubgrupo )
>> LEFT JOIN representante rep ON ( rep.idrepresentante = 
>> vp2.idrepresentante )
>> WHERE ( VP2.IDCLIENTE IN( SELECT VP1.IDCLIENTE FROM VENDA_PEDIDO_ITENS 
>> VPI1
>>                          LEFT JOIN VENDA_PEDIDO VP1 ON (VP1.IDVENDA_PEDIDO 
>> = VPI1.IDVENDA_PEDIDO)
>>                          LEFT JOIN PRODUTO P1 ON (P1.IDPRODUTO = 
>> VPI1.IDPRODUTO)
>>                          WHERE ( VP1.DATA_EMISSAO BETWEEN :PDATA1 AND 
>> :PDATA2 ) )
>>  AND ( C.STATUS =  'A')
>>  AND ( VP2.DATA_EMISSAO BETWEEN :PDATA1 AND :PDATA2 )
>>
>>
>> As tabelas principais:
>>
>> CREATE TABLE VENDA_PEDIDO (
>>    IDVENDA_PEDIDO     INTEGER NOT NULL,
>>    DATA_CADASTRO      DATE NOT NULL,
>>    DATA_EMISSAO       DATE NOT NULL,
>>    DATA_FATURAMENTO   DATE,
>>    HORA_FATURAMENTO   TIME,
>>    PROGRAMADO         CHAR(1) COLLATE PXW_INTL850,
>>    STATUS             CHAR(1) NOT NULL COLLATE PXW_INTL850,
>>    TIPO_PEDIDO        CHAR(1) COLLATE PXW_INTL850,
>>    TIPO_NOTA          CHAR(1) COLLATE PXW_INTL850,
>>    IDCLIENTE          INTEGER NOT NULL,
>>    IDFUNCIONARIO      INTEGER,
>>    IDREPRESENTANTE    INTEGER,
>>    IDVENCIMENTO       INTEGER,
>>    IDCFOP             INTEGER,
>>    IDBANCO            INTEGER,
>>    IDTRANPORTADORA    INTEGER,
>>    TRANS_TIPOFRETE    SMALLINT,
>>    TRANS_VOL_QNT      D_QNT,
>>    TRANS_VOL_ESPECIE  VARCHAR(10) COLLATE PXW_INTL850,
>>    TRANS_VOL_MARCA    VARCHAR(10) COLLATE PXW_INTL850,
>>    TRANS_VOL_NUM      VARCHAR(10) COLLATE PXW_INTL850,
>>    TRANS_VOL_PESOBRU  D_QNT,
>>    TRANS_VOL_PESOLIQ  D_QNT,
>>    TRANS_IDMENSAGEM   INTEGER,
>>    TRANS_MENSAGEM     BLOB SUB_TYPE 1 SEGMENT SIZE 80,
>>    PERC_DESC          D_DINHEIRO NOT NULL,
>>    VLR_DESC           D_DINHEIRO NOT NULL,
>>    PERC_ACREC         D_DINHEIRO NOT NULL,
>>    VLR_ACREC          D_DINHEIRO NOT NULL,
>>    VLR_BASE_CALC      D_DINHEIRO,
>>    VLR_BASE_ST        D_DINHEIRO,
>>    VLR_ICMS_ST        D_DINHEIRO,
>>    VLR_ICMS           D_DINHEIRO,
>>    VLR_PRODUTO        D_DINHEIRO NOT NULL,
>>    VLR_TOTAL          D_DINHEIRO NOT NULL,
>>    QNT_TOTAL_PROD     INTEGER,
>>    ENTR_LOGRADOURO    D_ENDERECO,
>>    ENTR_BAIRRO        D_BAIRRO,
>>    ENTR_CIDADE        D_CIDADE,
>>    ENTR_CEP           D_CEP,
>>    ENTR_UF            CHAR(2) COLLATE PXW_INTL850,
>>    ENTR_PONTOREF      D_DESCRICAO,
>>    FRETE              D_DINHEIRO,
>>    SEGURO             D_DINHEIRO,
>>    OUTRAS_DESP        D_DINHEIRO,
>>    PERC_COMISSAO      D_DINHEIRO,
>>    VLR_COMISSAO       D_DINHEIRO,
>>    MAO_OBRA           D_DINHEIRO,
>>    PERC_ISS           D_DINHEIRO,
>>    VLR_ISS            D_DINHEIRO,
>>    IPI                D_DINHEIRO,
>>    OBS                BLOB SUB_TYPE 1 SEGMENT SIZE 80,
>>    IDCAIXA            INTEGER,
>>    IDCONTA_RECEBER    INTEGER,
>>    FRENTE_CAIXA       SMALLINT,
>>    TIPO_FRETE         SMALLINT,
>>    NUM_NOTA           VARCHAR(10) COLLATE PXW_INTL850,
>>    TOTAL_PRECO_CUSTO  D_DINHEIRO,
>>    PERC_LUCRO         D_DINHEIRO,
>>    IDCFOP_SERV        INTEGER,
>>    IDPEDIDO_INTERNO   INTEGER,
>>    MARCAPEDIDO        VARCHAR(1)
>> );
>>
>>
>> CREATE TABLE VENDA_PEDIDO_ITENS (
>>    IDVENDA_PEDIDO_ITENS        INTEGER NOT NULL,
>>    IDVENDA_PEDIDO              INTEGER NOT NULL,
>>    IDPRODUTO                   INTEGER NOT NULL,
>>    IDCFOP                      INTEGER,
>>    PEDIDO_PROGRAMADO           CHAR(1) COLLATE PXW_INTL850,
>>    QNT                         D_QNT NOT NULL,
>>    QNT_PENDENTE                D_QNT,
>>    QNT_DEVOLVIDA               D_QNT,
>>    PRECO_UNIT                  D_DINHEIRO NOT NULL,
>>    PRECO_CUSTO                 D_DINHEIRO,
>>    PERC_DESC                   D_DINHEIRO,
>>    VLR_DESC                    D_DINHEIRO,
>>    PERC_ACREC                  D_DINHEIRO,
>>    VLR_ACREC                   D_DINHEIRO,
>>    VALOR_TOTAL                 D_DINHEIRO NOT NULL,
>>    SI_PERC_BASE_CALC           D_DINHEIRO,
>>    SI_VLR_BASE_CALC            D_DINHEIRO,
>>    SI_FRETE                    D_DINHEIRO,
>>    SI_SEGURO                   D_DINHEIRO,
>>    SI_OUTRAS_DESP              D_DINHEIRO,
>>    SI_MAO_OBRA                 D_DINHEIRO,
>>    SI_VLR_ICMS                 D_DINHEIRO,
>>    SI_VLR_DESC                 D_DINHEIRO,
>>    SI_VLR_ACREC                D_DINHEIRO,
>>    SI_VLR_IPI                  D_DINHEIRO,
>>    SI_ALIQUOTA                 D_DINHEIRO,
>>    SI_CST                      CHAR(3) COLLATE PXW_INTL850,
>>    SI_COD_TRIB                 CHAR(1) COLLATE PXW_INTL850,
>>    SI_NUM_ITEM                 SMALLINT,
>>    SI_ST_ALIQ                  D_DINHEIRO,
>>    SI_ST_BASE                  D_DINHEIRO,
>>    SI_ST_ICMS                  D_DINHEIRO,
>>    ULT_CUSTO_MEDIO_PROD        D_DINHEIRO,
>>    PRECO_CUSTO_MEDIO           D_DINHEIRO,
>>    PERC_COMIS_PROD             D_DINHEIRO,
>>    VLR_COMIS_PROD              D_DINHEIRO,
>>    IDCOD_TRIBUTARIO_ALIQUOTAS  INTEGER
>> );
>>
>>
>>
>>
>> /******************************************************************************/
>> /****                             Primary Keys ****/
>> /******************************************************************************/
>>
>> ALTER TABLE VENDA_PEDIDO ADD CONSTRAINT PK_VENDA_PEDIDO PRIMARY KEY 
>> (IDVENDA_PEDIDO);
>> ALTER TABLE VENDA_PEDIDO_ITENS ADD CONSTRAINT PK_VENDA_PEDIDO_ITENS 
>> PRIMARY KEY (IDVENDA_PEDIDO_ITENS);
>>
>>
>> /******************************************************************************/
>> /****                             Foreign Keys ****/
>> /******************************************************************************/
>>
>> ALTER TABLE VENDA_PEDIDO ADD CONSTRAINT FK_VENDA_PEDIDO_1 FOREIGN KEY 
>> (IDCLIENTE) REFERENCES CLIENTE (IDCLIENTE);
>> ALTER TABLE VENDA_PEDIDO ADD CONSTRAINT FK_VENDA_PEDIDO_2 FOREIGN KEY 
>> (IDREPRESENTANTE) REFERENCES REPRESENTANTE (IDREPRESENTANTE);
>> ALTER TABLE VENDA_PEDIDO ADD CONSTRAINT FK_VENDA_PEDIDO_3 FOREIGN KEY 
>> (IDVENCIMENTO) REFERENCES VENCIMENTO (IDVENCIMENTO);
>> ALTER TABLE VENDA_PEDIDO ADD CONSTRAINT FK_VENDA_PEDIDO_4 FOREIGN KEY 
>> (IDCFOP) REFERENCES CFOP (IDCFOP);
>> ALTER TABLE VENDA_PEDIDO ADD CONSTRAINT FK_VENDA_PEDIDO_5 FOREIGN KEY 
>> (IDTRANPORTADORA) REFERENCES TRANSPORTADORA (IDTRANSPORTADORA);
>> ALTER TABLE VENDA_PEDIDO ADD CONSTRAINT FK_VENDA_PEDIDO_6 FOREIGN KEY 
>> (IDFUNCIONARIO) REFERENCES FUNCIONARIO (IDFUNCIONARIO);
>> ALTER TABLE VENDA_PEDIDO ADD CONSTRAINT FK_VENDA_PEDIDO_7 FOREIGN KEY 
>> (TRANS_IDMENSAGEM) REFERENCES MENSAGEM (IDMENSAGEM);
>> ALTER TABLE VENDA_PEDIDO ADD CONSTRAINT FK_VENDA_PEDIDO_8 FOREIGN KEY 
>> (IDCFOP_SERV) REFERENCES CFOP (IDCFOP);
>> ALTER TABLE VENDA_PEDIDO_ITENS ADD CONSTRAINT FK_VENDA_PEDIDO_ITENS_1 
>> FOREIGN KEY (IDVENDA_PEDIDO) REFERENCES VENDA_PEDIDO (IDVENDA_PEDIDO) ON 
>> DELETE CASCADE;
>> ALTER TABLE VENDA_PEDIDO_ITENS ADD CONSTRAINT FK_VENDA_PEDIDO_ITENS_2 
>> FOREIGN KEY (IDPRODUTO) REFERENCES PRODUTO (IDPRODUTO);
>> ALTER TABLE VENDA_PEDIDO_ITENS ADD CONSTRAINT FK_VENDA_PEDIDO_ITENS_3 
>> FOREIGN KEY (IDCOD_TRIBUTARIO_ALIQUOTAS) REFERENCES 
>> COD_TRIBUTARIO_ALIQUOTAS (IDCOD_TRIBUTARIO_ALIQUOTAS);
>>
>>
>>
>>


FH> --------------------------------------------------------------------------------


FH> ______________________________________________
FH> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
FH> Para saber como gerenciar/excluir seu cadastro na lista, use: 
FH> http://www.firebase.com.br/fb/artigo.php?id=1107
FH> Para consultar mensagens antigas: http://firebase.com.br/pesquisa 









Mais detalhes sobre a lista de discussão lista