Você, a empresa e os dados…

Dicas de SQL: STRING_AGG e GROUP_CONCAT

Fala pessoal, tudo bem com vocês?

Espero que sim, então vamos de dicas com SQL.

Se precisar agrupar dados em uma linha e separar os dados por vírgula(,), você pode usar no SQL Server o STRING_AGG().

Veja um exemplo sem STRING_AGG() e outro com STRING_AGG()

Captura de tela de uma consulta SQL exibindo os resultados de um comando SELECT com colunas representando 'NomeAluno' e 'Curso'.
Código SQL demonstrando o uso da função STRING_AGG() para agrupar cursos por aluno em um resultado com separação por vírgula.

Se estiver usando MySQL, e precisar agrupar dados em uma linha e separar eles por vírgula(,), você pode usar o GROUP_CONCAT.

Veja agora um exemplo Sem GROUP_CONCAT e Com GROUP_CONCAT no MySQL.

Código SQL exibindo a seleção de alunos e seus respectivos cursos, sem utilização da função de agrupamento.
Código SQL utilizando a função GROUP_CONCAT para agrupar cursos por aluno, exibindo uma tabela com os resultados.

Ambos resolvem seu problema e facilita sua vida.

O que achou?

Espero ter ajudado com essa simples contribuição.

Grande abraço e até o próximo post pessoal!

Felippe

Procedure com T-SQL

Fala pessoal, tudo bem com vocês?

Espero que sim, vamos de mais uma dica.

Vamos falar de procedure no SQL Server, ou seja procedimentos armazenados.
É bem simples de criar, pode ser usado em todo tipo de projeto.

Criando uma procedure de select com T-SQL;

Veja como um select funciona dentro de uma procedure.

Também podemos criar procedures de insert, delete e update, mas será assunto para outro post.

Bacana né?

Espero ter ajudado com essa simples contribuição.
Desejo a todos uma ótima semana, um grande abraço e até o próximo post pessoal!

Felippe Santos

Procedure with T-SQL

Hi Guys, how are you doing?

I hope you are doing well! Here I come to share one more tip with you.

Let’s talk about the procedure in SQL Server, or stored procedure.
It’s really simple to create and it can be used in all kinds of project.

Creating a stored procedure with T-SQL

See as a select works into the stored procedure.

We can create the stored procedure to insert, delete and update, but it is a subject to another post.

That’s cool, isn’t it?

I hope I helped you with this simple contribution.
I wish you all have a great week, warm hugs and I´ll see you on our next post guys!

Santos, Felippe

Inteligência Artificial

Fala pessoal, tudo bem com vocês?

Espero que sim e vamos de mais uma dica.

Nesse último sábado(13/04/2024) tive a oportunidade de participar de um treinamento gratuito realizado pela KA Solution, sobre Conceitos de Inteligência Artificial no Azure.
Foi muito bom, meu muito obrigado a turma da KA Solution.

Com base nesse treinamento, pude aprender como usar algumas ferramentas disponíveis no Azure AI Services e também ganhei um certificado de participação no treinamento.

Talvez você não saiba, mas esse treinamento está disponível no site da
Microsoft, clique aqui para ir direto.

Bacana né?

Espero ter ajudado com essa simples contribuição.
Desejo a todos uma ótima semana, um grande abraço e até o próximo post pessoal!

Felippe Santos

TOP SQL Server e LIMIT MySQL

Fala pessoal, tudo bem com vocês?

Espero que sim e vamos de mais dicas.

Quero trazer aqui dois comandos muito utilizados para listar amostragem de dados de tabelas, são eles TOP e LIMIT.

No SQL Server é muito comum usar o comando TOP para determinar uma quantidade de registros que será retornado em uma consulta T-SQL.


No MySQL essa clausula não funciona, porém você pode usar LIMIT, esse comando, também lista uma quantidade de registros, mas ele é usado ao final de cada consulta.

Bacana né?

Espero ter ajudado com essa simples contribuição.
Desejo a todos uma ótima semana, um grande abraço e até o próximo post pessoal!

Felippe Santos

SQL Server TOP and MySQL LIMIT

Hi Guys, how are you doing?
I hope you are doing well! And let’s take a look at one more tip.

I want to take about the commands TOP and Limit.

In the SQL Server is very common to use the comand TOP to list a quantity of registers to view a small data sample.

In the MySQL this clause does not work, but you can use Limit, this command also helps to list a quantity registers.

That’s cool, isn’t it?

I hope I helped you with this simple contribution.

I wish you all have a great week, warm hugs and I´ll see you on our next post guys.
Santos, Felippe

Primeiros passos com SQL Server Integration Services (SSIS)

Olá pessoal!

Vamos começar um assunto que até então, não escrevi nada aqui no blog.
Vamos entender algumas funcionalidades do SQL Server Integration Services conhecido como SSIS.

Vou simplificar esse início, com um primeiro exemplo de Olá mundo!
Assim vamos se familiarizar com o conceito da ferramenta.
Para que serve essa ferramenta? Qual sua utilização?

Vamos ao um cenário bem simples, você tem um programa desktop na sua empresa que funciona localmente, mas agora você recebe a missão de migrar os dados que estão armazenados em uma base antiga local para uma base de dados nova,
que foi criado para atender uma aplicação web. Para esse exemplo citado, o SSIS é muito bem utilizado, pois tem a finalidade de carregar esses dados de uma origem até um destino, de forma muito simples.
Nesse primeiro momento, faremos algo simples, apenas um Olá Mundo!
O que é necessário para começar?
Precisamos da ferramenta chamada DataTools mais conhecida como SSDT, estamos falando da versão a partir de 2012, pois antes disso era conhecida como BIDS (Bussiness Inteligence Development Studio).
Para os próximos exemplos, será necessário a instalação de uma instância SQL Server, mas isso para o próximo post.

Vamos praticar, iniciando nosso Projeto:

Clique em file > New > Project…

Figura_00Figura_00

Na tela que surgir, escolha a pasta onde deverá salvar o projeto e dê um nome para ele,
no exemplo abaixo, chamo de OlaMundo_SSIS:

Figura_01Figura_01

Agora você verá do lado direito de sua tela a Solution do projeto, conforme figura abaixo:

Figura_02Figura_02

Aperte F2 de seu teclado para renomear o pacote.

Figura_03Figura_03

Após renomear, navegue até o painel que deve aparecer do lado esquerdo chamado de SSIS Toobox e procure por Script Task, essa task, será utilizado para nosso Olá Mundo.

Figura_04Figura_04

Clique nele e arraste até a parte central do painel Control Flow, deve ficar igual a imagem abaixo:

Figura_05Figura_05

Agora de um duplo clique e a janela abaixo, deverá surgir, logo depois clique em Edit Script…

Figura_06Figura_06

A janela que surgir deverá ser parecida com a figura abaixo… Procure pelo texto
//TODO: Add your code here, e logo após adicione os comandos, MessageBox.Show(“Olá Mundo!”);

Figura_07Figura_07

Clique em salvar e feche essa tela, agora execute o projeto clicando em Start ou apenas F5 de seu teclado, com isso deverá surgir a tela abaixo:

Figura_08Figura_08

Pronto pessoal, fizemos nosso primeiro “Olá Mundo!” utilizando da ferramenta SQL Server Integration Services (SSIS).

Por hoje é isso pessoal, até mais e uma ótima semana a todos.

Abraços,

Felippe Oliveira

Importando cotações de papeis da Bolsa de Valores com MS SQL Server

Olá pessoal!

Vamos entender como importar dados relacionados a cotação de ações negociadas na Bolsa de Valores de São Paulo com MS SQL Server.

Importar ou Import: É a maneira que se tem para levar dados que estão em arquivos salvos em formatos .txt, .xls, .xlsx, como também de outros SGBDs (Sistema Gerenciamento de Bancos de Dados), exemplo, Oracle, Mysql; Assim podem ser transferidos para dentro do seu banco de dados SQL Server.

Para importar, você deve clicar na sua base de dados com o botão direito do mouse, ir em Tarefas ou Tasks se o seu SSMS(SQL Server Management Studio) estiver em inglês, e logo depois clicar em Importar Dados ou Import Data, veja a imagem abaixo:

Import_01

A janela a seguir é um assistente para importação e exportação, é através dela que selecionamos nossa fonte de dados, para nosso exemplo, vamos utilizar um arquivo no formato .xls pronto com os dados da cotação de papeis negociadas na bolsa de valores, veja como é simples a importação.

Import_02

Em fonte de dados escolha Excel, depois clique em Procurar… para adicionar o arquivo escolhido.
Para a versão escolha a qual seu arquivo foi salvo, o exemplo será utilizado o mesmo da imagem.
Caso seu arquivo contenha cabeçalho, deixe o checkbox marcado, após, clique em Avançar…
Na próxima tela, será solicitado o Destino, escolha SQL Server Native Client, coloque também o nome do seu servidor, quanto a Autenticação, coloque seu usuário e senha para prosseguir em caso de usuário do SQL Server, se não, deixe como usuário de Autenticação do Windows, mas lembre-se que o mesmo deve estar com as permissões de acesso para a instância de SQL… Após, escolha o banco para qual quer importar os dados e com isso clique em Avançar, veja a imagem abaixo:

Import_03

Agora deixe marcado apenas como copiar dados e clique em Avançar.

Import_04.PNG

Se seu arquivo for composto por mais de uma planilha, será exibido todas como opções para seleção, no caso, marque apenas o que conter os dados que devem ser importados, é nessa tela que também podemos renomear nossa tabela que será criada pela ferramenta no momento da importação, veja a imagem abaixo:

Import_05

Para ter certeza de que todas as colunas do arquivo estão sendo importadas clique em Visualizar e logo verá seus dados previamente.

Import_06

Após esse passo, o Checkbox Executar imediatamente é selecionado por padrão, caso seja uma importação que se repetira N vezes, você também poderá salvar como pacote SSIS, mas aí já é um outro assunto…

Import_07
Clique em Avançar para ver a tela de resumo.

Import_08
Agora podemos Concluir nossa importação.

Import_09.PNG

Pessoal, esse é um exemplo simples de importação através do MS SQL Server, entenda como ele pode ser útil no dia-a-dia.
Importante deixar claro que para conseguir utilizar essa ferramenta, é necessário algumas permissões como SELECT, CREATE TABLE;

No próximo post faremos a exportação dos dados de uma tabela para outra, entre bancos diferentes.

Por enquanto é isso pessoal, espero ter contribuído de alguma maneira, até mais e bons estudos.

Abraços,

Felippe Oliveira

No Join Predicate – SQL Server

Olá pessoal.

Vamos ao um case real, é bom ter essas histórias do dia-a-dia, pois assim ficamos mais ligeiros para não perder tempo fazendo o que seria mais simples, veja a seguir:

Um belo dia você lá no seu trabalho todo preocupado em manter a perfomance do seu ambiente, aí você olha para o lado e vê um dos desenvolvedores tentando montar uma query, ele olha para você e diz que está fazendo uma consulta simples, porém está demorando muito e para completar ainda pergunta se está tudo bem no banco?

Você todo inocente fala:
“Aqui tudo bem, sem lock, por enquanto…”, e completa, precisa de ajuda?

O desenvolvedor aproveita, diz que deve ser muitos dados… Nessa hora você pensa, deixa eu ver o plano de execução dessa sua consulta, manda a query aí para eu ver o plano dela.

Aí você já parte para o CTRL+M (Teclas de atalho para habilitar o plano de execução no SSMS – SQL Server Management Studio) e após a execução da query, você se depara com a figura abaixo:

OperadorError

Você que está aprendendo tudo sobre performance, se pergunta:
Que erro é esse aí? Como surgiu? E comenta em voz baixa nunca vi isso aí não…
Procura nas apostilas da faculdade e nada, aí você para e pensa, deixa eu ver essa query melhor, quando passa conferindo os joins, percebe que o JOIN está errado, pronto, problema resolvido.

OperadorSemErro

veja como resolver:

O exemplo da query abaixo é o mais simples para facilitar nosso entendimento.

A causa do erro:

QueryErrorOperator

Alterando a junção entre a tabela A e a Tabela B, problema resolvido, assim deixando sua query mais rápida e correta.

Agora já sabemos que um operador com erro, devemos verificar se não está faltando um predicate, pois a falta dele na junção(Join) causa o erro visto no operador.

Espero ter ajudado com mais essa dica.

Até mais.

Felippe Oliveira

Merge com T-SQL

Olá pessoal!

Hoje vamos ver o que se pode fazer com o comando Merge, utilizado no MS SQL SERVER, ele ajuda a mesclar dados entre duas fontes (origem, destino).
É possível atualizar, deletar e inserir dados, abaixo um exemplo prático.

USE TEMPDB
GO

–Criação da tabela temporária para teste;
CREATE TABLE #TMPA (Id INT Identity not null, Nome VARCHAR(100))

–Inserindo os dados de teste na tabela de destino
INSERT #TMPA VALUES (‘Felippe’), (‘Lucas’)

SELECT * FROM #TMPA
merge_1

–Tabela de origem
CREATE TABLE #TMPB (Nome VARCHAR(100))

INSERT #TMPB VALUES (‘Pedro’), (‘Valéria’), (‘Daniela’), (‘Nicolly’)

SELECT * FROM #TMPB
merge_2

–Realizando Merge com INSERT e UPDATE para dados já existentes;

MERGE #TMPA AS ta
USING (SELECT nome FROM #TMPB) AS tb
ON (ta.nome = tb.nome)
WHEN NOT MATCHED THEN
INSERT (nome)
VALUES (tb.Nome)
WHEN MATCHED THEN
UPDATE SET ta.nome = tb.nome;

Após realizar o merge, veja como ficou:

SELECT * FROM #TMPA
merge_3

Bom, isso foi um exemplo básico, apenas para saber como aplicar o Merge no seu desenvolvimento, para saber sobre outros comandos possíveis com merge consulte MERGE (Transact-SQL).

Até mais.

Felippe Oliveira

 

Transações no MS SQL Server

Olá pessoal!

Hoje o assunto é sobre transações no Microsoft SQL Server, onde você saberá para que serve e quando utilizar.

Toda transação de UPDATE, DELETE e até de INSERT você pode garantir que o dado volte ao ponto anterior antes de ser alterado, excluído ou que também não seja inserido, utilizando no inicio de sua query(Script) o comando BEGIN TRANSACTION ou apenas BEGIN TRAN.

Esse comando tem a utilidade de preparar o SQL Server para um ponto de restauração do dado(s), caso seja necessário.

Se for necessário retornar o dado no estado anterior, pode utilizar o comando ROLLBACK TRANSACTION ou apenas ROLLBACK. Mas, caso você precisa garantir que o dado inserido, atualizado ou deletado seja confirmado, basta utilizar o comando COMMIT TRANSACTION ou apenas COMMIT.

Abaixo um exemplo com os três comandos, veja:

BEGIN TRANSACTION

UPDATE Cliente SET DataAtualizacao = getdate() WHERE IdCliente = 1

IF@@ERROR <> 0

ROLLBACK TRANSACTION

ELSE

COMMIT TRANSACTION

Lembre-se, esses três comandos, podem evitar uma baita dor de cabeça em caso de acidente. Veja exemplo abaixo:

Você preparou sua linha de comando que fará uma atualização em 100 mil linhas, mas aí você esquece de colocar o comando WHERE (Essencial colocar), com isso você todo empolgado na pressa para terminar a tarefa e sair sorrindo, executa o comando, e logo percebe que em vez de atualizar a quantidade de 100, atualizou 700 mil linhas, o que fazer nessa hora? Se você tiver um backup da tabela antes de realizar as alterações devidas, muito bem, o trabalho de recuperação será mais rápido, senão, você terá que trabalhar mais para voltar os 700 mil registros ao estado anterior, isso por acidente, pense nisso em um ambiente que não se deve perder tempo com RETRABALHO?

Bom fica a dica sobre transações, vou preparar outro post para falar de SET IMPLICIT_TRANSACTION ON/OFF e SAVE TRANSACTION.

Espero ter ajudado.

Até mais…

Felippe Oliveira

Funções de classificação

Olá pessoal!

Hoje o assunto é sobre funções de classificação, em jornada rumo a prova 70-461, aprendi que podemos classificar grupos de dados.
Essas funções nos auxiliam em criação de ranking, ou seja ordenação dos conjuntos de dados.
São elas:
RANK();
DENSE_RANK();
NTILE();
ROW_NUMBER();

Funções que podem ser utilizadas em diferentes situações, abaixo um exemplo simples de cada, para um melhor entendimento.
Para os exemplos a seguir, foram criados tabelas alunos, disciplina e notas.

RANK(): Classifica o conjunto de dados mantendo um GAP na ordenação.
O exemplo abaixo faz com que a classificação seja agrupado pela quebra e assim mantendo o contador do numero da linha.

SELECT DISTINCT RANK()OVER(ORDER BY d.nome) as Ordem, d.nome as Disciplina
FROM Aluno a
INNER JOIN AlunoDisciplina ad ON a.pkidaluno = ad.fkidaluno
INNER JOIN Disciplina d ON ad.fkIdDisciplina = d.pkIdDisciplina
ORDER BY d.nome

Ordem Disciplina
1 Biologia
11 Geografia
21 História
31 Matetmática
41 Português

DENSE_RANK(): Mantém a classificação em ordem no agrupamento;

SELECT DISTINCT DENSE_RANK()OVER(ORDER BY d.nome) as Ordem, d.nome as Disciplina
FROM Aluno a
INNER JOIN AlunoDisciplina ad  ON a.pkidaluno = ad.fkidaluno
INNER JOIN Disciplina d ON ad.fkIdDisciplina = d.pkIdDisciplina
ORDER BY d.nome

Ordem Disciplina
1 Biologia
2 Geografia
3 História
4 Matetmática
5 Português

NTILE(): Agrupa pela quantidade de grupos que você informar.

SELECT DISTINCT NTILE(2)OVER(ORDER BY d.nome) as Ordem, d.nome as Disciplina
FROM Disciplina d
ORDER BY d.Nome

Ordem Disciplina
1 Biologia
1 Geografia
1 História
2 Matetmática
2 Português

ROW_NUMBER(): Ordena sem ter gap entre os grupos.
SELECT DISTINCT ROW_NUMBER()OVER(ORDER BY d.nome) as Ordem, d.nome as Disciplina
FROM Disciplina d
ORDER BY d.Nome

Ordem Disciplina
1 Biologia
2 Geografia
3 História
4 Matetmática
5 Português

Com as funções de classificação é possível ordenar os grupos e ajustar a sua consulta de acordo com o solicitado.

Ainda é possível utilizar o comando PARTITION BY, mas a explicação de como utiliza-lo ficará para um próximo post.

Espero ter ajudado.

Até mais…

Felippe Oliveira