top of page
  • Foto do escritorGabriel Quintella

Comandos DML ou Data Manipulation Language - Parte 1

Atualizado: 24 de abr. de 2021

Dando continuidade em nossa sessão um de muitos, depois de uma breve explicação sobre a ferramenta que iremos usar, passar pelo processo de configuração, usabilidade e dando os primeiros passos, criação do nosso primeiro banco de dados e tabela, vamos falar um pouco agora sobre como realizar a manipulação dos nossos dados! Estão ansiosos? Preparados? Bora lá então...


Ao finalizar o último post, https://dbagabriel.wixsite.com/dba-assists/post/tipos-de-dados, deixamos uma tarefa e falamos sobre o que debateríamos nesse post, vamos relembrar!


1 - Desafio 1 - Dna Clotilde trabalha como revendedora de uma famosa empresa de cosméticos a muitos anos. Você acredita que até hoje ela mantém todos os seus clientes anotados no seu amigo de longa data! O seu caderninho de anotações manter sempre próximo, dentro de sua bolsa e para onde ela vai, ele está lá. Sempre que rola promoções, entregas e novos pedidos, essa é a fonte de dados fundamental para o seu dia-a-dia. Pedrinho, filho mais velho de Dna Clotilde está cursando o 5º período da faculdade de Ciências da Computação e nesse semestre está estudando a disciplina de banco de dados. Durante as aulas ele aprendeu como realizar a instalação de um banco de dados, conceitos básicos e na última aula aprendeu sobre armazenamento de dados em tabelas. Durante a aula o professor pediu para eles pensarem em um cenário onde seria fácil fazer essa aplicação. E não teve como não pensar no negócio da sua mãe.


Quando chegou em casa, sentou para conversar com sua mãe. Incorporou o analista de negócio e após uma breve conversa, ele entendeu que para atender a necessidade dela, precisaria criar uma tabela com os seguintes atributos:

- Uma coluna para armazenar o nome dos Clientes e todo cliente ela dava um nome;

- Uma coluna para armazenar o endereço;

- Uma coluna para armazenar o telefone

- E ele pensou em criar uma coluna também para ser o Código dos Clientes


Script da minha tabela. Não é somente da forma como fiz que é a correta, tudo bem?



2 - Comentei que iria iniciar esse post falando sobre Tabelas Temporárias ou Temporary Tables;


3 - Falamos também sobre o que seria o comando Truncate Table, esse comando será abordado quando começarmos a falar sobre o comando Delete e;


4 - E vamos destacar DOIS comandos extremamente importantes dentro de um SGBD, são eles:

  1. - Como inserir/armazenar dados (Comando INSERT);

  2. - E como até elimina-los (Comando DELETE);

Vamos começar então!


Tabelas Temporárias ou Temporary Tables


Uma tabela temporária no Microsoft SQL Server, como o nome sugere, é uma tabela de banco de dados que existe temporariamente no servidor de banco de dados. Uma das melhores explicações para esse tipo de objeto é que uma tabela temporária vai existir para armazena um subconjunto de dados de uma tabela normal por um determinado período de tempo, ou seja, enquanto a sessão que fez a sua criação estiver aberta!


As tabelas temporárias são particularmente úteis quando você tem um grande número de registros em uma tabela e precisa interagir repetidamente com um pequeno subconjunto desses registros. Nesses casos, em vez de filtrar os dados repetidamente para buscar o subconjunto, você pode filtrar os dados uma vez e armazená-los em uma tabela temporária. Você pode então executar suas consultas nessa tabela temporária.



As tabelas temporárias são armazenadas no “tempdb”, que é um banco de dados do sistema.


Vamos dar uma olhada em como você pode usar dados temporários em um cenário simples.






Para prosseguir, vamos analisar o código abaixo:


Bem simples, vamos criar uma tabela de nome Estudante e em seguida inserir alguns registros.



-- Selecionando o Banco de Dados
USE TESTE
GO

-- Criação da Tabela Estudante
CREATE TABLE dbo.Estudante
(
    id INT PRIMARY KEY,
    nome VARCHAR(50) NOT NULL,
    sexo VARCHAR(50) NOT NULL,
    idade INT NOT NULL,
    pontuacao INT NOT NULL,
);

-- Inserção de Registros na Tabela Estudante
INSERT INTO dbo.Estudante (id,nome,sexo,idade,pontuacao) VALUES (1, 'Joana', 'Feminino', 20, 500);
INSERT INTO dbo.Estudante (id,nome,sexo,idade,pontuacao) VALUES (2, 'João', 'Masculino', 22, 545);
INSERT INTO dbo.Estudante (id,nome,sexo,idade,pontuacao) VALUES (3, 'Sara', 'Feminino', 25, 600);
INSERT INTO dbo.Estudante (id,nome,sexo,idade,pontuacao) VALUES (4, 'Laura', 'Feminino', 18, 400);
INSERT INTO dbo.Estudante (id,nome,sexo,idade,pontuacao) VALUES (5, 'Alan', 'Masculino', 20, 500); 
INSERT INTO dbo.Estudante (id,nome,sexo,idade,pontuacao) VALUES (6, 'Kelly', 'Feminino', 22, 500);
INSERT INTO dbo.Estudante (id,nome,sexo,idade,pontuacao) VALUES (7, 'Ricardo', 'Masculino', 18, 643); 
INSERT INTO dbo.Estudante (id,nome,sexo,idade,pontuacao) VALUES (8, 'Clóvis', 'Masculino', 23, 543);
INSERT INTO dbo.Estudante (id,nome,sexo,idade,pontuacao) VALUES (9, 'Gabriel', 'Masculino', 21, 499); 
INSERT INTO dbo.Estudante (id,nome,sexo,idade,pontuacao) VALUES (10, 'Maria', 'Feminino', 27, 400);

Depois de executar os scripts, vamos passar por dois modos de criar uma tabela temporária.


1º - Método - Criação da tabela a partir de um SELECT


É possível realizar a criação da uma tabela temporária a partir de um comando SELECT, vamos ao exemplo:




-- Selecionando o Banco de Dados
USE TESTE
GO

-- Criação/Inserção dos dados na Tabela Estudante
SELECT nome, sexo,idade
INTO #EstudantesMasculino
FROM dbo.Estudante 
WHERE sexo = 'Masculino'

2º - Método - Criação da estrutura da tabela


Conforme ocorre em tabelas normais, primeiro vamos criar a tabela e depois inserir.




-- Selecionando o Banco de Dados
USE TESTE
GO

-- Criação da Tabela Estudante
CREATE TABLE #EstudantesMasculino
(nome VARCHAR(50)
, sexo VARCHAR(50)
,idade INT
)

-- Inserção dos dados na Tabela Estudante
INSERT INTO #EstudantesMasculino (nome, sexo, idade)
SELECT nome, sexo,idade
FROM dbo.Estudante 
WHERE sexo = 'Masculino'

Pois bem amigos, nos dois exemplos acima conseguimos verificar duas possibilidades de criar uma tabela temporária. Conforme comentamos no inicio desse tópico, tabelas temporárias são muito comum quando queremos trabalhar uma uma determinada amostra de dados com um simples objetivo, performance!


Além disso, lembra que também foi comentado que as tabelas temporárias elas ficam disponíveis quando uma sessão encontra-se ativa? Pois com essa informação fresquinha, vamos tratar de dois conceitos bem bacana que envolve esse objeto bacana.


Tabelas Temporárias Local e Global, qual a diferença entre eles?


Simples! Quando falamos tabelas temporárias local, a palavrinha "local" está se referindo sessão que você está executando/criando, ou seja, ela só pode ser visualizada por quem criou.


Já as "Globais", todos podem ter acesso aos seus dados, porém quando o criador encerrar sua sessão, a tabela é destruída.


A definição de tabelas temporária local ou global é realizada durante a sua criação pelo caractere "#" (tralha ou jogo da velha) antes do inicio do nome da tabela. Quando possuir apenas um "#" significa que é uma tabela temporária local e quando possuir dois "##" significa que trata-se de uma tabela temporária global. Vamos a dois exemplos.



-- Selecionando o Banco de Dados
USE TESTE
GO

-- Tabela temporária local
CREATE TABLE #EstudantesMasculino
(nome VARCHAR(50)
, sexo VARCHAR(50)
,idade INT
)

ou

-- Tabela temporária global
CREATE TABLE ##EstudantesMasculino
(nome VARCHAR(50)
, sexo VARCHAR(50)
,idade INT
)

Para finalizar nosso tópico, vamos para a última dúvida. Como que eu elimino minha tabela temporária criada?


Boa colocação! Por incrível que parece, isso é bem simples. Existe duas formas, uma que é definida como eliminação automática e a outra manual. Eu sei, até agora não expliquei nada, pode ter gerado mais dúvidas. Mais acalma o coração!


Na eliminação automática, a tabela temporária é eliminada quando a sessão é encerrada e na forma manual é feita com a utilização do comando DROP TABLE.


-- Sintaxe comando DROP TABLE 
DROP TABLE < nome tabela >

O que é uma sessão?


Estive pensando aqui e um ponto de interrogação pode ter ficado na cabeça de todos. Vamos ver se ficou mesmo. Nesse tópico falei muito na palavrinha, "SESSÃO". Mais o que é uma sessão? Sessão nada mais é do que um conexão que é realizada com um determinado banco de dados para execução de um comando. Prestem atenção apenas em um detalhe. Essa conexão que refiro, não é aquela realizada ao chamar o SSMS. Vamos a um exemplo.


Na tela acima, apresento apenas que uma conexão foi realizada com o servidor de banco de dados porém nenhuma sessão encontra-se ativa!

Na tela acima já possuímos a nossa sessão ativa! Para abrir uma sessão basta clicar no botão "New Query" ou caso seu SSMS esteja em português, "Nova Consulta".


Nesse exemplo, caso a tabela temporária venha a ser criada na sessão 55, ela ficará válida (disponível) enquanto essa sessão ficar aberta e conectada!


Dando dois saltos lá na frente, as tabelas temporárias possuem características semelhantes as tabelas fixas. Elas podem possuir chave primária (primary key ou PK), podem se relacionar com outras tabelas (chaves estrangeiras ou foreign key ou FK), podem possuir uma coluna com default value, podem ter uma coluna do tipo identity e outros, resumindo, ela é uma tabela normal, apenas temporária!



Para maiores detalhes, acessem abaixo.


Link Tabelas Temporárias:




Comando INSERT


Vamos começar a falar agora pelo comando INSERT.


Traduzindo ao pé da letra, vamos falar de uma instrução que é usada para inserir registros em tabelas. Podemos dizer que é uma comando bem simples. Bora então para o código!


Vamos utilizar nesse tópico a nossa tabela criada lá no post anterior e caso você não tenha criado, a hora é essa!




-- Selecionando o Banco de Dados
USE TESTE
GO

-- Caso tenha criado a tabela execute o script abaixo para eliminar
DROP TABLE dbo.Funcionario;

-- Script de criação da tabela
CREATE TABLE dbo.Funcionario(
	NomFuncionario varchar(100) NOT NULL,
	DataNascimento date NOT NULL,
	DscSexo char(1) NOT NULL,
	NumIdadeFuncionario AS DATEDIFF(YEAR,DataNascimento,GETDATE()),
	DthInclusao DATETIME NOT NULL DEFAULT GETDATE()
);

Apenas para refrescar a mente, vamos criar a tabela "Funcionario" e essa tabela será composta pelas seguintes colunas:


- NomFuncionario

- DscSexo

- DataNascimento

- NumIdadeFuncionario

- DthInclusao


Vamos inserir um registro nessa tabela.


- NomFuncionario - Gabriel Quintella

- DscSexo - M

- DataNascimento - 14/11/1981

- NumIdadeFuncionario - Calculado de forma automática

- DthInclusao - Gerado de forma automática


Com as informações acima, nosso comando INSERT pode ser feito de duas formas:




-- Selecionando o Banco de Dados
USE TESTE
GO

-- 1º Exemplo: Especificando os campos que serão gravados
INSERT INTO dbo.Funcionario (NomFuncionario,DataNascimento,DscSexo)
VALUES ('Gabriel Quintella' , '1981-11-14', 'M');

-- OU 

-- 2º Exemplo: Não Especificando os campos que serão gravados
INSERT INTO dbo.Funcionario 
VALUES ('Wanderley Quintella' , '1940-01-01', 'M');

A forma mais recomendada para escrita desse comando é a primeira onde especificamos o destino dos dados, não que a segunda esteja errada. Mais vamos pensar da seguinte forma.


Hoje a nossa tabela funcionário está construída conforme script abaixo. Dessa forma nosso script de INSERT funcionará da forma correta.



-- Selecionando o Banco de Dados
USE TESTE
GO

-- Script de criação da tabela
CREATE TABLE dbo.Funcionario(
	NomFuncionario varchar(100) NOT NULL,
	DataNascimento date NOT NULL,
	DscSexo char(1) NOT NULL,
	NumIdadeFuncionario AS DATEDIFF(YEAR,DataNascimento, GETDATE())
);

Agora pense q alguém precisou realizar a reconstrução desse objeto e ele ficou dessa forma.



-- Selecionando o Banco de Dados
USE TESTE
GO

-- Caso tenha criado a tabela execute o script abaixo para eliminar
DROP TABLE dbo.Funcionario;

-- Script de criação da tabela
CREATE TABLE dbo.Funcionario(
	NomFuncionario varchar(100) NOT NULL,
	DscSexo char(1) NOT NULL,
	DataNascimento date NOT NULL,
	NumIdadeFuncionario AS DATEDIFF(YEAR,DataNascimento, GETDATE())
);

Repare que a coluna DscSexo mudou de posição com a coluna DataNascimento, será que o nosso script do segundo exemplo vai funcionar?



-- Selecionando o Banco de Dados
USE TESTE
GO

-- 2º Exemplo: Não Especificando os campos que serão gravados
INSERT INTO dbo.Funcionario 
VALUES ('Gabriel Quintella' , '1981-11-14', 'M');

Error:
Mensagem 8152, Nível 16, Estado 30, Linha 13
String or binary data would be truncated.
The statement has been terminated.

Vai não, viu o erro acima?


Então, errado nosso script não está, mais todo cuidado é pouco, pois uma alteração na estrutura, altera todo o contexto no momento da inserção. Já o primeiro script, pode fazer o que quiser na estrutura, ele sempre vai funcionar, justamente pelo fato de que você deixou claro pro interpretador onde cada informação deve ser carregada.


Para fechar, você deve estar pensando, ele não informou nenhum valor para as colunas NumIdadeFuncionario e DthInclusao. Pura verdade! Mais foi até bacana essa dúvida pois existem duas explicações para elas. Vamos começar pela NumIdadeFuncionario.


A coluna NumIdadeFuncionario ela possui o seu valor calculado a partir de uma fórmula, ou seja, ela é a única coluna que possuímos em nossa tabela que não pode ter um valor explicitado no momento da inserção.



-- Selecionando o Banco de Dados
USE TESTE
GO

-- Especificando os campos que serão gravados
INSERT INTO dbo.Funcionario (NomFuncionario,DataNascimento,DscSexo,NumIdadeFuncionario)
VALUES ('Gabriel Quintella' , '1981-11-14', 'M',15);

Error:
Mensagem 271, Nível 16, Estado 1, Linha 13
The column "NumIdadeFuncionario" cannot be modified because it is either a computed column or is the result of a UNION operator.

Já a coluna DthInclusao ela é uma coluna que possui um valor default informado caso não seja declarada no comando INSERT, porém caso queira, você também pode informar um valor para ela.



-- Selecionando o Banco de Dados
USE TESTE
GO

-- Caso tenha criado a tabela execute o script abaixo para eliminar
DROP TABLE dbo.Funcionario;

-- Script de criação da tabela
CREATE TABLE dbo.Funcionario(
	NomFuncionario varchar(100) NOT NULL,
	DscSexo char(1) NOT NULL,
	DataNascimento date NOT NULL,
	NumIdadeFuncionario AS DATEDIFF(YEAR,DataNascimento,GETDATE()),
	DthInclusao DATETIME NOT NULL DEFAULT GETDATE()
);

-- Especificando os campos que serão gravados
INSERT INTO dbo.Funcionario (NomFuncionario,DataNascimento,DscSexo,DthInclusao)
VALUES ('Gabriel Quintella' , '1981-11-14', 'M','2021-04-11');

Sucesso!
(1 linha afetada)
Horário de conclusão: 2021-04-11T22:28:08.8310778-03:00

Atenção para tabelas com coluna Identity!


Vamos recriar a nossa tabela de Funcionários, porém agora colocando uma coluna Identity.



-- Selecionando o Banco de Dados
USE TESTE
GO

-- Caso tenha criado a tabela execute o script abaixo para eliminar
DROP TABLE dbo.Funcionario;

-- Script de criação da tabela
CREATE TABLE dbo.Funcionario(
	IdFuncionario int NOT NULL IDENTITY(1,1),
	NomFuncionario varchar(100) NOT NULL,
	DscSexo char(1) NOT NULL,
	DataNascimento date NOT NULL,
	NumIdadeFuncionario AS DATEDIFF(YEAR,DataNascimento,GETDATE()),
	DthInclusao DATETIME NOT NULL DEFAULT GETDATE()
);

Após a criação vamos executar o script abaixo para analisar o que vai acontecer.



-- Selecionando o Banco de Dados
USE TESTE
GO

-- Inserir registro Tabela Funcionario
INSERT INTO dbo.Funcionario 
VALUES ('Gabriel Quintella' , '1981-11-14', 'M');

Error:
Mensagem 213, Nível 16, Estado 1, Linha 14
Column name or number of supplied values does not match table definition.

Quando realizamos um INSERT em uma tabela com uma coluna do tipo IDENTITY, é obrigatório explicitar o nome das colunas. Porque quando não informamos as colunas, os valores são inseridos conforme sequência de criação.


Para maiores informações referente ao comando INSERT, deixo um link para consulta.


Comando DELETE


Vamos falar agora sobre um comando muito usado para eliminar registros de uma tabela.


O comando DELETE é usando dentro de um banco de dados quando precisamos realizar a exclusão de registros. Para complementar a sua composição, podemos estar incluindo a cláusula WHERE caso queira filtrar algum tipo de registro para ser eliminado.


A sintaxe do comando é bem simples:



-- Sintaxe Comando DELETE:
DELETE FROM <nome_tabela>
-- Opicional
WHERE Coluna = VALOR


Bora voltar no nosso exemplo e eliminar todas os registros que na coluna SEXO tenham o valor "MASCULINO".




-- Selecionando o Banco de Dados
USE TESTE
GO

-- Eliminar a tabela Estudante caso ela exista
DROP TABLE dbo.Estudante;

-- Criação da tabela Estudante
CREATE TABLE dbo.Estudante
(
    id INT PRIMARY KEY,
    nome VARCHAR(50) NOT NULL,
    sexo VARCHAR(50) NOT NULL,
    idade INT NOT NULL,
    pontuacao INT NOT NULL,
);

-- Inserir registros na tabela 
INSERT INTO dbo.Estudante (id, nome, sexo,idade,pontuacao) VALUES (1, 'Joana', 'Feminino', 20, 500);
INSERT INTO dbo.Estudante (id, nome, sexo,idade,pontuacao) VALUES (2, 'João', 'Masculino', 22, 545);
INSERT INTO dbo.Estudante (id, nome, sexo,idade,pontuacao) VALUES (3, 'Sara', 'Feminino', 25, 600);
INSERT INTO dbo.Estudante (id, nome, sexo,idade,pontuacao) VALUES (4, 'Laura', 'Feminino', 18, 400);
INSERT INTO dbo.Estudante (id, nome, sexo,idade,pontuacao) VALUES (5, 'Alan', 'Masculino', 20, 500); 
INSERT INTO dbo.Estudante (id, nome, sexo,idade,pontuacao) VALUES (6, 'Kelly', 'Feminino', 22, 500);
INSERT INTO dbo.Estudante (id, nome, sexo,idade,pontuacao) VALUES (7, 'Ricardo', 'Masculino', 18, 643); 
INSERT INTO dbo.Estudante (id, nome, sexo,idade,pontuacao) VALUES (8, 'Clóvis', 'Masculino', 23, 543);
INSERT INTO dbo.Estudante (id, nome, sexo,idade,pontuacao) VALUES (9, 'Gabriel', 'Masculino', 21, 499); 
INSERT INTO dbo.Estudante (id, nome, sexo,idade,pontuacao) VALUES (10, 'Maria', 'Feminino', 27, 400);

Vamos listar os dados cadastrados.





-- Selecionando o Banco de Dados
USE TESTE
GO

-- Eliminar todos os registros que possuem a palavra MASCULINO na coluna SEXO 
DELETE FROM dbo.Estudante
WHERE sexo = 'Masculino';


O comando DELETE possui uma particularidade quando é aplicado em uma tabela que possui uma coluna do tipo IDENTITY. Sempre que executado, o sequencial (Identity) não é refeito, ficando com um Gap entre os registros. Outro comportamento desse comando é que todos os registros quando eliminados, são registrados dentro do arquivo de log do SGBD para uma possível recuperação. E para finalizar, quando falamos de páginas de dados, quando o DELETE é executado, as páginas de dados ocupadas pelos registros eliminados não são eliminadas e diante disso, o espaço ocupado em disco não é liberado.









Comando Truncate Table


Vamos abrir uma exceção nesse post em post em que falamos de DML e vamos falar da instrução TRUNCATE TABLE, um comando DDL. Seguindo definição da documentação oficial da Microsoft que fala sobre os comandos DDL,

"Instruções DDL (linguagem de definição de dados) definem as estruturas de dados.Use estas instruções para criar, alterar ou remover estruturas de dados em um banco de dados"

O comando TRUNCATE TABLE é muito usado quando queremos realizar a eliminação de uma grande quantidade de registros de uma tabela com o menos esforço possível. Muito cuidado na sua execução, pois ele não possui cláusula WHERE, então mais uma vez MUITO CUIDADO! Uma instrução do tipo PA-PUM!


Todo armazenamento da dados dentro de uma tabela é feito através do preenchimento de páginas de dados, onde essas páginas ocupam espaço em disco. Uma vantagem do comando TRUNCATE TABLE e que quando executado, todas as páginas são eliminadas e o espaço ocupado é liberado.


-- Sintaxe Comando TRUNCATE:
TRUNCATE TABLE <nome_tabela>


Utilizando o nosso script de CREATE TABLE Estudantes, vamos verificar a execução do comando TRUNCATE TABLE.



Após a execução do script acima, vamos executar o comando TRUNCATE TABLE.



-- Selecionando o Banco de Dados
USE TESTE
GO

-- TRUNCATE TABLE Estudantes
TRUNCATE TABLE dbo.Estudante


Diferenças entre DELETE e TRUNCATE TABLE


  • A instrução DELETE é usada para excluir linhas de uma tabela, mas não libera o espaço ocupado por essas linhas;

  • Em comparação, o comando TRUNCATE é usado para excluir as linhas de uma tabela e liberar o espaço ocupado por essas linhas;

  • TRUNCATE redefine os valores de colunas IDENTITY, enquanto a DELETE não;

  • TRUNCATE remove todos os registros e não aciona gatilhos (TRIGGERS);

  • TRUNCATE é mais rápido comparado a DELETE, pois faz menos uso do log de transação, o comando TRUNCATE grava no log de transação apenas a linha TRUNCATE TABLE [SCHEMA].[NOME TABELA] enquanto o DELETE grava cada linha excluída para uma passível recuperação;

  • TRUNCATE não é possível quando uma tabela é referenciada por uma Chave Estrangeira (FK) ou tabelas são usadas na replicação ou com visualizações indexadas (View Materializada);
















Agora, fazendo aquele resumo de todo tópico. Nesse nosso novo encontro, falamos um pouco de tabelas temporárias, iniciamos a mão na massa falando sobre o comando INSERT, passamos pelos comandos DELETE e TRUNCATE e finalizamos fazendo um comparativo entre eles, explicando vantagens e desvantagens.


Agora vamos pensar no nosso próximo assunto! Eu tenho uma dica, podemos falar agora de outros dois comandos para finalizar nosso CRUD.


Vamos iniciar pelo comando UPDATE, ele é bem bacana e rapidinho, em seguida vamos falar sobre o comando SELECT, esse não será comentado em um único post, pois é muito extenso.


Vou deixar uma palinha do que nos espera!



Comando SELECT




- Explicar como funciona a estrutura "SELECT COLUNAS FROM TABELA";

- Falar sobre a cláusula WHERE;

- Entrar no mundo dos operadores:

Operadores de Comparação: - = <> > >= < <=

Operadores aritméticos: + - * /

Operadores Lógicos: in / not in / exists / not exists / and / or / Nor Like / Between

Trabalhando com filtros para valores nulos ou não nulos

Cláusula de Ordenação: Order By - Asc / Desc

Funções de Agregações: Min / Max / Sum

Cláusula de Agrupamento: Group By / Having

Funções de Conversão de Dados: Cást OU Convert

Funções de Conversão de datas

Funções de manipulação de Strings:

LEFT() E RIGHT()

SUBSTRING()

REPLICATE()

CONCAT()

LTIM() / RTRIM() / TRIM

LEN()

CHARINDEX() **

ISNULL()

NULLIF()

Funções de classificação:

ROW_NUMBER

RANK

DENSE_RANK

NTILE

Junções: UNION / UNION ALL

Operadores de Conjuntos: EXCEPT e INTERSECT

Common Table Expression (CTE)

Pivot e Unpivot


É muito assunto meu povo! Vou tentar preparar algo bem legal e que agregue bastante valor!

66 visualizações0 comentário

Posts recentes

Ver tudo

Comments


bottom of page