Comandos SQL Server
Comandos SQL Server
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
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
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
);
);
Deletando dados:
DELETE FROM CLIENTE WHERE ID = '2006';
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
Em Colunas Escolhidas:
INSERT INTO CLIENTE(NOME, TELEFONE) VALUES ('SERGIO', '3663');
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
Alterando dados:
UPDATE CLIENTE SET VALOR = 10 WHERE ID = '2006';
UPDADTE X SELECT
UPDATE VENDEDOR
SET SALARIO = Salario * 1.1
WHERE SALARIO = (SELECT MIN(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
--Qtde de Departamentos
select COUNT(Nome) from VENDEDOR
JOIN
CLIENTE AS C
ON
C.ID_CLIENTE=T.ID_CLIENTE
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 de cada grupo, q QTDE de linhas que cada grupo tem:
CONCATENÇÃO (+)
select * from vendedor where nome = 'ser' + 'gio'
Sintaxe:
String1 | Coluna + String2 | Coluna
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
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
É só passar esta consulta feita acima como fonte de dados para uma
outra consulta
Mas só os campos CLIENTE e TOTALs
--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
--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.
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.
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
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:
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.
--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???
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.
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
Convertendo Money:
Select CONVERT(money, SUM(VALOR_SERVICO)) from PRESTADORES where IE = '130204250'
AND DATA_INICIAL BETWEEN '20130101' AND '20131231'
Result: '15.6'
Result: '15.6'
Result: 15.6
Result: '05/02/2014'
CAMPOS CALCULADOS
USE TESTES
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)
Comando:
Criando a Regra
CREATE RULE CONTROLE_PRECO AS @VALOR > 10.00
Inserindo (Aceitará)
INSERT INTO PRODUTOS VALUES(1, 'MAÇÃ_COM_REGRA_DE_PREÇO', 15.00, 2)
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 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'
Mostrando Calculado
SELECT @Nome AS 'LIVRO', @Preco * @Qtde AS 'PREÇO DOS LIVROS'
IF e IF 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;
Declarando
DECLARE @Nome VARCHAR(50),
@Media REAL,
@Resultado VARCHAR(50)
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;
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;
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
CRIAÇÃO:
Criando sem Var
CREATE PROCEDURE CONSULTAR_VENDEDORES
as
begin
end
END
--Executando
EXEC CONSULTA_LIVRO 102
END
END
/*
CREATE TABLE CLIENTE(
Avissa que o ID vem da tabela pessoa
Pessoa_Id int not null references PESSOA,
Credito Decimal(10,2) not Null
)
*/
)
*/
)
as
begin
Aqui vai ser gerado uma outra pessoa e será gerado um novo
ID(Auto Incremente)
INSERT INTO PESSOA VALUES(@nome , @status)
end
Executando a Procedure
EXEC ADD_VENDEDOR 'SERGIO2', 0, 2000.00
PROCIDURE CONTINUAÇÃO
Mostrando
EXEC CONSULTAR_VENDEDORES
SELECT @Par1 * 2
end
Executando
EXEC CONSULTAR_VENDEDORES 10
Executando 2
EXEC CONSULTAR_VENDEDORES @par1 = 10
end
SELECT @Par1 * 2
RETURN
end
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
RETURN 1
END
ELSE
RETURN @Cod
Imprime o Retorno
PRINT @Codigo
FUNCTION
UDF Funções Definidas pelo Usuário
FUNÇAO ESCALAR:
--Retorno
RETURN @Media
END
--Chamando a Função
SELECT dbo.MEDIA_ALUNO('Maria')
RETURN -- Fim
END
INSTEAD OF:
VERIFICAÇÃO DE TRIGGER
Atualizando o Nome
UPDATE TBL_LIVROS set NOME = '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:
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.
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.
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
nome varchar(20)
/*Exemplo de Select*/
--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
END
CASE
Pedidos
1 12/09/2008 1 108,00
2 17/09/2008 2 52,00
3 18/09/2008 3 328,00
Botão Direito Base de Dados / Task / Restore / Base Dados / Device – De onde Pegará
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
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!)
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
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:
Exemplo de Inserção de uma tabela toda dentro de outra com cast – convertendo
na hora de copiar:
Use SIMPLESI
Go
SP_Columns CARTAO_2019_VIRTUAL_BRUTO
Go
ISDATE