[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