Arquivo

Arquivo do Autor

Série Mentes Brilhantes – Parte 9

17 de maio de 2010 1 comentário

O que fazer quando você odeia like?

 

Não use o like, crie sus próprios meios para filtrar os dados

SELECT*FROM Pedido

WHERESubString(Vendedor,1,2)=‘Fa’

Ordem dos Joins…

14 de maio de 2010 5 comentários

Galera tem uma discução maravilhosa rolando sobre ordem das tabelas nos joins…

 

Eu com certeza vou blogar sobre isso logo… por enquanto NÃO deixem de acompanhar….

 

Veja aqui onde tudo começou…

http://social.msdn.microsoft.com/Forums/en-US/transactsql/thread/278c272b-5ebb-4fda-8985-49927bbd3799/#b5592aec-e146-4972-ab75-5e4fcb81a43e

 

Veja aqui quando começou a esquentar…

http://blogs.msdn.com/conor_cunningham_msft/archive/2010/04/23/conor-vs-left-outer-join-reordering.aspx

 

Veja aqui a explicação do Brad…

http://bradsruminations.blogspot.com/2010/04/looking-under-hood.html

 

Veja aqui quando começou a ferver…

http://blogs.msdn.com/conor_cunningham_msft/archive/2010/05/14/conor-vs-anti-semi-join-reordering.aspx

 

 

Categorias:Não categorizado

Série Mentes Brilhantes – Parte 8

13 de maio de 2010 1 comentário

O que fazer quando você odeia fazer joins?

 

Crie SubQuerys para retornar os dados das colunas.

SELECT ID_Pedido,

       Valor,

      (SELECT Nome     FROM Clientes WHERE Clientes.ID_Cliente = Pedidos.ID_Cliente)AS NomeCliente,

      (SELECT Endereco FROM Clientes WHERE Clientes.ID_Cliente = Pedidos.ID_Cliente)AS EnderecoCliente,

      (SELECT Bairro   FROM Clientes WHERE Clientes.ID_Cliente = Pedidos.ID_Cliente)AS BairroCliente,

      (SELECT Cidade   FROM Clientes WHERE Clientes.ID_Cliente = Pedidos.ID_Cliente)AS CidadeCliente

FROM Pedidos

WHERE ID_Cliente = 10

Série Mentes Brilhantes – Parte 7

12 de maio de 2010 3 comentários

O que fazer quando você quer atribuir um valor para uma variável mas somente se o valor existir na tabela?

Simples, verifique se o valor existe na tabela antes de atribui-lo.

IF EXISTS(SELECT 1

            FROM Tab1

           WHERE Col1 = @Col1

             AND Col2 = ‘FR’)

BEGIN

  SELECT @Col3 = Col3

    FROM Tab1

   WHERE Col1 = @Col1

     AND Col2 = ‘FR’;

END

 

IF EXISTS(SELECT 1

            FROM Tab1

           WHERE Col1 = @Col1

             AND Col2 = ‘TA’)

BEGIN

  SELECT @Col3 = Col3

    FROM Tab1

WHERE Col1 = @Col1

     AND Col2 = ‘TA’;

END

 

Ps: Sabe aonde eu já vi isso? No script da procedure sp_who2. Que beleza!

Série Mentes Brilhantes – Parte 6

11 de maio de 2010 3 comentários

O que fazer quando você precisa que o SQL retorne os dados, mas você não quer esperar muito tempo para que ele leia as informações?

 

Use um hint para retornar as primeiras 5 milhões de linhas FAST, ou seja, rápido.

SELECT * FROM Pedidos

OPTION(FAST 5000000)

Série Mentes Brilhantes – Parte 5

11 de maio de 2010 1 comentário

O que fazer quando você gosta muito de fazer Updates?

Crie um Update para cada campo que será atualizado

UPDATE Clientes SET Nome = @NovoNome

WHERE ID_Cliente = @ID

 

UPDATE Clientes SET Sobrenome = @NovoSobrenome

WHERE ID_Cliente = @ID

 

UPDATE Clientes SET Endereco = @NovoEndereco

WHERE ID_Cliente = @ID 

UPDATE Clientes SET Bairro = @NovoBairro

WHERE ID_Cliente = @ID

 

UPDATE Clientes SET CEP = @NovoCEP

WHERE ID_Cliente = @ID

Série Mentes Brilhantes – Parte 4

10 de maio de 2010 3 comentários

O que fazer quando você gosta muito de uma tabela?

 

Sempre faça joins com ela, mesmo quando você não precisa dos dados.

SELECT Pedido.Codigo_Pedido

  FROM Pedido

INNER JOIN Clientes

    ON Pedido.ID_Cliente = Clientes.ID_Cliente

Série Mentes Brilhantes – Parte 3

9 de maio de 2010 5 comentários

O que fazer quando você não gosta do SQL Server e dos desenvolvedores que irão dar manutenção no seu código?

 

Crie uma consulta simples pra eles

DECLARE @Col1  Integer,

        @Col2  Integer,

        @Col3  Integer;

 

SET @Col1 = <Input1>;

SET @Col2 = <Input2>;

SET @Col3 = <Input3>;

 

IF (@Col3 = 0)

BEGIN

  SELECT Tab1.Col1,

         Tab1.Col2,

         Tab1.Col3,

         Tab1.Col7,

         Tab1.Col8,

         Tab1.Col6,

         Tab1.Col9,

         Tab1.Col10,

         CASE WHEN ((Tab2.Col11 IS NOT NULL) AND

                    (Tab3.Col12 = ‘P’) AND

                    (Tab3.Col13 = ‘G’))

 

              THEN CASE WHEN (Tab2.Col11 = ‘LL’)

                        THEN (SELECT CASE WHEN (Tab4.Col15 = ‘Q’)

                                          THEN Tab4.Col16

                                          ELSE Tab4.Col17

                                     END

                         FROM Tab4(NOLOCK)

                         WHERE Tab4.Col1 = Tab1.Col1 AND

                               Tab4.Col2 = Tab1.Col2 AND

                               Tab4.Col3 = Tab1.Col3 AND

                               Tab4.Col4 IN(SELECT Col4

                                               FROM Tab5(NOLOCK)

                                               WHERE Tab5.Col1 = Tab1.Col1 AND

                                                     Tab5.Col5 = Tab1.Col6))

                        ELSE CASE WHEN (Tab2.Col11 = ‘LF’)

                                  THEN (SELECT CASE WHEN (Tab4_Fixos.Col15 = ‘Q’)

                                                    THEN Tab4_Fixos.Col16

                                                    ELSE Tab4_Fixos.Col17

                                                END

                                        FROM Tab4_Fixos(NOLOCK)

                                        WHERE Tab4_Fixos.Col1 = Tab1.Col1 AND

                                              Tab4_Fixos.Col2 = Tab1.Col2 AND

                                              Tab4_Fixos.Col3 = Tab1.Col3 AND

                                              Tab4_Fixos.Col4 IN(SELECT Col4

                                                                    FROM Tab5(NOLOCK)

                                                                    WHERE Tab5.Col1 = Tab1.Col1 AND

                                                                          Tab5.Col5 = Tab1.Col6))

                                  ELSE CASE WHEN (Tab2.Col11 = ‘2F’)

                                       THEN (SELECT CASE WHEN (Tab6.Col15 = ‘Q’)

                                                         THEN Tab6.Col16

                                                         ELSE Tab6.Col17

                                                     END

                                             FROM Tab6(NOLOCK)

                                             WHERE Tab6.Col1 = Tab1.Col1 AND

                                                   Tab6.Col2 = Tab1.Col2 AND

                                                   Tab6.Col3 = Tab1.Col3 AND

                                                   Tab6.Col4 IN(SELECT Col4

                                                                   FROM Tab5(NOLOCK)

                                                                   WHERE Tab5.Col1 = Tab1.Col1 AND

                                                                         Tab5.Col5 = Tab1.Col6))

                                       ELSE (SELECT CASE WHEN (Tab4_Lim.Col15 = ‘Q’)

                                                         THEN Tab4_Lim.Col16

                                                         ELSE Tab4_Lim.Col17

                                                     END

                                             FROM Tab4_Lim(NOLOCK)

                                             WHERE Tab4_Lim.Col1 = Tab1.Col1 AND

                                                   Tab4_Lim.Col2 = Tab1.Col2 AND

                                                   Tab4_Lim.Col3 = Tab1.Col3 AND

                                                   Tab4_Lim.Col4 IN(SELECT Col4

                                                                       FROM Tab5(NOLOCK)

                                                                       WHERE Tab5.Col1 = Tab1.Col1 AND

                                                                             Tab5.Col5 = Tab1.Col6))

                                       END

                             END

                   END

              ELSE Tab1.Col18

         END AS Col19,

         Tab1.Col18,

         Tab1.Col20,

         Tab7.Col21,

         Tab8.Col22,

         Tab3.Col23,

         Tab1.Col24,

         CASE WHEN (Tab2.Col11 = ‘LL’)

              THEN (SELECT Tab4.Col15

                    FROM Tab4(NOLOCK)

                    WHERE Tab4.Col1 = Tab1.Col1 AND

                          Tab4.Col2 = Tab1.Col2 AND

                          Tab4.Col3 = Tab1.Col3 AND

                         Tab4.Col4 IN(SELECT Col4

                                         FROM Tab5(NOLOCK)

                                        WHERE Tab5.Col1 = Tab1.Col1 AND

                                               Tab5.Col5 = Tab1.Col6))

              WHEN (Tab2.Col11 = ‘LI’)

              THEN (SELECT Tab4_Lim.Col15

                    FROM Tab4_Lim(NOLOCK)

                    WHERE Tab4_Lim.Col1 = Tab1.Col1 AND

                          Tab4_Lim.Col2 = Tab1.Col2 AND

                          Tab4_Lim.Col3 = Tab1.Col3 AND

                          Tab4_Lim.Col4 IN(SELECT Col4

                                              FROM Tab5(NOLOCK)

                                              WHERE Tab5.Col1 = Tab1.Col1 AND

                                                    Tab5.Col5 = Tab1.Col6))

              WHEN (Tab2.Col11 = ‘LF’)

              THEN ‘F’

              WHEN (Tab2.Col11 = ‘2F’)

              THEN ‘2’

         END AS Col15,

        Tab1.Col25

  FROM Tab1(NOLOCK)

  INNER JOIN Tab7(NOLOCK)

     ON Tab7.Col26 = Tab1.Col26 AND

           Tab7.Tipo = Tab1.Tipo

  INNER JOIN Tab8(NOLOCK)

     ON Tab8.Col7 = Tab1.Col7

  INNER JOIN Tab3(NOLOCK)

     ON Tab1.Col1 = Tab3.Col1

  RIGHT OUTER JOIN Tab2(NOLOCK)

     ON Tab2.Col1 = Tab1.Col1 AND

           Tab2.Col2 = Tab1.Col2 AND

           Tab2.Col3 = Tab1.Col3 AND

           Tab2.Col4 IN(SELECT Col4

                           FROM Tab5(NOLOCK)

                          WHERE Tab5.Col1 = Tab1.Col1 AND

                                Tab5.Col5 = Tab1.Col6)

  WHERE Tab1.Col1 = @Col1 AND

        Tab1.Col2 = @Col2 AND

        Tab1.Col3 = @Col3 AND

        Tab1.Col10 > 0 AND

        Tab1.Col8 IS NOT NULL

Série Mentes Brilhantes – Parte 2

7 de maio de 2010 1 comentário

O que fazer quando você não gosta da clausula WHERE?

 

Use a clausula HAVING

SELECT Cliente, Vendedor

  FROM Pedido

GROUP BY Cliente, Vendedor, Data

HAVING Data BETWEEN ‘20090101’ AND ‘20090201’

Série Mentes Brilhantes – Parte 1

6 de maio de 2010 4 comentários

Vou começar a publicar uma série que chamei de “Mentes Brilhantes”… espero que gostem 🙂 ….

O que fazer quando você precisa que o resultado de uma consulta não retorne linhas duplicadas?

Use o DISTINCT

SELECT DISTINCT Cliente, Vendedor

  FROM Pedido

 

O que fazer quando você precisa que o resultado de uma consulta não retorne nenhuma linha duplicada?

 

Use o GROUP BY

SELECT Cliente, Vendedor

  FROM Pedido

GROUP BY Cliente, Vendedor

O que fazer quando você precisa que o resultado de uma consulta não retorne nenhuma linha duplicada meeeesmo?

 

Use DISTINCT + GROUP BY. J

SELECT DISTINCT Cliente, Vendedor

  FROM Pedido

GROUP BY Cliente, Vendedor