quarta-feira, 13 de maio de 2020

Comandos básicos SQL Server

  • Criando um banco de dados:
CREATE DATABASE [SUCOS_VENDAS]
GO

OBS: O uso de [ ] permite que o nome da tabela e das colunas tenham espaços e caracteres especiais.
  • Criando uma tabela no banco:
CREATE TABLE [dbo].[TABELA DE PRODUTOS](
[CODIGO DO PRODUTO] [varchar](10) NULL,
[NOME DO PRODUTO] [varchar](50) NULL,
[EMBALAGEM] [varchar](20) NULL,
[TAMANHO] [varchar](10) NULL,
[SAVBOR] [varchar](20) NULL,
[PREÇO DE LISTA] [smallmoney] NULL
GO
  • Excluindo uma tabela no banco:
DROP TABLE DB_TB_COND_FRETE_ATRIB_PROD
GO
  • Inserindo dados em uma tabela:
INSERT INTO [TABELA DE PRODUTOS]
([CODIGO DO PRODUTO], [NOME DO PRODUTO],[EMBALAGEM],[TAMANHO], [SABOR], [PREÇO DE LISTA])
VALUES 
('04012501','LIGHT','LATA', '350 mL','MELANCIA', 4.56)
GO
  • Alterando dados de uma tabela:
UPDATE [TABELA DE PRODUTOS]
SET [EMBALAGEM] = 'PET', [PREÇO DE LISTA] = 3.15
WHERE [CODIGO DO PRODUTO] = '04012501'
GO
  • Excluindo dados de uma tabela:
DELETE FROM [TABELA DE PRODUTOS]
WHERE [CODIGO DO PRODUTO] = '04012501'
  • Adicionando Primary Key em uma tabela:
ALTER TABLE [TABELA DE PRODUTOS]
ADD CONSTRAINT PK_PRODUTOS
PRIMARY KEY CLUSTERED([CODIGO DO PRODUTO])
GO
  • Adicionando colunas na tabela: 
ALTER TABLE [TABELA DE VENDEDORES]
ADD [DATA ADMISSÃO] DATE NULL, [DE FÉRIAS] BIT NULL
GO
  • Alterando uma coluna:
ALTER TABLE [TABELA DE PRODUTOS]
ALTER COLUMN [CODIGO DO PRODUTO]
VARCHAR(10) NOT NULL
GO
  • Inserindo um dado do tipo 'data':
INSERT INTO [TABELA DE CLIENTES]
([CPF],[DATA DE NASCIMENTO])
VALUES
('0000000','1987-01-21')
GO
  • Selecionar os 3 primeiros registros da tabela:
SELECT TOP 3 *
FROM  [TABELA DE VENDEDORES]
GO
  • Selecionando colunas específicas da tabela:
SELECT [MATRICULA], [PERCENTUAL COMISSÃO]
FROM [TABELA DE VENDEDORES]
GO
  • Dando apelidos para as colunas selecionadas:
SELECT [MATRICULA] AS COD_ALUNO, [PERCENTUAL COMISSÃO] AS PERCENTUAL
FROM [TABELA DE VENDEDORES]
GO
  • Data é pesquisada por padrão pela ordem 'ano-mês-dia':
SELECT * 
FROM [TABELA DE CLIENTES] 
WHERE [DATA DE NASCIMENTO] = '1987-01-21'
GO
  • Retornando os registros superiores a um ano específico:
SELECT * 
FROM [TABELA DE CLIENTES] 
WHERE YEAR([DATA DE NASCIMENTO])  >  1985
GO
  • No caso de filtros usando valores, não se utiliza aspas simples no critério de busca.
SELECT * 
FROM [TABELA DE PRODUTOS] 
WHERE [PREÇO DE LISTA] = 4.555
GO
  • Apagando colunas de uma tabela:
ALTER TABLE DB_TB_COND_FRETRP 
DROP COLUMN DB_TBCFT_MARCAPROD
GO
  • Uso dos símbolos de >, >=, < ou <= para filtrar os dados. Os mesmos podem ser aplicados a um campo string (será utilizado o critério de ordenação alfabética).
SELECT *
FROM [TABELA DE PRODUTOS] WHERE [PREÇO DE LISTA] > 10
GO
  • Like: usado para buscar partes de uma string (somente para campos caracteres).
SELECT *
FROM [TABELA DE CLIENTES] 
WHERE [NOME DO CLIENTE] LIKE '%Soares%'
GO

    O símbolo % antes e após a string, retorna todos os registros que tenham a string ('Soares') como dado (Figura 1).

Figura 1: Registros da tabela cliente que contenham em qualquer parte (início, meio ou fim) a string "Soares" como dado.

      A seguir, exemplo, no qual será retornado registros que  possuam 'Soares' somente no final do dado (% apenas no início da expressão a qual deseja-se se filtrar).

SELECT *
FROM [TABELA DE CLIENTES] 
WHERE [NOME DO CLIENTE] LIKE '%Soares'
GO

Figura 1: Registros da tabela cliente que contenham a string "Soares" apensa no final do dado.

  • Consultas condicionais: uso do operador 'OU':
SELECT * 
FROM [TABELA DE PRODUTOS] 
WHERE [SABOR] = 'Chocolate' OR [COR] = 'Marrom'
GO
  • Consultas condicionais: uso do operador 'E':
SELECT *
FROM [TABELA DE PRODUTOS] 
WHERE [SABOR] = 'Chocolate' AND [COR] = 'Marrom'
GO
  • O comando NOT, na frente da condição, retorna o contrário do que a condição busca:
SELECT * 
FROM [TABELA DE PRODUTOS] 
WHERE NOT ([SABOR] = 'Chocolate' AND [COR] = 'Marrom')
GO
  • O comando IN busca o registro através de um conjunto de valores. É como se existissem vários "Ous" atuando juntos.
SELECT * 
FROM [TABELA DE PRODUTOS] 
WHERE [SABOR] IN ('Chocolate', 'Morango', 'Creme')
GO

     O comando SQL acima retornaria os mesmos registros que o comando a seguir:

SELECT * 
FROM [TABELA DE PRODUTOS] 
WHERE [SABOR] = 'Chocolate' OR [SABOR] ='Morango' OR [SABOR] ='Creme'
GO

    Pode-se colocar junto com o IN condições usando >, >=, < ou <=:

SELECT * 
FROM [TABELA DE PRODUTOS]
WHERE [SABOR] IN ('Chocolate', 'Morango') AND [Volume] > 50
GO
  • O comando BETWEEN, seleciona registros entre dois valores:
SELECT *
FROM [TABELA DE PRODUTOS]
WHERE [SABOR] IN ('Chocolate', 'Morango', 'Creme') AND [Calorias] 
BETWEEN 150 AND 300
  • Distinct: Retornará apenas registros que tenham valores diferentes entre si:

  • 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