quinta-feira, 10 de setembro de 2020

Comandos não tão básicos SQL Server

 Continuação da revisão sobre os principais comandos do SQL Server:

  • Distinct: remove registros repetidos.
SELECT DISTINCT EMBALAGEM, TAMANHO 
FROM [TABELA DE PRODUTOS]
GO
  • Order By: Alterando a ordem em que os registros são exibidos. O comando ASC torna a ordem ascendente e DESC (descendente -> do maior para o menor).
SELECT * 
FROM [TABELA DE PRODUTOS]
ORDER BY [PREÇO DE LISTA] DESC
GO

    Pode-se ordenar as colunas por mais de um critério:

SELECT [EMBALAGEM], [NOME DO PRODUTO]
FROM [TABELA DE PRODUTOS]
ORDER BY [EMBALAGEM] DESC, [NOME DO PRODUTO] ASC
GO
  • Group by: Utilizado para fazer agrupamentos. Este comando deve ser utilizado em conjunto com uma função. Exemplos de função são: SUM (soma), AVG (média), MIN (mínimo), MAX (máximo), COUNT (contador).
SELECT ESTADO, SUM([LIMITE DE CREDITO])
FROM [TABELA DE CLIENTES] GROUP BY ESTADO
GO

    Sempre que for utilizar fórmula ou função dentro da especificação do SELECT, e conter um agrupamento, esta função ou fórmula deve fazer parte do GROUP BY:

SELECT YEAR(DATA), COUNT(*) 
FROM [NOTAS FISCAIS] 
GROUP BY YEAR(DATA)
GO
  • Having: Permite filtrar dados agrupados (utilizando o group by).
SELECT BAIRRO, ESTADO, SUM([LIMITE DE CREDITO]) AS SOMA_LIMITE FROM [TABELA DE CLIENTES]
WHERE [ESTADO] = 'SP' 
GROUP BY BAIRRO, ESTADO HAVING SUM([LIMITE DE CREDITO]) >= 140000
GO
    
    O comando having pode ainda ser utilizado em condições compostas:

SELECT EMBALAGEM, MAX([PREÇO DE LISTA]), MIN([PREÇO DE LISTA]) FROM [TABELA DE PRODUTOS]
GROUP BY EMBALAGEM HAVING SUM([PREÇO DE LISTA]) <= 80 AND MAX([PREÇO DE LISTA]) >= 6
GO
  • Case/then/else/end: Utiliza condições para classificar resultados. Exemplo a seguir: Classifique os produtos em CAROS (preço maior que 12), EM CONTA (preço entre 7 e 12) ou BARATOS (preço menor que 7).
SELECT [NOME DO PRODUTO],
CASE WHEN [PREÇO DE LISTA] >= 12 THEN 'PRODUTO CARO'
WHEN [PREÇO DE LISTA] >= 7 AND [PREÇO DE LISTA] < 12 THEN 'PRODUTO EM CONTA'
ELSE 'PRODUTO BARATO' 
END
FROM
[TABELA DE PRODUTOS]
GO