0% acharam este documento útil (0 voto)
16 visualizações

Comandos SQL Server

Enviado por

sandro almeida
Direitos autorais
© © All Rights Reserved
Formatos disponíveis
Baixe no formato DOCX, PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
16 visualizações

Comandos SQL Server

Enviado por

sandro almeida
Direitos autorais
© © All Rights Reserved
Formatos disponíveis
Baixe no formato DOCX, PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 80

COMANDOS SQL SERVER

 COMANDOS DCL: Dá permissões aos Usuário


 GRANT: dá permissão a um usuário
 REVOKE: Retira permissões de um usuário
 Mostrar só o ano: SELECT CONVERT(VARCHAR(4), SYSDATETIME()

 SGBDR : Sistema gerenciador de Banco de Dados Relacional


 Unicode: é a padronização de todos os caracrteres de todas linguagem do mundo
para serem entendidas pelos bancod e dados:
 Atenção: todos os dados do tipo de formato unicode devem obrigatoriamente serem
importados para o tipo de campo "nvarchar", como é no caso do excel. Tente definir os
campos de destinos do tipo nvarchar.
 ASCII, UNICODE e oTruque UTF-8: um texto em UTF-8 é simples: ele é completamente em
ASCII e, quando precisamos de um caractere do Unicode, usamos um caracter especial, que
indica "atenção, o seguinte caractere é em Unicode". Por exemplo, para o texto "Bienvenue
chez Sébastien"(em francês), apenas o "é" não faz parte do código ASCII. Então,
escrevemos em UTF-8: De qua
 Restaurar Leiaute, Janelas do SQL SERVER: Windows / Reset Layout
 Criar mecanismo de BKP Automatico: SERVIDOR/Management/Maitenece Plans / Botão
Direito: New Maintecenece Plan.
 Copiar: Copiando um pedaço de Texto: --Consulta por CNPJ
select * from EFD_NOTA_FISCAL Where SUBSTRING(ID_CONTRIBUINTE, 1, 14) =
'14928557000363'


DICIONARIO
Must: deve
Tier: camada
Imployer: implantar
VER TODA A CONFIGURAÇÇÃO DO SQL SERVER:
sp_configure

Mostra apenas configurações que começam com o termoq eu está entre as apas:
sp_configure ’show adv’
CRIANDO BASE DE DADOS

Create dataBase Nome_Base de dados.

Criar BKP de Tabela (Duplica) uma tabela

SELECT * INTO EVENTOS_BKP FROM EVENTOS

SQL para não trazer dados em branco: usar where e AND no lugar de OR

select CNPJ_CPF from cci_CAp where CNPJ_CPF bit<> '' AND CNPJ_CPF is not null

BKP DA BASE DADOS


Create dataBase Nome_Base de dados.
CRIAR UMA TABELA

SQL CONSTRAINTS - SÃO RESTRINÇÕES


Principais:
NOT NULL: a coluna não aceitará valor nulos. O campo sempre
deverá ter um valor. Não pode inserir e nem atualizar. A omissão
dessa informação permite entradas nulas no campo.
UNIQUE: é a registro que não vai se repetir. Essa linha será
única no banco de dados. ()
PRIMARY KEY: identifica registro unico na tabela. Um valor
único que nunca se repete. Automaticamente possui a Restrição
unique definida. Ex: de Tabela/Campo CPF. Não pode ter valor
NULL.
FOREIGN KEY: é um campo com chave primaria, que aponta para
chave primária da outra tabela.
CHECK: restringe os valores que é para ser colocado. Somente
Texto(matriz de texto) ou somente numero(1 a 10)
DEFAULT:insere valor padrão. Se nenhum outro dado for colocado
no campo ela já tem valor padrão.

 IDENTITY(1,1): numero inicial e o incremento dele: significa


que o campo é criado como auto incremento: código Tnt Primary
KEY IDENTITY(1,1)
 --INDETITY Com incremento de 3 a partir do 10
 insert into outros_livros values('Livro3')
 select * from OUTROS_LIVROS

 SP_Help TBL_AUTORES: traz todos os dados da tabela

Chave Primaria:
 Clicar no campo Codigo (Intero) eclicar na Cave na barrade menu. Não pode permitir Nulo
(Botão sireito e marcar como Chave Primeira)
 Deve ser auto incremente: trocar nas propriedades: Indety Specification

CREATE TABLE CLIENTE (

ID VARCHAR(4) NOT NULL,


NOME VARCHAR(40) NOT NULL,
TELEFONE VARCHAR(10) NOT NULL,
VALOR DECIMAL(6,2) NOT NULL

);

Com chave primaria ????????????????:


CREATE TABLE CLIENTE(

CODIGO int not null,


NOME varchar(30),
TELEFONE varchar(15),
EMAIL varchar(30)

);

Site com os exemplos


http://www.devmedia.com.br/conheca-alguns-comandos-do-sql-server/1334
BKP DE TABELA

Criar Copia BKP de Tabela (Duplicar) uma tabele


SELECT * INTO EVENTOS_BKP FROM EVENTOS

Criar BKP de Tabela (Duplicar) uma tabela


SELECT * INTO LIVRO_3 FROM TBL_LIVROS where ID_LIVRO < 105

Copiar apenas campos Específicos


SELECT ID_AUTOR, NOME INTO LIVRO_BKP FROM TBL_LIVROS
ALTERAR UMA TABELA

Alterando uma tabela adicionando uma nova coluna: (sem virgulas)


ALTER TABLE CLIENTE ADD EMAIL_2 VARCHAR(20)
ALTER TABLE CLIENTE ADD EMAIL_3 VARCHAR(20) not null
ALTER TABLE OUTROS_LIVROS alter column [Codigo] int

Alterando uma tabela modificando uma coluna:


alter table CLIENTE alter column [NOME] varchar(210) not null

Deletando uma Coluna:


ALTER TABLE CLIENTE DROP COLUMN EMAIL

Alterar nome da Coluna da Tabela:


EXEC sp_rename 'CARTAO_2018_UNIFICADOS.[CPF CNPJ CONTRIBUINTE]', 'CNPJ',
'COLUMN'
DELETAR TABELA E LINHAS
Apagando uma Tabela:
DROP TABLE TESTE;

Apagando os dados de uma tabela retornando-a ao estado de origem:


Somente apaga toda a Tabela. Não apaga por filtro. Código mais leve
TRUNCATE TABLE CLIENTE;

OBS: se a tabela tiver relacionamentos você não poderá apagá-la.


Primeiro tem que excluir os relacionamentos. Ex: não tem como apagar a
tabela Cliente onde estes mesmo clientes estão dentro da tabela
vendas.

Deletando dados:
DELETE FROM CLIENTE WHERE ID = '2006';

Deletando por topo/Qtde:


delete top (264000) from EVENTOS

Delete com parametros e conversão:


delete from prestadores Where SUBSTRING(CAST(DATA_INICIAL AS VARCHAR(8)), 1, 4) =
'2015'
INSERT INTO
INSERIDNO DADOS NA TABELA
Em Todas colunas Correspondentes:
INSERT INTO CLIENTE VALUES ('2006', 'Rodrigo2', '44662',102.95);

Jeito certo de inserir Valores: (com ponto separando a casa decimal)


insert into vendedor(CODIGO, NOME, COMISSAO) values(4, 'PEDRO2',
20.00)

Forma certa do sqlserver não colocar duas casas decimais a mais quando
se copia dados para dentro de uma campo tipo money
insert teste(valor) values('10,00') – Resultadfo: 1000,00

insert teste(valor) values('10.00') – Resultado: 10,00

select * from teste

Em Colunas Escolhidas:
INSERT INTO CLIENTE(NOME, TELEFONE) VALUES ('SERGIO', '3663');

Insert com select:


Isert Com tabelas idênticas:
insert into vendedor_externo select * from vendedor

Com parâmetros Select Where:


insert into VENDEDOR_EXTERNO(codigo, nome, perfil, comissao)
select codigo, nome, perfil, comissao from VENDEDOR
where CODIGO = 1

insert into VENDEDOR_EXTERNO(codigo, nome, perfil, comissao)


select codigo, nome, perfil, comissao from VENDEDOR
where COMISSAO >= 20.00
SubString: Inserindo parte de um campo em outro de outra tabela:
INSERT EVENTOS(RAIZ_CNPJ) select SUBSTRING(TODASCOLUNAS, 1, 8) from
EVENTOS_3

FUNÇÕES MATEMÁTICAS
Funções Agregadas
Todos é bom usar com parâmetros de filtros (Where, AND, OR)

Somar:
select SUM(Salario) from VENDEDOR

Maximo Valor:
Select MAX(Salario) from VENDEDOR

Minimo Valor:
Select MIN(salario) from vendedor

Media Valor:
Select AVG(Salario) from VENDEDOR

Quantidader (que tem valor. Não traz nulo):


Select COUNT(Codigo) from vendedor
Select COUNT(*) from vendedor
UPDATE – ATUALIZAR DADOS
Alterando dados: (OBS: Sempre colocar uma condição para atualizar)
UPDATE VENDEDOR SET Perfil = '3'
UPDATE VENDEDOR SET Perfil = '1' WHERE Comissao >= 20.00

Alterando dados:
UPDATE CLIENTE SET VALOR = 10 WHERE ID = '2006';

Update em mais de um campo:


UPDATE VENDEDOR SET PERFIL = '5', COMISSAO = 50.00 WHERE COMISSAO >=
20.00

UPDADTE X SELECT

Podemos combinar o comando SELECT com UPDATE. No exemplo a seguir, os


funcionários de menor salário receberão aumento de 10%.

UPDATE VENDEDOR
SET SALARIO = Salario * 1.1
WHERE SALARIO = (SELECT MIN(salario) FROM VENDEDOR)

Quem tem o maior salário perde 20% do Salario:


UPDATE VENDEDOR
SET SALARIO = salario - (salario / 100 * 20)
WHERE SALARIO = (SELECT MAX(salario) FROM VENDEDOR)

Update passando select como valor: o vendedor 2 terá o máximo salário também
UPDATE VENDEDOR
SET Salario = (SELECT MAX(Salario) FROM VENDEDOR)
WHERE CODIGO = 2
ORDER BY
select * from vendedor order by NOME asc
select * from vendedor order by NOME DESC

Order By com niveis de filtro


select * from EVENTOS order by RAIZ_CNPJ, DATA_ENTRADA asc

Order By com 2 ou mais niveis de filtros diferentes


Select * FROM RELATORIO_EMPRESAS_DO_CONTADOR_TEMPORARIO ORDER BY
SITUACAO_CADASTRAL ASC, VA DESC
GROUP BY

ENTENDIMENTO: mostra quantos elementos da esquerda tem dentro de


cada grupo que está à direita.
Também Traz vários campos, mesmo, se um deles é somado(SUM) ou
contado(Count).

OBS: Todos os campos que forem pesquisados: (Select


campo1, SUM(campo2), campo3 From Tabela) devem estar na
clausula (Group by campo1, campo2, campo3), inclusive
os somados ou contados): (Select campo1, SUM(campo2),
campo3 From Tabela) Group by campo1, campo2, campo3

--Exemplo Simples: soma a QTDE vendas por forma de pagamento(ou por


cliente). Ou a Qtde de Vendas Feita por um vendedor.
SELECT T.FORMA_PAGAMENTO, SUM(T.VALOR) AS "TOTAL" FROM TESTE T
Group by T.FORMA_PAGAMENTO

-- Mostra Alguns Campos e Conta todo Mundo Simples:


Select NF.CODIGO_PARTICIPANTE_COMPRADOR, COUNT(*) from EFD_PRESTADOR_TRANSPORTE_NOTA_FISCAL
AS NF
Group BY NF.CODIGO_PARTICIPANTE_COMPRADOR

--Qtde de Departamentos
select COUNT(Nome) from VENDEDOR

--Qtde de Departamentos cadastrados por vendedor


select COUNT(Departamento) from VENDEDOR

--Qtde de nomes Departamento Único, teria que ser a causa DISTINCT


select DISTINCT Departamento from VENDEDOR
--GROUP BY
-- Traz a Qtde de Vendedores por Departamento: o agrupamento foi feito
pela Coluna DEPARTAMENTO
SELECT COUNT (*) 'Vendedor por Departamento', Departamento FROM
VENDEDOR GROUP BY Departamento

SELECT COUNT(*) 'QTDE de Produtos' FROM PRODUTOS GROUP BY ESTOQUE

Qtde de Perfil Agrupado por vendedor


SELECT COUNT(*) 'QTDE de Vendedor em cada Perfil', PERFIL FROM
VENDEDOR GROUP BY PERFIL

Também Traz vários campos, mesmo, se um deles é somado(SUM) ou


contado(Count). E no group By coloca-se os campos
Select CNPJ_FILIAL, SUM(VALOR_POR_ATIVIDADE) from PGDASDFILIAL Group
by CNPJ_FILIAL, VALOR_POR_ATIVIDADE

Fechando uma compra: Usa Três tabelas. Seleciona todos produtos


comprados tabela externa, mostra o cliente que comprou chave
estrangeira, mostra o produto comprado que está em outra tabela, faz o
calculo da QTDE comprada vezes o valor do produto e filtra por valor
ou produto:

SELECT C.ID_CLIENTE, C.CLIENTE, P.PRODUTO, P.PRECO, COUNT(*) AS "QTDE", (COUNT(*)


* P.PRECO) AS "TOTAL", T.FORMA_PAGAMENTO,
CASE T.FORMA_PAGAMENTO

when 1 then 'Boleto'


when 2 then 'Cartão VISA'
when 3 then 'Cartão MASTERCARD'
when 4 then 'Dinheiro'

end as "TIPO PAGAMENTO" FROM TESTE T


JOIN
PRODUTO AS P
ON
P.CODIGO=T.CODIGO_PRODUTO

JOIN
CLIENTE AS C
ON
C.ID_CLIENTE=T.ID_CLIENTE

--Agrupando e Filtranto - AS comprar acima de um valor / Ou só quem comprou um


tipo deobjeto
Group by C.ID_CLIENTE, C.CLIENTE, P.PRODUTO, P.PRECO, T.FORMA_PAGAMENTO HAVING
(COUNT(*) * P.PRECO) >= '0.00'

Não Repetir Linhas:


SELECT DISTINCT(E.IE), SUM(E.VR_CONTABIL) FROM EFDGIA E where E.data_inicial
BETWEEN '20160101' AND '20161231'
Group by E.IE

HAVING
ENTENDIMENTO: dos resultados trazidos agrupados, ele permite colocar
critérios para mostrar. Esta cláusula nos permite informar critérios
de filtragem baseados nos valores das próprias totalizações geradas
para os grupos. Os critérios de filtragem da cláusula HAVING são
aplicados após os agrupamentos terem sido feitos. A cláusula HAVING
vem sempre após a cláusula GROUP BY e usa , em seus critérios,
expressões que aparecem no SELECT para gerar os totais dos grupos.
Veja um exemplo:

Traz a soma das vendas por forma de pagamento e com o critério(HAVING)


– Só as somas dos grupos que deram abaixo de 100

SELECT T.FORMA_PAGAMENTO, SUM(T.VALOR) AS "TOTAL" FROM TESTE T


Group by T.FORMA_PAGAMENTO HAVING SUM(T.VALOR) < '100.00'

Traz a soma de cada grupo, q QTDE de linhas que cada grupo tem:

SELECT COUNT(*), FORMA_PAGAMENTO, SUM(T.VALOR) AS "TOTAL" FROM TESTE T


Group by T.FORMA_PAGAMENTO HAVING SUM(T.VALOR) >= '000.00'
AS – SQL ALIAS
Alias: significa Pseudônimo
Renomeia-se a coluna para Exibição
SELECT RAZAO_SOCIAL_MATRIZ AS ”EMPRESA” FROM PGDASD

Não Precisa de Aspas para o novo nome:


SELECT RAZAO_SOCIAL_MATRIZ AS EMPRESA FROM PGDASD

Apelidar um tabela para usar os campos dela depois:


SELECT P.RAZAO_SOCIAL_MATRIZ FROM PGDASD AS P
CONCATENÇÃO
Concatenação de String e Campos

CONCATENÇÃO (+)
select * from vendedor where nome = 'ser' + 'gio'

É possível concatenar String usando-se o operador de concatenação +.


Serve também Trazer várias colunas Apenas em Uma

Sintaxe:
String1 | Coluna + String2 | Coluna

Mostrando concatenção só de String sem buscar no banco


select 'SERGIAO' + 'LISBOA'

Exemplo: varias colunas do banco em uma só


SELECT NOME_AUTOR + ' ' + SOBRE_NOME_AUTOR AS 'NOME COMPLETO' FROM
TBL_AUTORES

Concatenar String solta com o conteudo de uma coluna


select 'Eu gosto dos livros dos Autores com o Sobrenome SILVA.: ' +
NOME_AUTOR + ' ' + SOBRE_NOME_AUTOR AS 'NOME COMPLETO' FROM
TBL_AUTORES
Where SOBRE_NOME_AUTOR LIKE '%SILVA%'
SELECT
Traz todos os dados
SELECT * FROM VENDEDOR

Traz campos específicos:


SELECT Vendedor, Comissao FROM VENDDOR

Select com Where:


SELECT * FROM VENDEDOR WHERE Codigo = 5 (>, <, =, >=, <=)

Select com AND e OR : (Where é obrigatório)


SELECT * FROM VENDEDOR WHERE Codigo > 1 AND COMISSAO < 500
SELECT * FROM VENDEDOR WHERE Codigo > 1 OR COMISSAO > 500

Select TOP (usar as palavras reservadas antes do asterisco)


Traz os 10 primeiros Itens:
SELECT TOP 10 * FROM VENDEDOR
SELECT TOP 10 PERCENT * FROM VENDEDOR

IN: seleciona se estiver valor igual ao da lista


SELECT * FROM VENDEDOR WHERE CODIGO IN(1,2)
SELECT * FROM VENDEDOR WHERE CODIGO IN(select codigo from
VENDEDOR_EXTERNO)

NOT IN: Não seleciona se estiver na lista:


SELECT * FROM VENDEDOR WHERE CODIGO NOT IN(1, 5)
SELECT * FROM VENDEDOR WHERE CODIGO NOT IN(select codigo from
vendedor_externo where salario >= 2000)

EXISTS ou NOT EXISTS: Equivale ao IN ou NOT IN


SELECT * FROM VENDEDOR WHERE EXISTS
(SELECT * FROM VENDEDOR_EXTERNO
WHERE VENDEDOR.CODIGO = VENDEDOR_EXTERNO.CODIGO)

SELECT * FROM VENDEDOR WHERE NOT EXISTS


(SELECT * FROM VENDEDOR_EXTERNO
WHERE VENDEDOR.CODIGO = VENDEDOR_EXTERNO.CODIGO)

DISTINCT:
Não traz nenhuma linha repetida que seja idêntica a uma outra:
select DISTINCT * from vendedor

Por campos únicos (nem uma linha vai ser igual a outra linha)
select DISTINCT Nome, perfil from vendedor
select distinct CNPJ_FILIAL, RAZAO_SOCIAL_MATRIZ from PGDASDFILIAL
order by RAZAO_SOCIAL_MATRIZ ASC

Distinct com Count:


SELECT COUNT(DISTINCT CNPJ_FILIAL) AS 'QTDE EMPRESAS COM DECLARAÇÃO' FROM
PGDASDFILIAL

BETWEEN:
traz dados que estão dentro de um intervalo de valor

Por Numero:
SELECT * FROM VENDEDOR WHERE CODIGO BETWEEN 5 AND 10

Valores:
SELECT * FROM VENDEDOR WHERE SALARIO BETWEEN 500.00 AND 1500.00

Por Data:
SELECT * FROM TBL_LIVROS WHERE DATA_PUB BETWEEN '20130101' AND '20141231'
SELECT * FROM TBL_LIVROS WHERE DATA_PUB BETWEEN '2013-01-01' AND '2014-12- 31'
Com empressão Select:
SELECT * FROM VENDEDOR WHERE Salario BETWEEN (Select Max(Salario) FROM VENDEDOR)
AND 100000.00

Somente quem ganha até a Metade do Salário Máximo de Um Vendedor:


SELECT * FROM VENDEDOR WHERE Salario BETWEEN (Select Min(Salario) FROM VENDEDOR)
AND ((Select Max(Salario) FROM VENDEDOR) / 2)

LIKE COMPARAÇÃO – CONTÊM:


LIKE: contem: antes, depois e no meio
select * from vendedor where nome LIKE 'MA%'
select * from vendedor where nome LIKE '%IO'
select * from vendedor where nome LIKE '%ER%'
select * from vendedor where nome LIKE '%ER%O%' (várias partes)

Que o Inicio seja igual a uma das letras passadas:


select * from vendedor where nome LIKE '[AJR]%'

Inicie entre um intervalo: A J


select * from vendedor where nome LIKE '[A-J]%'

Que inicie em S e a segunda letra seja E ou I (Etc...)


select * from vendedor where nome LIKE 'S[EI]%'

Que inicie em S e a segunda letra esta dentro de um intervaldo passado


select * from vendedor where nome LIKE 'S[I-J]%'
Resultado: Silvana
SUBCCONSULTAS
A subonsultas (SubQuery) é uma declaração SQL embutida em uma consulta
externa.

A subConsulta fornece uma resposta à consulta externa na forma de um valor


escalar, lista de valores, ou conjunto de dados, equivalente a uma expressão, lista ou
tabela para consulta externa.

O Select Interno (subconsulta) deve ficar entre parênteses.

Tabela Derivada: é tabela que é gerada pela subconsulta.

Um tipo diferente de esubconsulta(Interno): select * from EVENTOS


where (data_saida = '00000000' AND SUBSTRING(DATA_ENTRADA, 1, 4) = '2016') OR
ESTADO = 'S' ORDER BY DATA_ENTRADA

Consulta Inicial sem as teclas apresentadas


SELECT CL.NOME_CLIENTE AS CLIENTE, PR.PRODUTO AS PRODUTO,
PR.PRECO_PRODUTO AS PREÇO, CO.QTDE AS QTDE,
PR.PRECO_PRODUTO * CO.QTDE AS TOTAL FROM CLIENTE AS CL

INNER JOIN COMPRA AS CO


ON CL.ID_CLIENTE = CO.ID_CLIENTE

INNER JOIN PRODUTOS AS PR


ON CO.ID_PRODUTO = PR.ID_PRODUTO

Ordenar por CLINTE e TOTAL de suas comprar


Errado: porque não está em uma função e agregação esta coluna
--GROUP BY CL.NOME_CLIENTE

É só passar esta consulta feita acima como fonte de dados para uma
outra consulta
Mas só os campos CLIENTE e TOTALs

SELECT CL.NOME_CLIENTE AS CLIENTE, PR.PRECO_PRODUTO * CO.QTDE AS TOTAL


FROM CLIENTE AS CL

INNER JOIN COMPRA AS CO


ON CL.ID_CLIENTE = CO.ID_CLIENTE

INNER JOIN PRODUTOS AS PR


ON CO.ID_PRODUTO = PR.ID_PRODUTO
(ESTUDAR MAIS ESTAS
SUBCOBSULTAS????????????????????)
Exemplo de fácil entendimento: fiz uma consulta dentro de outra
consulta montada. O que está sublinhado seria a tabela.

Select D.DATA_SAIDA FROM (SELECT DATA_SAIDA FROM EVENTOS) AS D WHERE D.DATA_SAIDA


= '20151231'

Mostrando o Total de Comprar por Cliente


Usando a Tabela Derivada
SELECT RESULTADO.CLIENTE, SUM(RESULTADO.TOTAL) AS TOTAL
FROM
(
SELECT CL.NOME_CLIENTE AS CLIENTE, PR.PRECO_PRODUTO * CO.QTDE AS TOTAL
FROM CLIENTE AS CL

INNER JOIN COMPRA AS CO


ON CL.ID_CLIENTE = CO.ID_CLIENTE

INNER JOIN PRODUTOS AS PR


ON CO.ID_PRODUTO = PR.ID_PRODUTO
)
AS RESULTADO --Nome da Tabela Deriva Criada

Agrupando por Nome e Ordenando por Total


GROUP BY RESULTADO.CLIENTE
ORDER BY TOTAL
CTE – SUBCCONSULTAS
COMMON TABLE EXPRESSION
Expressão de Tabela Comum

É uma variação sintática de uma consulta, similar a uma exibição VIEW.

O CTL deve ser criado antes da consulta principal.


UNION
Permite combinar duas ou mais declarações select. Cada declaração select
deve ter o mesmo numero de colunas, tipos de dados e ordem das colunas.(Melhor
usar o JOIN)

Traz uma linha abaixo da outra identica:


SELECT * FROM TBL_LIVROS
UNION
SELECT * FROM LIVROS_2

--Traz todos os que estão um em cada tabela. Deve ter ao menos um campo em
comum:
SELECT ID_AUTOR FROM TBL_LIVROS
UNION
SELECT ID_AUTOR FROM TBL_AUTORES

--UNION ALL: faz com que traga os campos repetidos que coincidem em Ambas as
Tabelas
SELECT ID_AUTOR FROM TBL_LIVROS
UNION ALL
SELECT ID_AUTOR FROM TBL_AUTORES

--Trazendo dois Campos: que coincidem, mas um em Cada Tabela (um em baixo do
outro)
SELECT ID_AUTOR, NOME FROM TBL_LIVROS
UNION
SELECT ID_AUTOR, NOME_AUTOR FROM TBL_AUTORES

SELECT COUNT(CNPJ_MATRIZ) AS CNPJ FROM PGDASD


UNION ALL
SELECT COUNT(CNPJ_FILIAL) AS PGDASDFILIAL FROM PGDASDFILIAL

--A coluna deve ter o mesmo nome e trará as duas tabelas no resultado de apenas
uma consulta
Select DISTINCT CNPJ_ESTABELECIMENTO from DEFIS_FILIAL_TRANSPORTE
UNION ALL
Select DISTINCT CNPJ_ESTABELECIMENTO from
JOIN
União de Tabelas
A palavra chave JOIN é usada para obter dados provenientes de duas ou
mais tabelas, baseado em um relacionamento entre colunas destas tabelas:
Cliente.IdCliente = Venda.IdCliente.

INNER JOIN: só retorna dados se ele encontrar pelo menos uma correspondência em ambas as
tabelas. Ver ponto de intersecção, conexão entre as tabelas.

OTHER JOIN: retorna os dados mesmo que NÃO houver nenhuma correspondência nas
tabelas. Ele divide-se em: LEFT JOIN, RIGHT JOIN e FULL JOIN.

INNER JOIN: tem correspondência

Seleciona quem tem o Mesmo ID (ON)


SELECT * FROM TBL_LIVROS INNER JOIN TBL_AUTORES
ON TBL_LIVROS.ID_AUTOR = TBL_AUTORES.ID_AUTOR

Só os nomes que Interessam


SELECT TBL_LIVROS.ID_AUTOR, TBL_LIVROS.NOME FROM TBL_LIVROS INNER JOIN
TBL_AUTORES
ON TBL_LIVROS.ID_AUTOR = TBL_AUTORES.ID_AUTOR

JOIN com Alias (Dando apelido pa as tabelas)


SELECT L.ID_AUTOR, L.NOME FROM TBL_LIVROS AS L INNER JOIN TBL_AUTORES
AS E
ON L.ID_AUTOR = E.ID_AUTOR
OTHER JOIN: quando não tem correspondência exata:

LEFT JOIN: retorna todas as linhas da tabela à esquerda, mesmo se não houver nenhuma
correspondência a tabela a direita.

RIGHT JOIN: retorna todas as linhas da tabela a direita, mesmo se não houver nenhuma
correspondência a tabela a esquerda.

FULL JOIN: retorna linhas quando houver uma correspondência em qualquer uma das tabelas.
É uma combinação de LEFT e RIGHT JOINS.

LEFT JOIN: traz todos os dados da tabela esquerda (primeira tabela),


mesmo se não tiver correspondência na tabela da direita (segunda
tabela
Casso tenha ela a interpretará como INNER JOIN normal
SELECT * FROM TBL_LIVROS
LEFT JOIN TBL_AUTORES
ON TBL_LIVROS.ID_AUTOR = TBL_AUTORES.ID_AUTOR

Apenas o item que não tem correspondência (Apenas livros que tem autor
- Que são todos)
SELECT * FROM TBL_LIVROS
LEFT JOIN TBL_AUTORES
ON TBL_LIVROS.ID_AUTOR = TBL_AUTORES.ID_AUTOR Where
TBL_AUTORES.ID_AUTOR IS NOT NULL

RIGHT JOINN: é exatamente o inverso do LEFT JOINN: trará todos os


dados da tabela a direita mesmo se não tiver correspondência com a
Tabela da Esquerda.
Caso haja correspondência, se comportará como INNER JOIN.
SELECT * FROM TBL_LIVROS
RIGHT JOIN TBL_AUTORES
ON TBL_LIVROS.ID_AUTOR = TBL_AUTORES.ID_AUTOR
Apenas Autor que já tenha um livro cadastrado
SELECT * FROM TBL_LIVROS
RIGHT JOIN TBL_AUTORES
ON TBL_LIVROS.ID_AUTOR = TBL_AUTORES.ID_AUTOR WHERE
TBL_LIVROS.ID_LIVRO IS NOT NULL

FULL JOINN: traz todos dados independente de ter ou não uma


correspondência. Pode-se usar a clausula Where
Vantagem: quem tem correspondência, intersecção ele mostra. É o caso
dos ID's - Pode-se usar parâmetros
SELECT * FROM TBL_AUTORES
FULL JOIN TBL_LIVROS
ON TBL_LIVROS.ID_AUTOR = TBL_AUTORES.ID_AUTOR

FULL JOINN: excluindo correspondências (só autor que tem livro


cadastrado)
SELECT * FROM TBL_AUTORES
FULL JOIN TBL_LIVROS
ON TBL_LIVROS.ID_AUTOR = TBL_AUTORES.ID_AUTOR where TBL_LIVROS.ID_AUTOR IS NOT
NULL

JUNTAR 3 OU MAIS TABELA:

SELECT C.ID_CLIENTE, C.CLIENTE, P.PRODUTO FROM TESTE AS T


JOIN
CLIENTE AS C
ON
C.ID_CLIENTE=T.ID_CLIENTE
JOIN
PRODUTO AS P
ON
P.CODIGO=T.CODIGO_PRODUTO

Sub-consultas SQL
Uma sub-consulta é uma instrução SELECT aninhada dentro de outra instrução SELECT, INSERT,
DELETE ou UPDATE. Veja abaixo alguns exemplos de sintaxe:

Comparação [ANY|SOME|ALL] (instrução sql)

Expressão [NOT] IN (instrução sql)

Expressão [NOT] EXISTS (instrução sql)

Os predicados ANY e SOME, sinônimos, são utilizados para recuperar registro na consulta
principal que satisfaçam a comparação com qualquer registro da sub-consulta.
WITH TIES
As vezes quando se faz select com TOP() ele não traz alguns
itens da lista principalmente se ele for repetido permitem. Esta
clausula resolve isto.

--Traz os três primeiros vendedores com os menores salários mas


despreza quem está repetido
select TOP(3) * from VENDEDOR

--ORDER BY é essencial
-- Traz Tres categorias, e também os itens repetidos que possam entrar
nesta categorias
select TOP(3) WITH TIES NOME, COMISSAO, SALARIO from VENDEDOR ORDER BY
SALARIO ASC
VIEWS
Qual o tempod e vida de uma view???

VIEW é uma tabela virtual baseada no conjunto de resultados de


uma consulta SQL.

Contêm linhas e colunas como uma tabela real, e pode receber


comandos como a declaração JOIN, WHERE e funções como uma tabela
normal.

Ela sempre mostra os resultados de dados Atualizados. O motor de


banco de dados recria os dados sempre que você consulta a visão. Dados
sempre atualizados.

Criando a View Com Slect Simples:


CREATE VIEW Teste_usuario
AS
SELECT * from usuario

Com Select mais Elaborado:


CREATE VIEW Vw_Livros_Autores
AS
SELECT TBL_LIVROS.LIVRO AS LIVRO, TBL_AUTORES.NOME_AUTOR AS AUTOR FROM TBL_LIVROS
INNER JOIN TBL_AUTORES
ON TBL_LIVROS.ID_AUTOR = TBL_AUTORES.ID_AUTOR

Utilizando a Exibição: com select Simples:


SELECT * FROM Vw_Livros_Autores
SELECT * FROM Vw_Livros_Autores where LIVRO LIKE '%1%'

Acrescentando mais uma coluna na VIEW:


ALTER VIEW Vw_Livros_Autores AS SELECT TBL_LIVROS.LIVRO AS LIVRO,
TBL_AUTORES.NOME_AUTOR AS AUTOR, TBL_LIVROS.PRECO_LIVRO AS PREÇO FROM TBL_LIVROS
INNER JOIN TBL_AUTORES
ON TBL_LIVROS.ID_AUTOR = TBL_AUTORES.ID_AUTOR

Agora mostra já a view com a coluna PREÇO_LIVRO:


SELECT * FROM Vw_Livros_Autores
Deletar uma VIEW
DROP VIEW Vw_Livros_Autores

--APESAR DA VIEW NÃO APARECER COMO UMA TABELA FISICA - É SÓ CONSULTAR,


TRABALHAR TODOS OS DADOS QUE FORAM JOGADOS PARA DENTRO DA VIEW. USAR
CONSULTAS SIMPLES E COMPLETAS

CHAVES ESTRANGEIRAS
Motivo de Usar: Segurança do Banco. Por exemplo, se um ID de um
cliente está em um pedido ele não pode ser deletado da tabela CLIENTE.
No máximo ser colocado como Inativo etc.. Integridade.

//Traz os dados da tabela Pedido e Cliente onde os ID dos Clientes se combinam.


select * from PEDIDO
JOIN
CLIENTE
ON
PEDIDO.IdCliente = CLIENTE.IdCliente

JOIN ANINHADOS (Traz o Nome dos Produtos)


select * from PEDIDO
JOIN
CLIENTE
ON
PEDIDO.IdCliente = CLIENTE.IdCliente
JOIN
PRODUTO
ON
PEDIDO.IdPedido = PRODUTO.IdProduto

EXECUTNADO UMA COMPRA – CHAVE ESTRANGEIRA


select
CLIENTE.IdCliente,
CLIENTE.NOME,
PEDIDO.IdPedido,
PRODUtO.PRODUTO,
PRODUTO.VALOR,
PEDIDO.QTDE_CAMPRADO,
(PEDIDO.QTDE_CAMPRADO * PRODUTO.VALOR ) AS 'VALOR'

from PEDIDO

JOIN
CLIENTE
ON PEDIDO.IdCliente = CLIENTE.IdCliente

JOIN
PRODUTO
ON PEDIDO.IdPedido = PRODUTO.IdProduto
CONVERSOES
CAST E CONVERT
Podemos converter expressões de um tipo de dados em outo no SQL
usando as funções: CAST e CONVERT

CAST
OBS: Para fazer a concatenação o outro elemento tem que ser
String

select 'Produto.: ' + Produto + ' Valor Prodturo.: ' + CAST(VALOR AS VARCHAR(20))
from PRODUTO

Erro por falta de Conversão:


select 'Produto.: ' + Produto + ' Valor Prodturo.: ' + VALOR from PRODUTO
(Erro ao converter tipo de dados varchar em numeric. )

Data - cast que Funcionou. Procurando somente o ano:


select * from PRESTADORES Where SUBSTRING(CAST(DATA_INICIAL AS VARCHAR(8)), 1, 4)
= '2015'

Cast que Funcionou:


select CAST(RAIZ_CNPJ as INT) from EVENTOS

String do mesmo tamanho para data:


SELECT CAST(RAIZ_CNPJ AS DATE) "Date" FROM EVENTOS
CONVERT
CONVERT (novo_tipo_de_dados, expressão, estilo), o estilo é
normalmente usado para trabalhar Float/Real

select 'Produto.: ' + Produto + ' Valor Prodturo.: ' + CONVERT(VARCHAR(20),


VALOR) from PRODUTO

CONVERT DATA: (Nosso Padrao ‘e o 103 – Frances/Britanico)

Convertendo data em String e Concatenado e Mostrando:


select 'DATA.:' + CONVERT(VARCHAR(18), DATA_ENTRADA) from EVENTOS

Data sem estilo


select 'DATA DACOMPRA.: ' + CONVERT(VARCHAR(18), DATA_COMPRA) from COMPRA

Data com Estilo


select 'DATA DACOMPRA.: ' + CONVERT(VARCHAR(18), DATA_COMPRA, 103) from COMPRA

Convertendo com Estilo de formato


select 'DATA.:' + CONVERT(VARCHAR(18), DATA_ENTRADA, 103) from EVENTOS
Saida: 01/01/2007

Outros que deram certo:


INSERT EVENTOS(DATA_ENTRADA) select CAST(SUBSTRING(TODAS, 9, 8) AS
DATE) "Date" FROM EVENTOS
Dois parâmetros:
INSERT EVENTOS(RAIZ_CNPJ, DATA_ENTRADA) select SUBSTRING(TODAS, 1, 8),
CAST(SUBSTRING(TODAS, 9, 8) AS DATE) "Date" FROM EVENTOS

Convertendo Money:
Select CONVERT(money, SUM(VALOR_SERVICO)) from PRESTADORES where IE = '130204250'
AND DATA_INICIAL BETWEEN '20130101' AND '20131231'

SELECT CONVERT(int, 14.85);

Result: 14 (result is truncated)

SELECT CONVERT(float, 14.85);

Result: 14.85 (result is not truncated)

SELECT CONVERT(varchar, 15.6);

Result: '15.6'

SELECT CONVERT(varchar(4), 15.6);

Result: '15.6'

SELECT CONVERT(float, '15.6');

Result: 15.6

DADTA – Convertendo String para Data

SELECT CONVERT(datetime, '2014-05-02');

Result: '2014-05-02 00:00:00.000'


SELECT CONVERT(varchar, '05/02/2014', 101);

Result: '05/02/2014'
CAMPOS CALCULADOS

USE TESTES

Um capo fica pré-definido para ser preenchido com um determinado Valor


CREATE TABLE PRODUTOS(
CODIGO INT,
NOME VARCHAR (50),
PRECO MONEY,
QTDE int,
TOTAL AS (PRECO * QTDE) -- Esta linha faz com que este campo seja
preenchido automaticamente.
)

Inserindo os dados (sem o total):


INSERT INTO PRODUTOS VALUES(1, 'MAÇÃ', 15.00, 2)
INSERT INTO PRODUTOS VALUES(2, 'PERA', 10.00, 2)
INSERT INTO PRODUTOS VALUES(3, 'UVA', 5.00, 5)
INSERT INTO PRODUTOS VALUES(4, 'MANGA', 7.00, 3)
INSERT INTO PRODUTOS VALUES(5, 'ABACAXI', 5, 2)

Mostrando:
SELECT * FROM PRODUTOS
INDICES DE BANCO DE DADOS
Permitem que as aplicações de banco de dados encontrem os dados
mais rapidamente, sem ter de ler tabela toda. O Usuário não vê o
índice. Dá muita performance ao banco.

OBS: criar índice apenas em tabela que receba muita consulta, pois ela
será toda indexada. Para o banco não ficar todo indexado e pesado.

Comando:
CREATE INDEX INDICE_CNPJ
ON PGDASD(CNPJ_MATRIZ)

ALTER INDEX {nome_indice | ALL} ON REBUILD ALTER INDEX {nome_indice |


ALL} ON REORGANIZE

Designer: ou clicar botão direito sobre a TABELA, expandir, ir até


Indexes(índice) e criar um novo índice.
REGRAS - RULES
São configurações que permitem especificar como determinados
parâmetros de banco de dados devem se comportar, como exemplo, limitar
faixar de valores em determinadas colunas, ou especificar valores
inválidos para registro

Comando:

Criando a Regra
CREATE RULE CONTROLE_PRECO AS @VALOR > 10.00

Consulta a Regras dentro de Programability / Regras

Executando, inserindo a Regra para um campo da tabela especifica


(através da procedure)
EXECUTE SP_BINDRULE CONTROLE_PRECO, 'PRODUTOS.PRECO'

Inserindo (Não aceitará – Preço está abaixo do estabelecido)


INSERT INTO PRODUTOS VALUES(1, 'MAÇÃ', 5.00, 2)

Inserindo (Aceitará)
INSERT INTO PRODUTOS VALUES(1, 'MAÇÃ_COM_REGRA_DE_PREÇO', 15.00, 2)

SELECT * FROM PRODUTOS

OBS: Fazer com a regra impeça as atualizações indevidas no banco de


dados.
DECLARAÇÃO DE VARIAS

Pode ser declarado variáveis no SQL SERVER. Dentro de um batch


ou um procedimento.
Pode-se atribuir valores a ela com a declaração SET ou SELECT.
As variáveis por padrão são criadas Nulas (NULL)

USANDO VARIÁVEIS NO SQL SERVER

Declarando
DECLARE @Valor Int,
@Texto VARCHAR(40),
@Data_Nasc DATE,
@Nada MONEY -- Vai retornar Null na chamada / A
ultima linha não precisa de virgula

Setando (Um SET p cada um e sem virgula)


SET @Valor = 50
SET @Texto = 'JOAO DA SILVA'
SET @Data_Nasc = GETDATE()
SET @Nada = 100.00

Mostrando o Valor das Variáveis


SELECT @Valor AS VALOR, @Texto AS TEXTO, 'Data de Nascimento', @Nada
AS SALÁRIO

Setando uma coluna do banco para dentro de uma Variavvel (Tudo sem
virgula) - Ela so retorna um valor - ultimo
DECLARE @Livro VARCHAR(40)
SELECT @Livro = Nome FROM TBL_LIVROS Where Id_Livro = 102
Mostrando a coluna setada
SELECT @Livro AS 'NOME DO LIVRO'

Exemplo com calculos varias colunas do Banco (Multiplicandois entre


elas as Variave)
DECLARE @Preco MONEY, @Qtde INT, @Nome VARCHAR(40)
SET @Qtde = 5

Atribuindo as coluas as Var


SELECT @Nome = Nome, @Preco = Preco_Livro FROM TBL_LIVROS Where
ID_LIVRO = 102

Mostrando Calculado
SELECT @Nome AS 'LIVRO', @Preco * @Qtde AS 'PREÇO DOS LIVROS'
IF e IF ELSE

Executar uma linha conforme o retorna de a condição.


Executa apenas uma linha após a condição. Para executar mais de
uma linha deve usar Begin bloco de código End. Mesma coisa par ao ELSE
Begin bloco de código End.
TRABALHANDO COM IF E ELSE

Exemplo Simples:
if 1 > 2 SELECT 'MAIOR' ELSE SELECT 'MENOR'

Declarando
DECLARE @Numero Int,
@Texto VARCHAR(40),
@Data_Nasc DATE,
@Valor MONEY

Setando
SET @Numero = 20
SET @Texto = 'SERGIO'
SET @Valor = 10

Pela condição
IF @Numero = 20 SELECT ' Numero Correto'

IF e ELSE
IF @Texto = 'Ana'
BEGIN
SET @Numero = 30
SELECT @Numero AS 'Idade'
END;
ELSE
BEGIN
SET @Numero = 40
SELECT @Numero AS 'Idade Incorreta'
END;

IF E ELSE COM BANCO DE DADOS

Declarando
DECLARE @Nome VARCHAR(50),
@Media REAL,
@Resultado VARCHAR(50)

Buscando as Notas do Banco


SELECT
@Nome = Nome_Aluno,
@Media = (ALUNOS.Nota1 + ALUNOS.Nota2 + ALUNOS.Nota3 +
ALUNOS.Nota1) / 4
FROM ALUNOS
WHERE Nome_Aluno = 'Rafael'

Mostrando Teste
SELECT @Nome, @Media AS 'MEDIA'

Verificações
IF @Media >= 7.00
BEGIN
--Seta como Aprovado
SELECT @Resultado = 'APROVADO'

END;
ELSE
BEGIN
--Seta como Reprovado
SELECT @RESULTADO = 'REPROVADO'

END;

Mostrando o Resultado Final


SELECT 'O Aluno "' + @Nome + '" está ' + @Resultado + ' Com Média ' +
CAST(@Media AS VARCHAR)
WHILE
Estrutura de repetição. Executa um código enquanto uma função
for verdadeira. Para bloco de comandos também precisa BEGIN bloco END.

WHILE
DECLARE @Valor Int
SET @Valor = 0

Mostrando
WHILE @Valor < 10
BEGIN
--Mostrando
PRINT 'NUMERO:' + CAST(@Valor AS VARCHAR)

--Incrementa
SELECT @Valor = @Valor + 1

END;

Usando campos do Banco de Dados


DECLARE @Codigo Int
SET @Codigo = 100

Mostrando os Livros com Codigo menor que 106


WHILE @Codigo < 110
BEGIN

Mostrando
SELECT ID_LIVRO AS ID, NOME AS LIVRO, PRECO_LIVRO AS PREÇO FROM
TBL_LIVROS WHERE ID_LIVRO = @Codigo
--select @codigo

Incremento
SET @Codigo = @Codigo + 1
END;
PROCIDURE

São lotes (Batches) de declaração SQL que podem ser declarados


como uma subrotina a parte.
Vantagem: permite centralizar a lógica de acesso aos dados em um
único local. Facilitando a manutenção e a otimização do código.
Também é possível ajustar permissões de acessos aos usuários,
definindo quem pode ou não executá-las.

CRIAÇÃO:
Criando sem Var
CREATE PROCEDURE CONSULTAR_VENDEDORES
as
begin

Select * FROM VENDEDOR

end

Criando sem Var e Consulta ao Campo com Parametro


CREATE PROCEDURE CONSULTA_LIVRO (@IdLivro INT)
AS
BEGIN

SELECT NOME, PRECO_LIVRO FROM TBL_LIVROS


WHERE ID_LIVRO = @idLivro

END

--Executando
EXEC CONSULTA_LIVRO 102

Criando sem Var e Consulta ao Campo com 2 Parametro


CREATE PROCEDURE CONSULTA_LIVRO_2 (@IdLivro INT, @Preco MONEY)
AS
BEGIN

SELECT NOME, PRECO_LIVRO FROM TBL_LIVROS


WHERE ID_LIVRO > @idLivro AND PRECO_LIVRO < @Preco

END

Buscando livros com preço Menor que 200


EXEC CONSULTA_LIVRO_2 100, 200.00
Criando sem Var e Consulta ao Campo com 2 Parâmetros
CREATE PROCEDURE COMPRA_LIVRO (@IdLivro INT, @Qtde INT)
AS
BEGIN

SELECT NOME, PRECO_LIVRO * @Qtde FROM TBL_LIVROS


WHERE ID_LIVRO = @idLivro

END

Id e Qtde que quero levar


EXEC COMPRA_LIVRO 112, 2

CRIANDO UMA COMPLETA


/*
CREATE TABLE PESSOA (

Id int not null primary key identity,


Name varchar(50) not null,
Status int not null
)
*/

/*
CREATE TABLE CLIENTE(
Avissa que o ID vem da tabela pessoa
Pessoa_Id int not null references PESSOA,
Credito Decimal(10,2) not Null

)
*/

OBS: para inserir em Vendedor ou Cliente, primeiro é necessário


inserir em PESSOA
/*
CREATE TABLE VENDEDOR(
Pessoa_ID int not null References Pessoa,
Salario decimal(10,2) not null

)
*/

Inserindo em Pessoa e Vendedor


INSERT INTO PESSOA VALUES('CARLOS',1)

INSERT INTO VENDEDOR VALUES(2, 2000.00)


delete from vendedor where Pessoa_ID = 1

select * FROm PESSOA


select * FROm VENDEDOR

Mostrando com Chave Estrangeira


select * from vendedor join PESSOA ON VENDEDOR.Pessoa_ID =
PESSOA.Pessoa_ID

Criando a Procidure Completa


CREATE PROCEDURE ADD_VENDEDOR
(
Criando variaveis: Mesmo Tamanho do campo
@nome varchar(50),
@status int,
@salario decimal(10,2)

)
as
begin

Aqui vai ser gerado uma outra pessoa e será gerado um novo
ID(Auto Incremente)
INSERT INTO PESSOA VALUES(@nome , @status)

@@IDENTITY: faz com que ele coloque aqui a ultima ID gerado


acima no banco pelo auto incremente
INSERT INTO VENDEDOR VALUES(@@IDENTITY , @salario)

end

Executando a Procedure
EXEC ADD_VENDEDOR 'SERGIO2', 0, 2000.00
PROCIDURE CONTINUAÇÃO

Sp_helptext: visualizar o conteúdo de texto de um procedimento


armazenado.

Ex: EXEC sp_helptext TESTE

Criando uma procidure criptografada:

CREATE PROCEDURE CONSULTAR_VENDEDORES


WITH ENCRYPTION
as
begin
Select * FROM VENDEDOR
end

Mostrando
EXEC CONSULTAR_VENDEDORES

Tentando ver seu conteudo


EXEC sp_helptext CONSULTAR_VENDEDORES

ALTERANDO UMA PROCIDURE:


Você precisa praticamente escrever todo o código novamente, mas
desta vez seguido do termo ALTER e com as alterações que se quer
fazer.

Sobrepõe a procidure Anterior


ALTER PROCEDURE CONSULTAR_VENDEDORES (@Par1 AS INT)
As
begin

SELECT @Par1 * 2
end

Executando
EXEC CONSULTAR_VENDEDORES 10
Executando 2
EXEC CONSULTAR_VENDEDORES @par1 = 10

Procidure com Valor Padrão:

Cria com valor padrão para um parâmetro


CREATE PROCEDURE CADASTRAR (@Nome AS Varchar(50), @Salario AS MONEY =
500.00)
As
begin

INSERT INTO VENDEDOR(Nome, Salario) Values(@Nome, @Salario)

end

Executando sem passar o valor do Salário (ou seja gravou o valor


padrão do banco)
EXEC CADASTRAR 'Pedro da Silva'

Executando sem 2 valores


EXEC CADASTRAR 'Mariana', 1500
PROCIDURE COM PARAMETRO DE SAÍDA

Ele habilita o procedimento a retornar dados para o procedimento


chamador.

Usa-se a palavra-chave OUTPUT quando o procedimento é criado e


também quando é chamado.

Ele aparece como se fosse uma variável local. E o chamador


recebe-o dentro de uma variável.

Procedure com Parametro de SAIDA


CREATE PROCEDURE PROC_SAIDA (@Par1 AS INT OUTPUT)
As
begin

SELECT @Par1 * 2
RETURN

end

Declra-se a variavel (bidimensional - leva e traz)


DECLARE @Valor AS INT = 15

Executa (leva o valor e traz o resultado na mesma var) - Porque é


OUTPUT
EXEC PROC_SAIDA @Valor OUTPUT

Mostra
PRINT @Valor
COMANDO RETURN
Termina incondicionalmente o procedimento retorna um valor
inteiro ao chamador. Pode-se usar para indicar um estado do programa,
sucesso ou falha.

Criando
CREATE PROCEDURE PROC_RETORNO (@IdLivro SMALLINT, @Qtde SMALLINT, @Cod
SMALLINT = -10)
AS

SET NOCOUNT ON (Evita a contagem de linhas afetadas)


IF @IdLivro > 100
BEGIN

SELECT NOME, PRECO_LIVRO * @Qtde FROM TBL_LIVROS


WHERE ID_LIVRO = @idLivro

RETURN 1

END
ELSE
RETURN @Cod

Chamando e jogando o Retorno para dentro da Var


DECLARE @Codigo INT
EXEC @Codigo = PROC_RETORNO 102, 2

Imprime o Retorno
PRINT @Codigo
FUNCTION
UDF Funções Definidas pelo Usuário

Podemos criar funções (UDF) para realizar diversas tarefas


distintas no banco de dados. Tais como:

Inserir lógica complexa em uma consulta; Criar Novas Funções


para expressões complexas; Substituir exibições com a vantagem de
aceitar parâmetros.

Há Vários tipos de UDF: Funções Escalares, Valor de Tabela


Embutida, Valor de Tabela Multi-instruções.

FUNÇAO ESCALAR:

É aquela que executa algo e retorna um valor específico


escolhido.

--FUNÇÕES: Muito parecido com a PROCEDURE, porem deve-se setar um tipo


de retorno que se quer

--Criando a Função (Este Retorno é com "S")


CREATE FUNCTION MEDIA_ALUNO(@Nome VARCHAR(50))
RETURNS REAL
AS
BEGIN
--Var que Recebe a Media
DECLARE @Media REAL

-- Joga o res. dos campos para dentro da var


SELECT @Media = (ALUNOS.Nota1 + ALUNOS.Nota2 + ALUNOS.Nota3 +
ALUNOS.Nota1) / 4
FROM ALUNOS WHERE Nome_Aluno = @Nome

--Retorno
RETURN @Media

END

--Chamando a Função
SELECT dbo.MEDIA_ALUNO('Maria')

FUNÇAO DE TABELA EMBUTIDA OU INLINE


São similares a uma exibição(View). Porém permitem utilizar
parâmetros. Retornam um conjunto completo de dados. Destaque
para o RETURNS TABLE: pois retornará vários valores/Linhas.

--FUNÇÃO DE TABELA EMBUTIDA OU INLINE

CREATE FUNCTION RETORN_ITENS(@Valor REAL)


RETURNS TABLE
AS

--O retorn o será o próprio SELECT


RETURN (
SELECT L.Nome, A.Nome_Autor FROM TBL_LIVROS AS L
INNER JOIN TBL_AUTORES AS A
ON L.ID_AUTOR = A.ID_AUTOR
Where L.PRECO_LIVRO > @Valor

Executando: aqui preciso especificar quais campos da tabela embutida


ela vai me retornar
--Ao mesmo tempo que do um select, mostro, eu a chamo passando os
parâmetros
SELECT NOME, NOME_AUTOR FROM RETORN_ITENS(10)
FUNÇAO DE TABELA EMBUTIDA – COM VÁRIAS INTRUÇÕES

É uma combinação de Função escalar com função de tabela


embutida. Retorna um resultset na forma de uma tabela.

Você pode montar a tabela e os tipos de dados específicos


que ela vai retornar.

Criando Função | Retorna a tabela criada para dentro de uma Var


CREATE FUNCTION MULTI_TABELA()
RETURNS @Valores Table
(
Nome_Livro VARCHAR(50),
Data_Pub DateTime,
Nome_Editora VARCHAR(50),
Preco_Livro MONEY
)
AS
BEGIN
joga a consulta para dentro da tabela virtual através da var criada
INSERT @Valores (Nome_Livro, Data_Pub, Nome_Editora,
Preco_Livro)
SELECT L.NOME, L.DATA_PUB, E.Nome_Editora, L.PRECO_LIVRO
FROM TBL_LIVROS AS L
INNER JOIN TBL_EDITORAS AS E
ON L.Id_Editora = E.ID_Editora

RETURN -- Fim
END

Chamando a função com valor de tabela embutida - Poderia passar


parâmetro
SELECT * FROM MULTI_TABELA()
TRIGGER

Um Trigger(gatilho) é um tipo especial de Stored Procedure que é


executado automaticamente quando um usuário realiza uma operação de
modificação de dados em uma tabela especificada.

As operações que podem disparar um trigger são: ISERT, UPDATE,


DELETE.

O trigger pode ser AFTER (depois) ou ISTEAD OF (em vez de).

AFTER: só executa o gatilho após todas as ações (insert, update e


delete) terem sido executadas na tabela.

ISTEAD OF: neste caso o gatilho é executado no lugar da operação que


causou o disparo. Ex: em vez de deletar o faça tal coisa.
AFTER:
--Criando o trigger
CREATE TRIGGER TESTE_TRIGGER_AFTER
ON TBL_LIVROS
AFTER INSERT -- Escolha depois de qual ação (INSERT, UPDATE, DELETE)
AS
PRINT 'O DADO FOI INSERIDO';

--Fazendo teste: inserir para ver se o trigger vais er ativado


INSERT INTO TBL_LIVROS(NOME) Values('LIVRO 8')

Apagando uma Trigger:


DROP TRIGGER TESTE_TRIGGER_AFTER

Alterar Trigger: reescrever a trigger mas no lugar da palavra CREATE,


coloca-se a ALTER
ALTER TRIGGER TESTE_TRIGGER_AFTER

Trigger inserindo em varias tabelas


--Criando o trigger
CREATE TRIGGER TESTE_TRIGGER_AFTER
ON TBL_LIVROS
AFTER INSERT -- Escolha depois de qual ação (INSERT, UPDATE, DELETE)
AS
--Vai se inerido também um dados na tabela Editora e Autor

--Fazendo teste: inserir para ver se o trigger vais er ativado


INSERT INTO TBL_AUTORES(Nome_Autor, Sobre_Nome_Autor) Values('RUI', 'CHAPEU')
INSERT INTO TBL_EDITORAS(Nome_Editora) Values('ALIANÇA')

--Inserir em Livros para ver se o trigger também insirirá nas duas


ouyttas tabelas
INSERT INTO TBL_LIVROS(Nome) Values('NOVO LIVRO')

INSTEAD OF:

Criando o trigger ISTEAD OF


CREATE TRIGGER TESTE_TRIGGER_INSTEAD_OF
ON TBL_LIVROS
INSTEAD OF DELETE -- Destaca qual ação vai substituir
AS
Ao em vez de fazer a ação executa o comando abaixo
PRINT 'HOUVE UMA TENTATIVA DE DELEÇÃO'

Fazendo teste: inserir para ver se o trigger vais er ativado


DELETE FROM TBL_LIVROS Where id_Livro = 102
HABILITAR E DESABILITAR TRIGGER

O trigger pode ser temporariamente desabilitado. Usar o comando


DDL ALTER TABLE.

Habilitando e Desabilitando um Trigger: ENABLE | DISABLE


ALTER TABLE TBL_LIVROS
DISABLE TRIGGER TESTE_TRIGGER_INSTEAD_OF

ALTER TABLE TBL_LIVROS


ENABLE TRIGGER TESTE_TRIGGER_INSTEAD_OF

VERIFICAÇÃO DE TRIGGER

Verificar a existência de Trigger e seus STATUS


EXEC sp_helptrigger @tabname = TBL_LIVROS

Todos os Trigger do Banco:só habilitados ou Desabilitados


SELECT * FROM sys.triggers
WHERE is_disabled = 0
TRIGGER UPDATE

A função UPDATE() retorna true caso uma coluna especificada


tenha sido alterada por uma transação DML.

Criando o trigger UPDATE


CREATE TRIGGER TESTE_AFTER_UPDATE
ON TBL_LIVROS
AFTER INSERT, UPDATE
AS
Se foi a coluna "Nome" quem recebeu atualização então executa ou não
IF UPDATE(Nome)
BEGIN
PRINT 'O nome do livro foi Atualizado';
END
ELSE
BEGIN
PRINT 'NÃO FOI O NOME DO LIVRO QUE FOU ATUALIZADO';
END

Atualizando o Nome
UPDATE TBL_LIVROS set NOME = 'Teste' where ID_LIVRO = 103

Atualizando o Sobre Nome


UPDATE TBL_LIVROS set ISBN = 'ISBN Teste' where ID_LIVRO = 103

ANINHAMENTO DE TRIGGER
É quando o trigger dispara um outro evento ou ele mesmo. Para
que isso funcione a opção que gatilhos disparem outros gatilhos devem
estar habilitada. Ou usa a linha de comando abaixo:

EXEC sp_configure ‘Nested Trigger’, 0 | 1;

RECONFIGURE; (0 desabilita; 1 habilita)

(ESTUDAR MAIS ESTE ASSUNTO)


Zerar campo auto incremente da tabela:

Basta digitar esta linha de comando:

DBCC CHECKIDENT ('Nome_tabela', RESEED, 0)


FAZER BKP DA TABELA OU DO BANCO DE DADOS INTEIRO
Nesta opção você pode escolher gerar SQL só da estrutura do Banco ou da tabela. Ou
SQL só dos dados da tabela. Ou SQL da Estrutura e dos dados juntos.

Bkp Exportar dados direto entre bancos de dados:

Botão Direito em cima da Base de Dados / Tasks / Export Date / Fonte é o próprio Banco /
Próxima página escolher o destino: colocar o IP da máquina de destino na segunda linha / Na
parte de baixo do form escolher a base de dados.

OBS: ignorar o campo código. Deixar todos os campos iguais

GERAR SCRIPT COMPLETO DOBANCO:

Botão Direito em cima da Base de Dados: Botão Direito no Banco / Tasks / Generate Script:

Gerar Script: (não aguenta muitos dados depois para ser importado)

Botão Direito em cima da Base de Dados / Tasks / Generate Script: na tela que se segue
colocar para escolher as tabelas a serem copiadas (Select Specific Data Base) / Após ticar na
tabela escolhida/ Clicar no botão Advanced / Aí na Opção: “Type of data to Script”: escolher
a opção “Data Only” – somente dados.

Aumentar a Performance do SQL Server:

SQL Server 2012 / Performance Tool / SQL Server Profile: Executar o botão New Trace.
Gerará um arquivo com todos os de SQL que o progroma está usando, salvar e abrir no
programa abaixo.

Data Base Egine Tuning Advisor: dentro deste programa abrir o arquivo “trace” que ele
indicará o que deve ser feito para melhorar a performance do banco. Ticar o Banco / e Abrir o
arquivo e mandar executar: Start Analysis.
CRIAR TABELA NA MEMORIA DO BANCO EM TEMPOD E
EXECUÇÃO
Só funciona em tempo de execução na mesma consulta

DECLARE @Tabela TABLE

codigo smallint not null,

nome varchar(20)

INSERT INTO @Tabela(codigo, nome) VALUES(1, 'leivio')

INSERT INTO @Tabela(codigo, nome) VALUES(2,'Nome1')

INSERT INTO @Tabela(codigo, nome) VALUES(3,'Nome1')

/*Exemplo de Select*/

SELECT * FROM @Tabela


SELECIONA OU CRIA A TABELA CUJO NOME É PASSADA POR
PARAMETRO

O nome da tabela é passada por variável.

Declare @NomeTabela as varchar(255)


set @NomeTabela = 'USUARIO'
exec ('Select * from ' + @NomeTabela)

--Crea Procidure que cria uma tabela cujo o nome da Tabela Foi passado por
Parametro
CREATE PROCEDURE INSERE_EMBASAMENTO_LEGAL(@NomeTabela as varchar(255))
AS
BEGIN

Declare @NomeTabelaAux as varchar(255)


set @NomeTabelaAux = @NomeTabela
--exec ('select * from OFICIO_SERGIO')
exec ('UPDATE ' + @NomeTabelaAux + ' SET EMBASAMENTO_LEGAL = ' + '''Texto
Teste''')

END
CASE

Pedidos

id data forma_pagamento valor

1 12/09/2008 1 108,00

2 17/09/2008 2 52,00

3 18/09/2008 3 328,00

Utilizando Case com Select :

SELECT Nome, id,


CASE id
when 1 then 'Boleto'
when 2 then 'Cartão VISA'
when 3 then 'Cartão MASTERCARD'
end as "TIPO PAGAMENTO",

VALOR FROM TESTE


RESTAURAR BANCO DE DADOS
Serve para jogar um banco sobre o outro com a estrutura parecida. Exemplo Jogar o
Banco Produção sobre o Demostrativo de desenvolvimento.

Botão Direito Base de Dados / Task / Restore / Base Dados / Device – De onde Pegará

Ir menu esquerda - Files: Ticar em : “Realocate All Files TO foldes”

Options: Ticar “OveWriti the existing DataBase”.

COIPAR BASE DE DADOS INTEIRA:

Copiar de uma Base dados para Outra: Botão Direito na Base de dados recebera novas tabelas
/ Importar Dados / Indicar de onde será importado / Para Onde será Importado.
EVENTOS LOG – REGISTRO DO SISTEMA

Mostrar Log de Email:

* SELECT FROM msdb.dbo.sysmail_event_log


LIBERANDO MEMORIA DO SQL SERVER
Para evitar erro “memory fop out”: que é o sistema operacional que fica sem memoria

Este é o comportamento do SQL Server, ele assume que toda a memória do


servidor disponível é para ele. E caso alguma aplicação precise, ele faz a
liberação de acordo com a sua carga.

Se você quiser limitar o consumo de memória do SQL Server, faça o seguinte:

Botão direito na instância -> Properties -> Memory -> Maximum Server
Memory (MB) e coloque o valor desejado como limite para o SQL Server (em
Mega!)

Se quiser fazer via T-SQL:

EXEC sys.sp_configure N'show advanced options', N'1' RECONFIGURE WITH OVERRIDE


GO
EXEC sys.sp_configure N'max server memory (MB)', N'6000' --
GO
RECONFIGURE WITH OVERRIDE
GO
EXEC sys.sp_configure N'show advanced options', N'0' RECONFIGURE WITH OVERRIDE
GO
LIMITAR A QTDE DE REGISTRO NA CONSULTA: TOP + NUEMRO
select top 5 * from CARTAO_DEBITO_CREDITO
COMMIT - LIGAR E DESLIGAR AUTO COMMIT

Você pode ativar a confirmação automática configurando implicit_transactions OFF:

SET IMPLICIT_TRANSACTIONS OFF

Desta forma o SQL SERVER comitará autoamticamente

SET IMPLICIT_TRANSACTIONS ON:

Desta forma precisa sempre dar um commit.

Talvez um exemplo seja mais claro. Isso gravará uma alteração no banco de dados:

SET IMPLICIT_TRANSACTIONS ON
UPDATE MyTable SET MyField = 1 WHERE MyId = 1
COMMIT TRANSACTION

Isso não gravará uma alteração no banco de dados:

SET IMPLICIT_TRANSACTIONS ON
UPDATE MyTable SET MyField = 1 WHERE MyId = 1
ROLLBACK TRANSACTION
DATA:

Montando data copiando de uma coluna que ela está em português jogando para
outra coluna que está padrão americano:

select SUBSTRING(DATA_OPERACAO, 7, 4) from [Cartão 2016 - Completo_02(62)]

select SUBSTRING(DATA_OPERACAO, 4, 2) from [Cartão 2016 - Completo_02(62)]

select SUBSTRING(DATA_OPERACAO, 1, 2) from [Cartão 2016 - Completo_02(62)]


FORMATAÇÃO UNICODE:

Unicode é um padrão adotado mundialmente que possibilita com que


todos os caracteres de todas as linguagens escritas utilizadas no planeta
possam ser representados em computadores. A “missão” do Unicode é
apresentada de forma clara no web site do Unicode Consortium (entidade
responsável pela sua gestão):

Unicode fornece um número único para cada caractere, não importa a


plataforma, não importa o programa e não importa a linguagem.
IMPORTANDO DADOS PARA O BANCO SEM ERROS

Banco De dados / Botão Direito na Base de Dados / Task / Import Data /

Usando o Wizard/Guia: Data Source: escolher o tipo de dados: Microsoft Excel


para Excel para ou CSV / ou Flat File Surce para Arquivo TXT / Escollher o
Arquivo / Em Header Row Delimiter: Semicolon {;} / Escolher(ESSENCIAL: Nesta
Mesma Tela Clicar em Advanced) / Ir Propriedade Data Type / Colocar todos como
“text stream [DT_TEXT]” / (Isso fará que carregue arquivos Gigantes sem
problemas)

OBS: Carregar todos como varchar(MAX). Depois fazer os cast (conversões na

hora de copiar os arquivos).

Exemplo de Inserção de uma tabela toda dentro de outra com cast – convertendo
na hora de copiar:

INSERT INTO CARTAO_DEBITO_CREDITO_BRUTO(IE, CNPJ, NOME_CREDOR, MUNICIPIO,


CNPJ_OPERADORA, NOME_OPERADORA, DATA_OPERACAO, NUMERO_OPERACAO,
NATUREZA_OPERACAO, DEBITO_CREDITO, VALOR_OPERACAO)

select TOP 10 IE, CNPJ, NOME_CREDOR, MUNICIPIO, CNPJ_OPERADORA, NOME_OPERADORA,


SUBSTRING(DATA_OPERACAO, 7, 4) + '/' + SUBSTRING(DATA_OPERACAO, 4, 2) + '/' +
SUBSTRING(DATA_OPERACAO, 1, 2), NUMERO_OPERACAO, NATUREZA_OPERACAO,
DEBITO_CREDITO, CAST(VALOR_OPERACAO AS MONEY) from CARTAO_2016
JUNTAR – UNIR - UNIFICAR ARQUIVOS CSV ou TXT PELO DOS - CMD:

Entre dentro da pasta com todos Arquivos - ex "c:\csv" digite o comando:

copy *.csv unificado.csv


SUBSTUIR CARACTERES:

Select replace (VALOR, ',', '.') as 'VALOR' From 'CARTAO'


DESCOBRIR O NOME E TIPO DE CAMPOS DA TABELA:

Use SIMPLESI
Go

SP_Columns CARTAO_2019_VIRTUAL_BRUTO

Go
ISDATE

Verifica se a data é valida. Se retornar 0 é porque a data é falsa. 1 para


data verdadeira:

Retornará 1 se a expressão for um valor data, time ou datetime válido; caso


contrário, 0.

SELECT ISDATE('--sa11') : Retorno será 0 – Não é uam data valida

SELECT ISDATE('2007-3-01'): O Retorno será 1 – è uam data valida

Você também pode gostar