Arquivo
Série Mentes Brilhantes – Parte 9
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…
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…
Veja aqui quando começou a esquentar…
Veja aqui a explicação do Brad…
http://bradsruminations.blogspot.com/2010/04/looking-under-hood.html
Veja aqui quando começou a ferver…
Série Mentes Brilhantes – Parte 8
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
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
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
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
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
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
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
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





