Comandos SQL Essenciais: Guia Prático com Exemplos em T-SQL

Posted by Elvis Venancio and classified in Technology

Written on in English with a size of 5.27 KB

Comandos SQL Essenciais em T-SQL

INSERT INTO tabela VALUES ('valor1', valor2, valorN)

DELETE FROM tabela WHERE condição

UPDATE tabela SET campo1 = valor1 WHERE condição

SELECT FROM tabela WHERE condição GROUP BY campo(s)
HAVING condição ORDER BY campo(s)

SELECT REPLICATE(nome, 2) FROM Cliente

Operadores e Palavras-chave

BETWEEN / LIKE / IN / DISTINCT / TOP / ORDER BY

Funções Agregadas

COUNT / SUM / AVG / MAX / MIN

Junções (JOIN)

INNER JOIN, FULL JOIN, RIGHT JOIN, LEFT JOIN

Subconsultas

SELECT setores.*, (SELECT COUNT(*) FROM funcionarios WHERE funcionarios.setor_id = setores.setor_id) AS "Total de Funcionários"
FROM setores

Tabelas Temporárias

SELECT * INTO #TabTemp FROM funcionarios

Variáveis e Estruturas Condicionais

DECLARE @qtd INT
SET @qtd = (SELECT SUM(quantidade) FROM Midias)

IF @qtd > 20
PRINT 'Pode abrir a locadora'
ELSE
BEGIN
PRINT 'Acho que você....'
PRINT 'Terá que comprar mais filmes...'
END

Expressão CASE

SELECT func_nome, func_salario,
CASE
WHEN func_salario >= 0 AND func_salario <= 500 THEN 'Assalariado'
WHEN func_salario > 500 AND func_salario <= 2000 THEN 'Salário padrão'
WHEN func_salario > 2000 THEN 'Cargo de confiança'
ELSE 'Salário negativo!!!!???'
END AS "Situação"
FROM funcionarios

Stored Procedures

CREATE PROCEDURE sp_calcula
(
@valor1 INT,
@valor2 INT,
@resultado INT OUTPUT
)
AS
BEGIN
SET @resultado = @valor1 + @valor2
END

DECLARE @resultado INT
EXECUTE sp_calcula 5, 7, @resultado OUTPUT
PRINT 'Resultado: ' + CAST(@resultado AS VARCHAR)

Triggers

CREATE TRIGGER trg_onInsertValue ON Funcionarios
FOR INSERT
AS
BEGIN
IF (SELECT COUNT(*) FROM inserted) = 1
PRINT 'Registro inserido com sucesso!!!'
IF (SELECT COUNT(*) FROM inserted) > 1
BEGIN
PRINT 'Impossível incluir mais de 1 funcionário por vez'
ROLLBACK TRAN
END
END

INSERTED e DELETED são tabelas especiais disponíveis dentro de triggers.

Functions com Retorno de Tabela

CREATE FUNCTION fnc_RetornaTabelaFuncionarios
(
@p_salario_inicial DECIMAL(10,2),
@p_salario_final DECIMAL(10,2)
)
RETURNS TABLE
AS
RETURN
(
SELECT * FROM funcionarios
WHERE func_salario BETWEEN @p_salario_inicial AND @p_salario_final
)

SELECT *
FROM dbo.fnc_RetornaTabelaFuncionarios(500, 1000)
WHERE gerente_id = 1

Cursores

DECLARE @func_nome VARCHAR(50)

DECLARE cursor_teste CURSOR FOR
SELECT func_nome FROM funcionarios WHERE func_nome LIKE '%d%'

OPEN cursor_teste

FETCH NEXT FROM cursor_teste INTO @func_nome
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'Nome: ' + @func_nome
FETCH NEXT FROM cursor_teste INTO @func_nome
END
CLOSE cursor_teste
DEALLOCATE cursor_teste

Cursor com Atualização

DECLARE @func_id INT
DECLARE @func_nome VARCHAR(50)
DECLARE cursor_teste CURSOR FOR SELECT func_id, func_nome FROM funcionarios
OPEN cursor_teste
FETCH NEXT FROM cursor_teste INTO @func_id, @func_nome
WHILE @@FETCH_STATUS = 0
BEGIN
IF CHARINDEX('k', @func_nome) != 0
BEGIN
-- se tiver a letra k no nome
SET @func_nome = @func_nome + ' Souza'
UPDATE funcionarios
SET func_nome = @func_nome
WHERE CURRENT OF cursor_teste
END
PRINT CAST(@func_id AS VARCHAR(5)) + ' ' + @func_nome
FETCH NEXT FROM cursor_teste INTO @func_id, @func_nome
END
CLOSE cursor_teste
DEALLOCATE cursor_teste

Transações Aninhadas

DECLARE @tran1 VARCHAR(15) SET @tran1 = 'principal'
DECLARE @tran2 VARCHAR(15) SET @tran2 = 'secundaria'
BEGIN TRANSACTION @tran1 -- transação principal
INSERT INTO Genero VALUES (9, 'principal')
BEGIN TRANSACTION @tran2 -- transação secundária
INSERT INTO Genero VALUES (10, 'secundaria')
COMMIT TRANSACTION @tran2 -- transação secundária
ROLLBACK TRANSACTION @tran1 -- transação principal
SELECT * FROM Genero
DELETE FROM Genero WHERE CodGenero IN (9, 10)

Cursor Scrollable

DECLARE @func_id INT
DECLARE @func_nome VARCHAR(50)
DECLARE cursor_teste SCROLL CURSOR FOR
SELECT func_id, func_nome FROM funcionarios
OPEN cursor_teste
FETCH LAST FROM cursor_teste INTO @func_id, @func_nome
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT CAST(@func_id AS VARCHAR(5)) + ' ' + @func_nome
FETCH PRIOR FROM cursor_teste INTO @func_id, @func_nome
END
CLOSE cursor_teste
DEALLOCATE cursor_teste

Related entries: