Guia Completo de Comandos Transact-SQL e SQL Server

Classificado em Computação

Escrito em em português com um tamanho de 42,95 KB

GROUP BY (Transact-SQL)

Agrupa um conjunto de linhas selecionadas em um conjunto de linhas de resumo pelos valores de uma ou mais colunas ou expressões no SQL Server.

http://www.devmedia.com.br/imagens/articles/233147/ProdutosTable.JPG

SELECT Tipo, SUM(Quantidade) AS 'Quantidade em Estoque' FROM Produtos GROUP BY Tipo

Exemplo com Inner Join

-- Selecione os produtos para exibir a quantidade de tipos de produtos agrupando por código da categoria

select Categoryname,COUNT(*) from Categories as c inner join products as p on p.CategoryID = c.CategoryID group by Categoryname

/* A média dos preços dos produtos por categoria apenas dos produtos com codcategoria maior que 5 */

select Categoryname,avg(Unitprice) as 'media' from Categories as c inner join products as p on p.CategoryID = c.CategoryID where c.CategoryID > 5 group by Categoryname

/* A média dos preços dos produtos por categoria */

select Categoryname,avg(Unitprice) as 'media' from Categories as c inner join products as p on p.CategoryID = c.CategoryID group by Categoryname having avg(Unitprice)>=30


-- Contar a quantidade de pedidos de cada país

select country,COUNT(*) as 'total' from Customers as c inner join orders as o on c.CustomerID = o.CustomerID group by country order by total desc

Cláusula HAVING com GROUP BY

A cláusula HAVING determina uma condição de busca para um grupo ou um conjunto de registros, definindo critérios para limitar os resultados obtidos a partir do agrupamento de registros. É importante lembrar que essa cláusula só pode ser usada em parceria com GROUP BY.

SELECT Tipo, SUM(Quantidade) AS 'Quantidade em Estoque' FROM Produtos GROUP BY Tipo HAVING SUM(Quantidade) > 200

Obs: O HAVING é diferente do WHERE. O WHERE restringe os resultados obtidos sempre após o uso da cláusula FROM, ao passo que a cláusula HAVING filtra o retorno do agrupamento.

http://www.devmedia.com.br/imagens/articles/233147/HavingWithGroupByResults.JPG

CREATE PROCEDURE (Transact-SQL)

Cria um procedimento armazenado Transact-SQL ou CLR (Common Language Runtime) no SQL Server.

/* Crie uma procedure para consultar os clientes por cidade passando como parâmetro a cidade */

create procedure ClientePorCidade @cidade nvarchar(30) as

begin

select * from Customers where city = @cidade

end

go

exec ClientePorCidade'london'

exec ClientePorCidade'campinas'

go


/* Crie uma procedure para consultar os produtos por categoria passando como parâmetro o código da categoria */

go

create procedure [Produto Por Categoria2] @codcat int as

select * from products where CategoryID = @codcat

go

exec [Produto Por Categoria2]3

go

/* Crie uma procedure para consultar os pedidos entre 2 datas passando 2 parâmetros para a data do pedido */

go

create procedure [pedido por faixa de data]

@dataini date ,@datafim date as

select * from orders

where OrderDate between @dataini and @datafim

go

exec [pedido por faixa de data]'01/03/2016','31/03/2016'

/* Criar stored procedure para inserir um registro nas categorias */

create procedure Inserecategorias

@nomecat nvarchar(30),@descricao nvarchar(50) as

insert into Categories(CategoryName,Description)

values ( @nomecat,@descricao)

exec Inserecategorias'limpeza','produtos para limpeza em geral'

select * from Customers

/* Crie uma stored procedure para inserir um cliente */

create procedure InsereCliente

@customerid as varchar(5),

@companyName as varchar(30),

@contactName as varchar(30),

@contactTitle as varchar(30),

@Address as varchar(30),

@city as varchar(30),

@postalcode as varchar(30),

@country as varchar(30),

@phone as varchar(30),

@fax as varchar(30) as

insert into customers( customerid, companyName ,contactName,

contactTitle,Address,city,postalcode,

country,phone,fax)

values ( @customerid, @companyName ,@contactName,

@contactTitle,@Address,@city,@postalcode,

@country,@phone,@fax)

exec inserecliente'ICPAVAO','Ivan pavão','Ivan','mr','rua princesa','sbc','00000',

'brazil','2222-2222','3333-3333'

EXECUTE (Transact-SQL)

Executa um procedimento armazenado de sistema ou procedimento armazenado definido pelo usuário.

DECLARE @local_variable (Transact-SQL)

As variáveis são declaradas no corpo de um lote.


SET @local_variable (Transact-SQL)

Define valores para a variável local especificada.

Exemplo: SET @myvar = 'This is a test';

SELECT @local_variable (Transact-SQL)

Especifica que a variável local especificada criada através de DECLARE @local_variable deve ser definida para a expressão especificada.

Exemplo: SELECT @var1 = 'Generic Name'

SELECT (Transact-SQL)

Recupera linhas do banco de dados e permite a seleção de uma ou várias linhas ou colunas de uma ou várias tabelas no SQL Server 2012.

DELETE (Transact-SQL)

Remove uma ou mais linhas de uma tabela ou exibição no SQL Server 2012.

DELETE com WHERE

DELETE FROM Production.ProductCostHistory

WHERE StandardCost > 1000.00;

INSERT (Transact-SQL)

Insere linhas na tabela

INSERT INTO Production.UnitMeasure

CREATE FUNCTION (Transact-SQL)

-- Calcular a média da Fatec: Media = p1*0.35 + p2*0.45 + t*0.2

Create function mediafatec(@p1 float, @p2 float , @t float )

returns float as

begin

declare @media float

set @media=@p1*0.35 + @p2*0.45 + @t*0.2

return @media

end

go

-- Teste da função

select dbo.mediafatec(4,7,10)


CREATE TRIGGER (Transact-SQL)

Trigger é um gatilho que é executado automaticamente quando um evento ocorre no servidor de banco de dados.

create table tabelaA(

Codcliente int primary key,

Hospede nvarchar(20),

Quarto nvarchar(20)


create table tabelaB(

Codcliente int primary key,

Hospede nvarchar(20),

Quarto nvarchar(20))


CREATE TABLE CAIXA

(

DATA_CAIXA DATETIME,

VALOR_INICIAL DECIMAL(12,2),

VALOR_FINAL DECIMAL(12,2)


GO

INSERT INTO CAIXA

VALUES (CONVERT(DATETIME,CONVERT(VARCHAR,GETDATE(),103)),

100, 100)

GO

CREATE TABLE VENDAS

(

DATA_DA_VENDA DATETIME,

CODVENDA INT,

VALOR_VENDA DECIMAL(12,2)


GO

select * from caixa

Crie uma trigger que ao inserir uma nova venda o valor desta venda seja automaticamente atualizado no campo valor caixa da tabela de caixas.

CREATE TRIGGER TGR_VENDAS_AI

ON VENDAS

FOR INSERT

AS

BEGIN

DECLARE

@VALOR DECIMAL(10,2),

@DATA DATETIME

SELECT @DATA = DATA_DA_VENDA, @VALOR = VALOR_VENDA

FROM INSERTED

UPDATE CAIXA SET Valor_FINAL = valor_FINAL + @VALOR

WHERE DATA_caixa = @DATA

END

GO

INSERT INTO VENDAS

VALUES (CONVERT(DATETIME, CONVERT(VARCHAR, GETDATE(), 103)), 1, 10)

-- Teste da trigger que insere

insert into VENDAS(DATA_DA_VENDA,CODVENDA,VALOR_VENDA)

values ('24/05/2017',1,20)

insert into VENDAS(DATA_DA_VENDA,CODVENDA,VALOR_VENDA)

values ('24/05/2017',2,200)

insert into VENDAS(DATA_DA_VENDA,CODVENDA,VALOR_VENDA)

values ('24/05/2017',3,300)

select * from caixa

Entradas relacionadas: