Aprenda a escrever consultas SQL básicas

How to execute a query in SQL Fiddle


Essencialmente, a linguagem SQL nos permite recuperar e manipular dados nas tabelas de dados. Neste artigo, entenderemos e obteremos a capacidade de escrever consultas SQL fundamentais. Inicialmente, examinaremos as principais noções que precisamos conhecer para escrever consultas no banco de dados.

O que é o T-SQL?

SQL é a abreviação das palavras da Structured Query Language e é usada para consultar os bancos de dados. Transact-SQL
    A linguagem (T-SQL) é uma implementação estendida do SQL para o Microsoft SQL Server. Neste artigo, usaremos os padrões T-SQL nos exemplos.

O que é um banco de dados relacional?

De maneira mais simples, podemos definir o banco de dados relacional como a estrutura lógica na qual são mantidas as tabelas de dados que podem
    se relacionam.

O que é uma tabela de dados?

Uma tabela é um objeto de banco de dados que nos permite manter dados através de colunas e linhas. Podemos dizer que as tabelas de dados são os principais objetos dos bancos de dados porque eles estão mantendo os dados nos bancos de dados relacionais.

Suponha que tenhamos uma tabela que contém os dados detalhados dos alunos da turma de história. É formado no seguinte
    colunas.

Nome: Nome do aluno

Sobrenome: Sobrenome do aluno

Lição: Lição optada

Era: Idade do aluno

PassMark: Marca de passagem

Ilustração de dados de tabela do aluno

Usaremos esta tabela em nossas demonstrações neste artigo. O nome desta tabela de dados é Aluna.

Nossa primeira consulta: instrução SELECT

o SELECT A instrução pode ser descrita como o ponto inicial ou zero das consultas SQL. o
SELECT A instrução é usada para recuperar dados das tabelas de dados. No SELECT
sintaxe da instrução, em primeiro lugar, especificamos os nomes das colunas e os separamos por vírgula se usarmos uma única coluna
    não use vírgula nas instruções SELECT. Na segunda etapa, escrevemos o A PARTIR DE cláusula e como
    por último, especificamos o nome da tabela. Quando consideramos o exemplo abaixo, ele recupera dados de Nome
e Sobrenome colunas, o SELECT A sintaxe da instrução será a seguinte:

Consultas SQL básicas: instrução SELECT

Se quisermos recuperar dados apenas do Nome coluna, o SELECT sintaxe da instrução
    será como abaixo:

Consultas SQL básicas: instrução SELECT para coluna única

Gorjeta: Podemos facilmente experimentar todos esses exemplos neste artigo no SQL Fiddle sobre isso
    ligação. Depois de navegar para o
    No link, precisamos limpar o painel de consulta e executar as consultas de amostra.

Como executar uma consulta no SQL Fiddle

O asterisco (*) define todas as colunas da tabela. Se considerarmos o exemplo abaixo, o
SELECT A instrução retorna todas as colunas do Aluna tabela.

Usando o sinal de asterisco (*) na instrução SELECT

  • Gorjeta:
  • Nosso principal objetivo deve ser obter resultados das consultas SQL o mais rápido possível, com o mínimo de recursos
        consumo e tempo mínimo de execução. Quanto possível, precisamos evitar o uso do sinal de asterisco (*) no
    SELECT afirmações. Esse tipo de uso faz com que consuma mais custos de IO, CPU e rede. Como um resultado,
        se não precisarmos de todas as colunas da tabela em nossas consultas, podemos abandonar o sinal de asterisco e usar apenas o
        colunas necessárias

Filtrando os Dados: Cláusula WHERE

ONDE A cláusula é usada para filtrar os dados de acordo com as condições especificadas. Depois de
ONDE , precisamos definir a condição de filtragem. O exemplo a seguir recupera os alunos
    cuja idade é maior e igual a 20.

Consultas SQL básicas: cláusula WHERE

GOSTAR operator é um operador lógico que fornece para aplicar um padrão de filtragem especial a
ONDE condição nas consultas SQL. Sinal de porcentagem (%) é o principal curinga a ser usado como
    uma conjunção com o GOSTAR operador. Através da consulta a seguir, recuperaremos os alunos
    cujos nomes começam com J personagem.

Uso do operador LIKE em uma cláusula WHERE

DENTRO operador nos permite aplicar vários filtros de valor a ONDE cláusula. o
    a consulta a seguir busca os dados dos alunos que fizeram as lições de história romana e europeia.

Uso do operador IN em uma cláusula WHERE

o ENTRE O operador filtra os dados que se enquadram no valor inicial e final definido. o
    a consulta a seguir retorna dados para os alunos cujas notas são iguais e maiores que 40 e menores e iguais a
    60

ENTRE o uso do operador em uma cláusula WHERE

Classificando os dados: Instrução ORDER BY

ORDENAR POR A instrução nos ajuda a classificar os dados de acordo com a coluna especificada. O conjunto de resultados de
    os dados podem ser classificados em ordem crescente ou decrescente. ASC palavra-chave classifica os dados em ordem crescente
    ordem e o DESC A palavra-chave classifica os dados em ordem decrescente. A consulta a seguir classifica o
    dados dos alunos em ordem decrescente, de acordo com as expressões da coluna PassMark.

Consultas SQL básicas: instrução ORDER BY

Por padrão ORDENAR POR A instrução classifica os dados em ordem crescente. O exemplo a seguir demonstra a
    uso padrão do ORDENAR POR declaração.

Classificando os dados em ordem crescente com a ajuda da palavra-chave ASC.

Eliminando os dados duplicados: cláusula DISTINCT

o DISTINCT é usada para eliminar dados duplicados das colunas especificadas para que o resultado
    O conjunto é preenchido apenas com os valores distintos (diferentes). No exemplo a seguir, recuperaremos
Lição dados da coluna, no entanto, ao fazer isso, recuperaremos apenas valores distintos com a ajuda de
    a DISTINCT cláusula

Consultas SQL básicas: cláusula DISTINCT

Como podemos ver, o DISTINCT A cláusula removeu os vários valores e esses valores foram adicionados ao
    conjunto de resultados apenas uma vez.

Questionário

Nesta seção, podemos testar nossos aprendizados.

Questão 1:

Escreva uma consulta que mostre o nome e o sobrenome do aluno com idades entre 22 e 24.

Responda :

Questão 2:

Escreva uma consulta que mostre os nomes e idades dos alunos na ordem decrescente que faz as lições de história romana e antiga.

Responda :

Conclusão

Neste artigo, aprendemos como podemos escrever as consultas SQL básicas, além de demonstrarmos o uso das consultas com exemplos simples.

Esat Erkec
Últimas mensagens de Esat Erkec (ver todos)

A primeira vez que tive que restaurar um banco de dados


Mophead

Não é exatamente o mesmo período de tempo, mas não tão longe assim.

Lembro-me muito claramente.

Em meados dos anos 90, muito antes de ingressar na carreira de TI, eu trabalhava em um estúdio fotográfico em Muskegon, Michigan. Eles se especializaram em fotos da turma do ensino médio e fizeram muitos deles. Todas as manhãs, os fotógrafos vinham ao escritório para coletar impressões para as fotos que iriam tirar naquele dia – nome do aluno, endereço, hora das fotos, esse tipo de coisa.

Meus deveres no trabalho incluíam:

  • Removendo a fita de backup da noite anterior e trocando-a por uma nova
  • Executando algumas consultas ao banco de dados para preparar as sessões do dia
  • Impressão de compromissos e etiquetas para os fotógrafos

Uma manhã, executei uma consulta sem a cláusula WHERE. Porque é isso que você faz.

Não me lembro como as consultas funcionavam e nem me lembro como era o banco de dados. Só lembro que ele foi executado no SCO Xenix porque lembro dos manuais com muita clareza e lembro que não entrei em pânico. Eu sabia que ninguém mais havia acessado o banco de dados ainda – eu era um dos primeiros de todas as manhãs -, então tudo que eu precisava fazer era restaurar o banco de dados e seguir as etapas novamente.

Mas eu também lembro que o chefe (não gerente – patrão) tinha um épico temperamento. Tipo, xingar-e-jogar-coisas-e-fogo-tipo de temperamento. E, como eu, ele acordou cedo, e eu sabia que era apenas uma questão de tempo até ele aparecer e procurar suas impressões para ver quem ele iria fotografar naquele dia. Eu tinha certeza de que me entregaria a retaguarda e me resignei a esse fato.

Então, coloquei a fita da noite passada, iniciei a restauração e esperei. Com certeza, o chefe entrou e, antes que ele pudesse dizer qualquer coisa, eu disse:

Eu estraguei tudo, minha culpa e me desculpe. Eu estraguei as consultas que eu deveria executar, então estou restaurando o backup da noite passada e depois vou executar as consultas novamente e fazer as impressões. Você pode me demitir, se quiser, e eu entendo totalmente, se você quiser, mas provavelmente deve esperar para me demitir até que as restaurações terminem e eu faça as impressões. Ninguém mais aqui sabe como fazer isso, e os fotógrafos precisam trabalhar hoje.

Funcionou como um encanto. Ele assentiu, e eu percebi que ele estava chateado, mas ele não gritou ou jogou coisas. Ele apenas saiu bruscamente da sala de computadores e fez outras coisas.

Os fotógrafos e outras pessoas começaram a aparecer, procurando suas impressões. Expliquei que ainda não estavam prontos e expliquei o porquê. Todos eles tinham olhos grandes e perguntaram se o chefe sabia disso, e todos tinham certeza de que eu seria demitido.

Não fui demitido e todos ficaram surpresos. O chefe me usou como exemplo, dizendo: “Não, é isso que você deve fazer – confie quando fizer algo estúpido, conserte você mesmo e esteja pronto para lidar com as consequências”.

Parte de mim ficou um pouco decepcionada por não ter sido demitida. Eu não era um grande fã desse trabalho. Só fui demitido uma vez – de um Hardee -, mas isso é uma história para outra postagem no blog.

E se você? Você se lembra da primeira vez em que teve que fazer uma restauração no banco de dados para corrigir algo que atrapalhou?

Solucionar problemas de fuso horário, GMT e UTC usando o banco de dados T-SQL Toolbox

Testing the CONVERT_GETDATE_VALUE_FROM_ONE_TIMEZONE_TO_UTC user-defined function.


Introdução

Em breve, os aplicativos e o software de banco de dados que criamos lidarão com valores de data e hora. O banco de dados T-SQL Toolbox – um download gratuito – pode ajudar a resolver cálculos complexos com esses valores.

Eu moro nos EUA, assim como muitos de meus clientes. Devemos lidar com o horário de verão, o que significa que, em datas específicas, o horário local em um fuso horário específico pode avançar uma hora e, em outras datas, o horário local pode voltar uma hora. Essas mudanças acontecem em um agendamento definido. Uma mudança para frente sempre segue uma mudança para trás e uma mudança para trás sempre segue uma mudança para frente. Eles nunca se acumulam. Lidar com tudo isso na camada de banco de dados pode se tornar realmente complexo, e o T-SQL Toolbox pode economizar muito esforço com isso. Em uma conferência, ouvi um palestrante explicar que deveríamos usar o horário médio de Greenwich, ou GMT, para valores de data e hora do banco de dados para evitar esse problema. A GMT nunca muda para o horário de verão e podemos calcular facilmente os valores da hora local com base nos dados da GMT. Embora o SQL Server ofereça várias funções internas de data e hora, essas funções não tratam diretamente as conversões entre os valores do fuso horário local e o GMT, e certamente não tratam as conversões de horário de verão. Felizmente, encontrei o T-SQL Toolbox como uma maneira de evitar a criação das funções necessárias para tudo isso. Disponível aqui no CodePlex Archive e aqui no GitLab, o T-SQL Toolbox fornece UDFs (funções definidas pelo usuário) do SQL Server que convertem valores de data / hora entre fusos horários, incluindo GMT. O T-SQL Toolbox também fornece UDFs que calculam o início ou o fim

  • dia

  • semana

  • mês

  • trimestre

  • ano

Valores DateTime para um determinado valor de data / hora.

Baixar e instalar

Após o download:

Arquivo tsqltoolbox.zip baixado em um diretório host. Este arquivo possui um script para criar o banco de dados T-SQL Toolbox.

e extração de arquivos, como mostrado abaixo:

Subdiretórios TSqlToolbox.zip extraídos.

Como visto na captura de tela a seguir, faça uma busca detalhada no diretório sourceCode:

Faça uma busca detalhada no diretório sourceCode, para encontrar o arquivo sourceCode.zip.

Em seguida, faça uma busca detalhada no arquivo sourceCode.zip. Copie o arquivo TSqlToolbox.sql

Copie o arquivo TSqlToolbox.sql do arquivo ZIP do host.

Coloque o arquivo TSqlToolbox.sql em um diretório. Este script SQL criará o banco de dados T-SQL Toolbox.

Executaremos o arquivo TSqlToolbox.sql para instalar o banco de dados T-SQL Toolbox no SQL Server. Instalei-o em um ambiente do SQL Server 2014 Standard Edition em um PC com Windows 10.

O arquivo TSqlToolbox.sql possui um script CREATE DATABASE e conjuntos de scripts CREATE TABLE e CREATE FUNCTION. Abra o TSqlToolbox.sql em uma janela de consulta do SQL Server

As primeiras linhas do arquivo TSqlToolbox.sql. Este script criará o banco de dados T-SQL Toolbox.

Isso criará o banco de dados completo do TSqlToolbox, suas tabelas, linhas de dados da tabela, funções e restrições de chave primária / externa. Na captura de tela acima, o servidor de banco de dados FRANK-PC hospeda o TSqlToolbox. Todo banco de dados hospedado pelo servidor de banco de dados FRANK-PC pode usar as funções TSqlToolbox.

O Pesquisador de Objetos mostra as tabelas e funções do banco de dados T-SQL Toolbox.

Sob o capô

O banco de dados T-SQL Toolbox usa dados nas tabelas a seguir para seus cálculos.

  1. DateTimeUtil.Timezone

  2. DateTimeUtil.TimezoneAdjustmentRule

o Fuso horário A tabela possui uma linha para cada fuso horário definido no banco de dados.

A rede TimeZoneInfo A classe pode servir como fonte de dados principal para esta tabela porque, como visto aqui na documentação da Microsoft, esta classe tem as seguintes propriedades:

  • Eu iria

  • StandardName

  • Nome em Exibição

  • DaylightName

  • SupportsDaylightSavingTime

  • BaseUtcOffset

A caixa de ferramentas T-SQL TimezoneAdjustmentRule A tabela possui linhas que mostram alterações históricas de metadados para cada alteração de fuso horário, os atuais metadados definidos para cada fuso horário e planejadas alterações futuras para fusos horários específicos.

A rede TimeZoneInfo.AdjustmentRule A classe pode servir como fonte de dados primária para esta tabela porque, como visto aqui na documentação da Microsoft, suas propriedades e métodos refletem muitas das colunas desta tabela. Podemos ver isso claramente quando pesquisamos as propriedades DateEnd e DaylightTransitionStart dessa classe, por exemplo.

Usando o T-SQL Toolbox

Usaremos um banco de dados personalizado para trabalhar com o TSqlToolbox. Execute este script em uma janela de consulta do SQL Server:

Se necessário, ele primeiro cria um subdiretório, TSQL_TOOLBOX_DEMO na raiz e, em seguida, cria um novo banco de dados chamado TSQL_TOOLBOX_DEMO. Ele coloca os arquivos LDF e MDF do componente do banco de dados T-SQL Toolbox no diretório TSQL_TOOLBOX_DEMO. Por fim, cria o CONVERT_GETDATE_VALUE_FROM_ONE_TIMEZONE_TO_UTC procedimento armazenado, como mostrado.

Na instrução SELECT do procedimento armazenado, a terceira expressão nas linhas 25 e 26 chama o TSqlToolbox DateTimeUtil.UDF_ConvertLocalToUtcByTimezoneId função. Como muitas outras funções do TSqlToolbox, essa função é responsável pelo horário de verão por meio de chamadas para o TSqlToolbox.DateTimeUtil.TimezoneAdjustmentRule mesa.

A chamada nas linhas 25 e 26 coloca o nome do banco de dados TSqlToolbox na frente do nome completo da função. Em seguida, adiciona os parâmetros @timezoneID e GETDATE (). Observe que as funções possuem nomes de duas partes. “DateTimeUtil” serve como o prefixo de todos os nomes de funções do TSqlToolbox e um ponto separa o segundo nome de função de identificação. Se um nome de função TSqlToolbox não incluísse o prefixo “DateTimeUtil”, precisaríamos substituir o nome do esquema padrão do banco de dados TSqlToolbox. Geralmente usamos o dbo para isso; “Dbo” significa “proprietário do banco de dados”. No entanto, ambientes de banco de dados diferentes podem lidar com essa nomeação de maneira diferente; portanto, verifique com um administrador de banco de dados detalhes detalhados.

Uma função definida pelo usuário que mostra como chamar as funções de banco de dados do T-SQL Toolbox.

Na linha 5, o procedimento armazenado de demonstração possui código de teste para o próprio procedimento armazenado. O código de teste retorna esta linha:

Testando a função definida pelo usuário CONVERT_GETDATE_VALUE_FROM_ONE_TIMEZONE_TO_UTC.

Na linha 17, ele mapeia o parâmetro @timezoneID para o nome do fuso horário. A instrução Line 23 SELECT cria o conjunto de resultados do procedimento armazenado concluído. Isso mostra que, com uma chamada para uma função TSqlToolbox, podemos mapear facilmente um valor local de data e hora para um valor GMT. Nesse caso, tentamos uma chamada para GETDATE (). O TSqlToolbox é responsável por quaisquer efeitos locais do horário de verão.

Quando olhamos para as funções do banco de dados T-SQL Toolbox, podemos ver que ambos aproveitam as funções nativas do SQL Server e outras funções do TSqlToolbox. Por exemplo, a função UDF_GetStartOfDay primeiro converte o parâmetro @ReferenceDate – originalmente um tipo de dados DATETIME2 – em um tipo de dados DATE. Isso retira os dados de tempo do valor @ReferenceDate. Em seguida, ele converte esse valor intermediário novamente em um tipo de dados DATETIME2. Essa conversão restaurou os dados de horário, mas zerou o horário para o início do dia (SOD).

o [DateTimeUtil].[UDF_GetStartOfDay] Função TSqlToolbox.

A próxima captura de tela mostra as conversões equivalentes.

Cálculos para a caixa de ferramentas T-SQL [DateTimeUtil].[UDF_GetStartOfDay] função.

Como visto abaixo, a função TSqlToolbox UDF_ConvertLocalToLocalByTimezoneIdentifier chama a TSqlToolbox: UDF_ConvertUtcToLocalByTimezoneIdentifier e UDF_ConvertLocalToUtcByTimezoneIdentifier funcionam para converter um fuso horário DATETIME2 em outro parâmetro do fuso horário. Os dois primeiros parâmetros têm valores da coluna [TSqlToolbox].[DateTimeUtil].[Timezone].Identificador.

o [DateTimeUtil].[UDF_ConvertLocalToLocalByTimezoneIdentifier] Função TSqlToolbox.

Estender TSqlToolbox

Como explicado anteriormente, o banco de dados T-SQL Toolbox oferece funções para calcular o início ou o fim do dia, semana, etc. Valores de DateTime para um determinado valor DATETIME2. Podemos facilmente estender essas funções. Por exemplo, criei e adicionei a função UDF_GetEndOfDecade, vista aqui, ao meu banco de dados TSqlToolbox local. Ele calcula o valor DATETIME2 do final da década para um determinado parâmetro DATETIME2.

Esta função calcula primeiro o valor de final de ano (EOY) para o parâmetro de entrada. Em seguida, ele analisa esse valor EOY em valores separados de mês, dia e ano. O cálculo da variável @YearOffset usa a função% (mod) para calcular o número de anos restantes na década do valor do parâmetro ano. Por fim, a instrução primeiro reúne um valor de data final de todos os valores do componente e, em seguida, usa a função UDF_GetEndOfDay para converter esse valor em um valor de retorno DATETIME2.

Atualizar dados internos da caixa de ferramentas T-SQL

As funções do banco de dados TSqlToolbox dependem dos dados em suas tabelas Timezone e TimezoneAdjustmentRule para seus cálculos. Obviamente, esses dados não são alterados nas próprias tabelas. Matt Johnson-Pint, da Microsoft, foca na engenharia de fuso horário do Windows. Em seu blog, ele discutiu como os fusos horários mudam constantemente. Nesse segmento de estouro de pilha, ele explicou que o Windows armazena informações de fuso horário no registro. Ele forneceu mais detalhes sobre como isso funciona neste encadeamento de estouro de pilha. Embora o banco de dados T-SQL Toolbox tenha um valor enorme, precisamos lembrar que seus dados principais podem se tornar obsoletos sem atualizações. O processo de atualização do Microsoft Windows atualiza as informações de fuso horário do registro; portanto, o registro de um dispositivo totalmente atualizado deve ter as informações mais recentes sobre o fuso horário. Criei esse aplicativo de desktop do Windows C-Sharp para consultar o registro e retornar os dados das classes .Net TimeZoneInfo e TimeZoneInfo.AdjustmentRule. Essas classes consultam os valores do fuso horário do registro, que podemos usar para atualizar o T-SQL Toolbox. O aplicativo usa um símbolo de tubo “|” delimitar os valores da coluna nas linhas. Também construí esta versão do VB.net, que funciona da mesma maneira. Hospedei as versões C-Sharp e VB.net na minha página do GitHub. Ambos incluem soluções completas do Visual Studio 2015 e arquivos executáveis ​​concluídos.

Aplicativos do Visual Studio .Net que consultam o registro do Windows para mostrar informações de fuso horário.

Para criar tabelas do SQL Server com os dados de saída do aplicativo, primeiro atualize o Windows na máquina de desenvolvimento. Isso aplicará todas as atualizações de fuso horário ao registro. Em seguida, execute o aplicativo e copie as linhas das caixas de texto do formulário. Use Ctrl-C para copiar porque o formulário usa caixas de rich text. Coloque as linhas em novos arquivos de texto. Trunque as tabelas do banco de dados TSqlToolbox que você atualizará para que eles tenham dados completamente atualizados. Use o Assistente para Importação e Exportação do SQL Server para importar os valores para as tabelas do banco de dados T-SQL Toolbox. Se esse assistente falhar devido a problemas com os dados, reformate os dados para uma instrução INSERT do SQL Server e continue com as instruções INSERT em uma janela de consulta. Para criar os relacionamentos de tabela pai / filho, adicione colunas de ID de valor inteiro às tabelas como chaves primárias e estrangeiras.

Conclusão

Como vimos, o T-SQL Toolbox resolve problemas complicados e retorna um valor enorme. Ainda melhor, podemos estendê-lo facilmente e atualizar seus dados para cobrir uma gama crescente de regras e requisitos de negócios.

Frank Solomon
Últimas mensagens de Frank Solomon (ver todos)

Técnicas de Poker para Iniciantes – SQLServerCentral

Técnicas de Poker para Iniciantes - SQLServerCentral


Obter um bônus em quando você faz é realmente uma coisa muito simples de fazer. Há uma infinidade de sites de jogos de azar disponíveis, que outros sites são projetados especificamente para monitorar e analisar, como bônus de pôquer on-line. A maioria dos bônus é baseada no valor do depósito inicial pago. Ou seja, se você vai abrir a conta dele pela primeira vez e decidir ser atribuído a mil dólares por vez, em vez de ser apreciado em mil dólares. Observe o trabalho em todos os sites deste tipo.

Técnicas de Poker para Iniciantes - SQLServerCentral 15) Defina metas muito razoáveis ​​e atingíveis. Produzir, ganhar dinheiro ou atingir grandes quantidades diariamente. O poker pode consumir bastante tempo, portanto, aposte apenas o que você pode se dar ao luxo de derramar e estabelecer limites de tempo para suas sessões. Use o jogo como hobby e entenda, é mais provável que você ganhe usando essa mentalidade. Quando você estiver em uma onda de frio, mantenha o tempo da sessão ou a banca que você alocou para esse dia. Não exagere em nenhum tipo de horário ou sessão. Seu jogo será afetado. O poker online é sobre jogar quando você estiver em qualquer situação. Isso é aplicável tanto ao financeiro quanto ao tempo. É muito longe à noite e você tem compromissos ou trabalho precoces, depois desconecte-se e brinque em outra hora.

3) Tente Grande Configure uma conta Bônus – Você deve procurar pelo seu grande sinal de bônus. Esses bônus podem variar de absolutamente nenhum a até US $ 3.000, o que depende da quantia que você está inicialmente vulnerável a depositar na conta. Produtos um benefício muito grande que é algo que você realmente deve considerar. Não é essencial para você depositar um monte de dinheiro quando uma pessoa pode estar jogando judi online poker. Você pode se destacar até mesmo com uma pequena quantia de dinheiro.

Agora, o herpes genital precisa se preocupar é: conluio. Especialmente em mesas a dinheiro de US $ 1,00 a US $ 3,00 ou mais. Imagine que você se senta para um jogo genial para ser pego em um treino. Como isso é possível? Você jogou bem, aumentou quando deveria ter aumentado, desistiu quando deveria ter desistido, talvez até jogou dentro de um re-raise fora de posição apenas para ser pego por todos. Todos os truques que você conhecia foram anulados e perdidos.

O bom sucesso do poker holdem concedeu a milhões de mulheres de todo o mundo a possibilidade de jogar com uma renda real o jogo que eles estimavam. De buy-ins de US $ 10 a potes de dinheiro, um local de contato que no mundo fantástico do texas online hold’em. A grande maioria dos jogadores de poker é inexperiente e não qualificada, sendo conhecida como “peixes”. Mas são considerados os habilidosos que ganham uma renda jogando situs judi. Estes são os temidos tubarões de poker.

Jogue fortemente. O poker precisa de um indivíduo corajoso. Assim, fornece-se o make specific para jogar tudo do jeito e agressivamente, apenas para ganhar um título Sit and Go específico. Além disso, jogar de forma agressiva pode irritar os adversários, que podem resultar no momento de vitória após o jogo 338a sbobet casino (Widzew.com) sbobet epiphone casino (Widzew.com).

De fato, jogar um torneio Sit and Go parece tão fácil, mas na verdade é difícil. Assim, é preciso se especializar para se armar algumas técnicas eficazes, como as dicas gratuitas on-line da estratégia Sit and Go, mencionadas anteriormente. Dessa forma, os ganhos são realmente possíveis de qualquer tipo de aborrecimentos da parte de alguém. Afinal, as dicas gratuitas on-line da estratégia Sit and Go são realmente muito desenfreadas na web. Só é preciso escolher transmitir. seu conhecimento e essencialmente os grupos mais eficazes de estratégias e métodos.

Fundamentos gratuitos da semana de ajuste de consulta: Parte 5, Anti-padrões comuns do T-SQL


/ *

Fundamentos do ajuste de consulta: anti-padrões comuns do T-SQL

v1.0 – 2019-06-30

https://www.BrentOzar.com/go/queryfund

Esta demonstração requer:

* Qualquer versão suportada do SQL Server

* Qualquer banco de dados Stack Overflow: https://www.BrentOzar.com/go/querystack

Este primeiro RAISERROR é apenas para garantir que você não acerte F5 acidentalmente.

execute o script inteiro. Você não precisa executar isso:

* /

RAISERROR(N‘Opa! Não, nãobasta pressionar F5. Execute essas demos uma de cada vez., 20, 1) COM REGISTRO;

IR

/ * Estou usando o banco de dados Stack médio de 50 GB: * /

USAR StackOverflow2013;

IR

/ * E este procedimento armazenado descarta todos os índices não clusterizados: * /

DropIndexes;

IR

CONJUNTO ESTATISTICAS IO, TEMPO EM;

IR

/ * Crie alguns índices para apoiar nossas consultas: * /

CRIO ÍNDICE IX_Localização EM dbo.Comercial(Localização);

CRIO ÍNDICE IX_UserId EM dbo.Comentários(ID do usuário);

CRIO ÍNDICE IX_CreationDate EM dbo.Comentários(Data de criação);

IR

/ * Variáveis ​​de tabela * /

DECLARAR @Comercial MESA (Eu iria INT);

INSERIR PARA DENTRO @Comercial (Eu iria)

SELECT Eu iria

A PARTIR DE dbo.Comercial;

SELECT CONTAGEM(*) A PARTIR DE @Comercial;

IR

/ * Funções com valor de tabela com várias instruções * /

CRIO OU ALTERAR FUNÇÃO dbo.fn_GetUsers ( @Localização NVARCHAR(200) )

DEVOLUÇÃO @Fora MESA ( ID do usuário INT )

COM ESQUEMA

COMO

INÍCIO

INSERIR PARA DENTRO @Fora(ID do usuário)

SELECT Eu iria

A PARTIR DE dbo.Comercial

ONDE Localização = @Localização;

RETORNA;

FIM;

IR

SELECT * A PARTIR DE dbo.fn_GetUsers( ‘Índia’ );

IR

SELECT c.*

A PARTIR DE dbo.fn_GetUsers ( ‘Índia’ ) você

INTERIOR JUNTE-SE dbo.Comentários c EM você.ID do usuário = c.ID do usuário

ORDEM POR c.Data de criação;

IR

/ * Funções na cláusula WHERE – às vezes: * /

SELECT *

A PARTIR DE dbo.Comercial

ONDE Localização = ‘Helsinki, Finlândia’;

IR

SELECT *

A PARTIR DE dbo.Comercial

ONDE LTRIM(RTRIM(Localização)) = ‘Helsinki, Finlândia’;

IR

SELECT *

A PARTIR DE dbo.Comercial

ONDE SUPERIOR(Localização) = ‘Helsinki, Finlândia’;

IR

SELECT *

A PARTIR DE dbo.Comercial

ONDE UpVotes + DownVotes > 1000000;

IR

/ * Podemos corrigir isso com índices? * /

/ * Às vezes, as funções da cláusula WHERE são válidas: * /

SELECT *

A PARTIR DE dbo.Comentários

ONDE FUNDIDA(Data de criação COMO ENCONTRO) = ‘2009-11-10’;

IR

SELECT *

A PARTIR DE dbo.Comercial

ONDE Localização = LTRIM(RTRIM(‘Helsinki, Finlândia’));

IR

/ *

Conversões implícitas: quando o SQL Server precisa comparar duas coisas, mas o

tipos de dados não são os mesmos. Às vezes, o SQL Server pode convertê-los automaticamente:

* /

DECLARAR @Localização XML = ‘Helsinki, Finlândia’;

SELECT *

A PARTIR DE dbo.Comercial

ONDE Localização = @Localização;

IR

/ * Ou tente o seguinte: * /

DECLARAR @Localização VARCHAR(100) = ‘Helsinki, Finlândia’;

SELECT *

A PARTIR DE dbo.Comercial

ONDE Localização = @Localização;

IR

/ * Nota – nenhum aviso no plano.

Ou isso – observe que estou passando uma string, não uma data:

* /

DECLARAR @NotADate NVARCHAR(100) = ‘2009-11-10’;

SELECT *

A PARTIR DE dbo.Comentários

ONDE Data de criação = @NotADate;

IR

/ *

Mas se você passar um tipo de dados de alta fidelidade do que o armazenado na tabela:

* /

DECLARAR @NotADate SQL_VARIANT = ‘2009-11-10’;

SELECT *

A PARTIR DE dbo.Comentários

ONDE Data de criação = @NotADate;

IR

/ *

Coisas para pensar:

* O SQL Server converte o conteúdo da tabela para corresponder ao tipo de dados recebidos

* O uso da CPU aumenta linearmente com o número de linhas / colunas a serem convertidas

* Temos uma varredura, não uma busca

* As estimativas também costumam ser muito diferentes

Concedido, você provavelmente nunca verá pessoas usando SQL_VARIANT (e agora você sabe o porquê.)

Mas aposto que você vê tabelas com VARCHAR nelas, então vamos configurar uma:

* /

CRIO MESA dbo.Users_Varchar (Eu iria INT PRIMARY CHAVE CLUSTERED, Nome em Exibição VARCHAR(40.));

INSERIR PARA DENTRO dbo.Users_Varchar (Eu iria, Nome em Exibição)

SELECT Eu iria, Nome em Exibição

A PARTIR DE dbo.Comercial;

IR

CRIO ÍNDICE IX_DisplayName EM dbo.Users_Varchar(Nome em Exibição);

IR

/ * Nossa consulta usará o índice se passarmos uma variável NVARCHAR? * /

DECLARAR @DisplayNameNvarchar NVARCHAR(40.) = «Brent Ozar»;

SELECT *

A PARTIR DE dbo.Users_Varchar

ONDE Nome em Exibição = @DisplayNameNvarchar;

IR

/ * Isso pode afetar bastante as junções, portanto, verifique os campos nos quais você participa: * /

COM ProblematicColumns COMO (

SELECT NOME DA COLUNA

A PARTIR DE INFORMATION_SCHEMA.COLUNAS c1

GRUPO POR NOME DA COLUNA

TENDO CONTAGEM(DISTINCT TIPO DE DADOS) > 1

)

SELECT c.*

A PARTIR DE ProblematicColumns pc

INTERIOR JUNTE-SE INFORMATION_SCHEMA.COLUNAS c EM pc.NOME DA COLUNA = c.NOME DA COLUNA

ORDEM POR c.NOME DA COLUNA, c.TIPO DE DADOS;

IR

/ * Comparando o conteúdo de duas colunas na mesma tabela: * /

SELECT você.Nome em Exibição, você.Eu iria, CONTAGEM(*) COMO NumberOfComments

A PARTIR DE dbo.Comercial você

INTERIOR JUNTE-SE dbo.Comentários c EM você.Eu iria = c.ID do usuário

ONDE você.DownVotes + você.UpVotes > 1000000

GRUPO POR você.Nome em Exibição, você.Eu iria;

IR

/ *

Coisas para pensar:

* Como são as estimativas versus as reais?

* Qual é o efeito?

* Você pode corrigir a estimativa inserindo índices?

* Você pode imaginar um cenário em que essa consulta seja executada muito, muito lentamente?

* Como você pode refazer esta consulta, para corrigir a estimativa, E / OU reduzir

o raio de explosão dessa estimativa ruim?

* /

/ *

Licença: Creative Commons Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)

Mais informações: https://creativecommons.org/licenses/by-sa/3.0/

Você é livre para:

* Compartilhar – copie e redistribua o material em qualquer meio ou formato

* Adapte – remixe, transforme e desenvolva o material para qualquer finalidade, inclusive

comercialmente

Sob os seguintes termos:

* Atribuição – você deve dar o crédito apropriado, fornecer um link para a licença,

e indicar se foram feitas alterações.

* ShareAlike – Se você remixar, transformar ou desenvolver o material, deverá

distribua suas contribuições sob a mesma licença que o original.

* /

Aprenda SQL: disparadores de SQL

SQL Triggers - the data model we'll use in the article


Os gatilhos SQL são outro objeto de banco de dados poderoso que temos à nossa disposição. Nos artigos anteriores, abordamos funções definidas pelo usuário, procedimentos definidos pelo usuário e exibições SQL. Hoje falaremos sobre gatilhos SQL e como
    usá-los para alcançar o comportamento desejado.

O Modelo

Antes de passarmos para o tópico deste artigo, vamos dar uma olhada rápida no modelo que estamos usando neste artigo, mas também ao longo desta série.

Disparadores SQL - o modelo de dados que usaremos no artigo

Neste artigo, focaremos nos acionadores DML (linguagem de manipulação de dados) e mostraremos como eles funcionam quando fazemos
    alterações em uma única tabela.

O que são gatilhos SQL?

No SQL Server, gatilhos são objetos de banco de dados, na verdade, um tipo especial de procedimento armazenado, que “reage” a determinadas ações que fazemos no banco de dados. A principal idéia por trás dos gatilhos é que eles sempre executam uma ação no caso de algum evento acontecer. Se estivermos falando sobre gatilhos DML, essas alterações serão alterações em nossos dados. Vamos examinar algumas situações interessantes:

  • Caso você faça uma inserção no ligar tabela, você deseja atualizar o cliente relacionado que possui 1
            mais chamada (nesse caso, deveríamos ter atributo inteiro no cliente mesa)

  • Quando você completa uma ligar (atualizar o valor do atributo call.end_time) você deseja aumentar o
            contador de chamadas realizadas por esse funcionário durante esse dia (novamente, devemos ter esse atributo no
    empregado mesa)

  • Quando você tenta excluir um empregado, você deseja verificar se há chamadas relacionadas. Se sim, você
            impedir que excluir e gerar uma exceção personalizada

A partir de exemplos, você pode observar que os gatilhos DML são ações relacionadas aos comandos SQL definidos nesses gatilhos.
    Como eles são semelhantes aos procedimentos armazenados, você pode testar valores usando a instrução SE, etc. Isso fornece muita flexibilidade.

O bom motivo para usar os acionadores DML SQL é o caso em que você deseja garantir que um determinado controle seja executado antes ou depois da instrução definida na tabela definida. Esse pode ser o caso quando seu código estiver em todo o lugar, por exemplo, O banco de dados é usado por diferentes aplicativos, o código é escrito diretamente nos aplicativos e você não o está bem documentado.

Tipos de gatilhos SQL

No SQL Server, temos 3 grupos de gatilhos:

  • Acionadores de DML (linguagem de manipulação de dados) – já os mencionamos e eles reagem aos comandos do DML. Estes
            are – INSERT, UPDATE e DELETE

  • Gatilhos DDL (linguagem de definição de dados) – Como esperado, gatilhos desse tipo devem reagir a comandos DDL como –
            CREATE, ALTER e DROP

  • Gatilhos de logon – o nome já diz tudo. Esse tipo reage aos eventos LOGON

Neste artigo, focaremos nos gatilhos DML, porque eles são mais comumente usados. Nós vamos cobrir os dois restantes
    tipos de gatilhos nos próximos artigos desta série.

Gatilhos DML – Sintaxe

A sintaxe SQL simplificada para definir o acionador é a seguinte.

A maior parte da sintaxe deve ser auto-explicativa. A idéia principal é definir:

  • Um conjunto de {sql_statements} que deve ser realizada quando o gatilho é disparado (definido pelos parâmetros restantes)

  • Nós devemos definir quando o gatilho é disparado. É isso que a parte {FOR | DEPOIS | AO INVÉS DE} faz. Se nosso gatilho
            é definido como FOR | DEPOIS | AO INVÉS DE As instruções SQL do gatilho do SQL devem ser executadas após todas as ações
            que disparou esse gatilho é iniciado com sucesso. o AO INVÉS DE gatilho deve executar controles e substituir o
            ação original com a ação no gatilho, enquanto o FOR | DEPOIS DE (eles significam o mesmo) gatilho deve ser executado
            comandos adicionais após a conclusão da instrução original

  • A parte {[INSERT] [,] [UPDATE] [,] [DELETE]} indica qual comando realmente dispara esse gatilho. Nós devemos especificar
            pelo menos uma opção, mas poderíamos usar várias se necessário

Com isso em mente, podemos escrever facilmente gatilhos que irão:

  • Verifique (antes da inserção) se todos os parâmetros da instrução INSERT estão OK, adicione alguns, se necessário, e execute o
            inserir

  • Após a inserção, execute tarefas adicionais, como atualizar um valor em outra tabela

  • Antes de excluir, verifique se há registros relacionados

  • Atualize certos valores (por exemplo, arquivo de log) após a exclusão ser concluída

Se você quiser soltar um gatilho, use:

Gatilho SQL INSERT – Exemplo

Primeiro, criaremos um gatilho SQL simples que deve executar a verificação antes da instrução INSERT.

Podemos ver nosso gatilho no Pesquisador de Objetos, quando expandimos os dados para a tabela relacionada
    (país)

exploração e gatilhos de objetos

Quero enfatizar algumas coisas aqui:

  • A instrução INSERT aciona essa consulta e é realmente substituída (INSTEAD OF INSERT) pela instrução neste
            desencadear

  • Definimos várias variáveis ​​locais para armazenar valores do registro de inserção original (INSERTED). este
            registro é específico para gatilhos e permite acessar esse registro único e seus valores

  • Nota: O registro INSERTED pode ser usado nos disparos SQL de inserção e atualização.
  • Com as instruções IF, testamos valores e valores SET se eles não foram definidos antes

  • No final da consulta, executamos a instrução INSERT (a que substitui a original que disparou esse
            desencadear)

Vamos agora executar um comando INSERT INTO e ver o que acontece no banco de dados. Executaremos as seguintes instruções:

O resultado está na imagem abaixo.

o resultado da instrução insert

Você pode perceber facilmente que a linha com id = 10 foi inserida. Não especificamos o country_name, mas o gatilho fez o seu trabalho e preencheu esse valor com country_name_eng.

  • Nota: Se o gatilho for definido em uma determinada tabela, para uma determinada ação, ele sempre será executado quando essa ação for executada.

Gatilho SQL DELETE – Exemplo

Agora, vamos criar um gatilho que dispara sobre a instrução DELETE no país mesa.

Para esse gatilho, vale ressaltar o seguinte:

  • Mais uma vez, executamos a ação antes (em vez de) da execução real (INSTEAD OF DELETE)

  • Usamos o registro DELETED. Este registro pode ser usado nos gatilhos relacionados à instrução DELETE

  • Nota: O registro DELETED pode ser usado para excluir e atualizar gatilhos SQL.
  • Usamos a instrução SE para determinar se a linha deve ou não ser excluída. Se deveria, nós temos
            executamos a instrução DELETE e, se não, somos lançados e exceção

A execução da instrução abaixo foi sem erro porque o país com o ID = 6 não tinha registros relacionados.

Se executarmos esta declaração, veremos uma mensagem de erro personalizada, conforme mostrado na figura abaixo.

a mensagem de erro lançada pelo gatilho SQL

Essa mensagem não é apenas descritiva, mas nos permite tratar bem esse erro e mostrar uma mensagem mais significativa
    para o usuário final.

Gatilho UPDATE do SQL

Vou deixar este para você, como prática. Portanto, tente anotar o gatilho UPDATE. O importante que você deve
    O que sabemos é que, no gatilho de atualização, você pode usar os registros – INSERTED (após a atualização) e DELETED (antes da atualização).
    Em quase todos os casos, você precisará usar os dois.

Quando usar gatilhos SQL?

Os gatilhos compartilham muito em comum com os procedimentos armazenados. Ainda assim, comparado aos procedimentos armazenados, eles são limitados no que você pode fazer. Portanto, prefiro ter um procedimento armazenado para inserir / atualizar / excluir e fazer todas as verificações e ações adicionais lá.

Ainda assim, essa nem sempre é a opção. Se você herdou um sistema ou simplesmente não deseja colocar toda a lógica nos procedimentos armazenados, os gatilhos podem ser uma solução para muitos problemas que você possa ter.

Índice

Emil Drkusic
Últimas mensagens de Emil Drkusic (ver todos)

Monitorando atividades usando sp_WhoIsActive no SQL Server

sp_whoisactive embedded documentation


Neste artigo, falaremos sobre o procedimento armazenado sp_WhoIsActive e como podemos usá-lo para monitorar atualmente
    executando atividades no SQL Server.

Introdução

Os administradores de banco de dados (DBAs) estão constantemente verificando as operações atualmente em execução em uma instância do SQL Server, especialmente quando o servidor está mais lento.

Em geral, a Microsoft forneceu dois procedimentos armazenados do sistema chamados “sp_who” e “sp_who2” para recuperar todos os
    executando processos na instância, mas eles não possuem muitas informações úteis que possam facilitar o desempenho
    processo de monitoramento e análise, também mostram muita informação inútil (processos do sistema).

Por esse motivo, Adam Machanic (MVP da Microsoft desde 2004) desenvolveu um procedimento armazenado mais poderoso chamado “sp_whoisactive” para preencher a lacuna entre as necessidades reais dos DBAs e os
    procedimentos atualmente fornecidos (sp_who e sp_who2).

Nas seções a seguir, falaremos brevemente sobre o procedimento armazenado sp_who e sp_who2 e ilustraremos
    como baixar e usar o procedimento armazenado sp_whoisactive.

sp_Who e sp_Who2

Como mencionamos anteriormente, a Microsoft forneceu procedimentos armazenados sp_Who e so_Who2 para o monitoramento de atividades no SQL
    Servidor. Nesta seção, explicaremos quais são as informações retornadas por cada procedimento armazenado e quais são as diferenças entre eles.

Conforme descrito na documentação oficial, sp_who “Fornece informações sobre usuários, sessões e processos atuais em uma instância do Microsoft SQL Server Database Engine. A informação pode ser
        filtrado para retornar apenas os processos que não estão ociosos, que pertencem a um usuário específico ou que pertencem a um
        sessão específica “.

sp_who retorna informações como o ID do processo da sessão (SPID), o ID do contexto de execução (ECID), o processo
    status, o ID da sessão de bloqueio, o nome do banco de dados, o logon e o nome do host associados a esse processo e os
    tipo de comando

saída do procedimento sp_who

Figura – saída sp_who

sp_Who2 é semelhante ao sp_Who, mas não está documentado nem é suportado, mas retorna mais informações e desempenho
    contador dos processos atuais, como o nome do programa que executa o comando Disk IO, CPU Time, last batch
    tempo de execução.

saída do procedimento sp_who2

Figura – saída sp_who2

Conforme mostrado nas capturas de tela acima, a saída desses procedimentos está mostrando todos os processos do sistema e do usuário em execução que não são necessários o tempo todo e o usuário pode filtrar apenas usando o nome de login ou o ID da sessão enquanto pode precisar ocultar os processos do sistema. Além disso, as saídas não contêm nenhuma informação sobre o comando SQL em execução no momento, como tempo de execução, duração da execução, informações de WAIT e mais informações.

Baixe e instale sp_whoisactive

Para baixar esse procedimento, você deve ir para a página de downloads do site e selecionar a versão relevante ou pode fazê-lo no repositório do GitHub.

Após a conclusão do download, você deve abrir o arquivo who_is_active.sql usando o SQL Server Management Studio e
    execute o script.

Usando sp_Whoisactive

Após a instalação do procedimento, se o executarmos, podemos ver que ele retorna apenas os processos do usuário em execução por padrão
    e fornece as seguintes informações para cada processo:

Coluna

Descrição

Mostrado por sp_who

Mostrado por sp_who2

dd hh: mm: ss.mss

Tempo decorrido do processo

Não

Não

identificação de sessão

O ID da sessão do processo

sim

sim

sql_text

O comando SQL atualmente em execução

Não

Não

Nome de acesso

O nome de login associado ao processo

sim

sim

wait_info

As informações de espera do processo (agregadas)

Não

sim

CPU

O tempo de CPU

Não

sim

tempdb_allocations

Número de gravações Tempdb concluídas

Não

Não

tempdb_current

Número de páginas Tempdb alocadas atualmente

Não

Não

blocking_session_id

O ID da sessão de bloqueio

sim

sim

número de leituras realizadas

Não

E / S de disco

escreve

número de gravações feitas

Não

E / S de disco

leituras físicas

número de leituras físicas feitas

Não

E / S de disco

memoria usada

a quantidade de memória usada

Não

Não

status

O status do processo

sim

sim

open_tran_count

o número de transações usadas

Não

Não

percent_complete

a porcentagem de conclusão da consulta

Não

Não

nome de anfitrião

O nome da máquina host

sim

sim

nome do banco de dados

O nome do banco de dados em que a consulta é executada

sim

sim

nome do programa

O aplicativo que executou a consulta

Não

sim

start_time

A hora de início do processo

Não

sim

login_time

A hora do login

Não

Não

Identificação do Pedido

O ID da solicitação

sim

sim

collection_time

A hora em que essa última seleção foi executada

Não

Não

parte um da saída padrão sp_whoisactive

Figura – Saída do procedimento, parte 1

parte dois da saída padrão sp_whoisactive

Figura – saída do procedimento parte 2

Como mostrado abaixo, para mostrar os processos do sistema, você deve executar o seguinte comando:

mostrando processos do sistema usando sp_whoisactive

Figura – Mostrando processos do sistema

Você pode visualizar mais informações deste procedimento passando parâmetros adicionais, como
    @get_additional_info, @get_locks, @get_avg_time e outros parâmetros.

Uma das coisas surpreendentes sobre esse procedimento é que ele está bem documentado e todas as informações relacionadas podem ser
    obtido executando o seguinte comando:

documentação incorporada sp_whoisactive

Figura – Documentação incorporada do procedimento

Conforme mostrado na imagem acima, o comando help contém três seções:

  1. Informação geral: onde informações gerais como versão, site, e-mail do criador são
            forneceu
  2. Descrição dos parâmetros: onde uma lista de todos os parâmetros disponíveis com sua descrição é
            forneceu
  3. Descrição das colunas de saída: uma lista completa de todas as colunas de saída disponíveis com seus
            descrições

Salvando dados históricos

Se precisarmos salvar periodicamente as informações dos processos em execução para análises adicionais, e como todas as colunas de saída
    Como tipos e dados de dados podem ser encontrados na documentação incorporada do procedimento, podemos criar um trabalho do agente SQL que
    periodicamente executa o procedimento sp_whoisactive dentro de um comando INSERT, como:

Em seguida, podemos nos referir aos dados armazenados posteriormente para uma análise mais aprofundada.

Recursos

Se você deseja aprender mais sobre esse procedimento armazenado, pode consultar os seguintes links:

Conclusão

Neste artigo, descrevemos brevemente os procedimentos sp_who, sp_who2 e sp_whoisactive e explicamos por que
    sp_whoisactive é mais poderoso e mais necessário para administradores de banco de dados.

Hadi Fadlallah
Últimas mensagens de Hadi Fadlallah (ver todos)

Como classificar meses cronologicamente no Power BI

Changing the Data Type


Neste artigo, vou demonstrar como classificar meses cronologicamente no Power BI. Visualizar dados de vendas em um período é uma das maneiras mais influentes de gerar relatórios. Muitas vezes, às vezes é essencial que você crie gráficos que mostrem a tendência ou o crescimento de uma métrica ao longo do tempo. O período pode ser qualquer coisa, por exemplo, dias, semanas,
    meses ou anos. Basicamente, você tem a ideia de como a métrica aumentou ou diminuiu durante o período específico.

No Power BI, você também pode visualizar suas métricas por um período selecionado específico. Isso geralmente é implementado pelo desenho de gráficos de linhas que mostram a tendência ao longo do tempo, ou pelo uso de gráficos de barras verticais que mostram métricas específicas no período, ou simplesmente usando uma matriz tabular para exibir os resultados textualmente. Para fins deste artigo,
    consideraremos apenas o terceiro cenário, ou seja, matriz tabular para simplificar. No entanto, a mesma solução pode ser feita para funcionar com qualquer tipo de gráfico que contenha um período de tempo.

Às vezes, quando você importa dados para o Power BI, e especificamente se você tem meses ou trimestres disponíveis como dados textuais na fonte de dados original (de um arquivo simples), o Power BI não consegue entender se o campo importado é um campo de data real (dias / mês / ano etc.) ou apenas dados de texto simples. Nesse caso, após a importação,
    os meses ou trimestres são classificados em ordem alfabética, e não cronologicamente, o que é um erro, dependendo dos requisitos e algo não tão relevante no desenvolvimento de relatórios de tendências. Nesta solução, primeiro aprenderemos como reproduzir o erro e, em seguida, veremos como fazer as alterações necessárias no modelo de dados para resolver esse erro e classificar os meses cronologicamente no Power BI.

Reproduzindo o erro

Vamos primeiro tentar reproduzir o erro e, em seguida, explicarei como classificar os meses cronologicamente no Power BI.
    Para replicar o erro, precisamos criar um arquivo CSV simples, como mostra a figura abaixo.

Conjunto de dados de exemplo para classificar meses cronologicamente no Power BI

Figura 1 – Conjunto de dados CSV

Como você pode ver na figura acima, temos apenas duas colunas simples – Mês e Vendas. o
Mês lista todos os valores que vão de “janeiro” a “dezembro” e os correspondentes Vendas valores
    junto com isso. Depois de criar o arquivo CSV, a próxima etapa é abrir o Power BI e conectá-lo a esse conjunto de dados.

Abra o Power BI Desktop e siga as etapas abaixo para buscar esses dados no modelo de dados do Power BI:

  1. Selecione Adquirir dados e selecione Texto / CSV no menu que aparece

    Obter dados no Power BI

    Figura 2 – Obter dados no Power BI

  2. Procure o arquivo que você acabou de criar na etapa anterior e clique em Aberto

    Procurar classificar meses cronologicamente no conjunto de dados do Power BI

    Figura 3 – Procurar conjunto de dados

  3. Na próxima caixa de diálogo exibida, verifique os dados e clique em Carga

    Carregar dados no modelo do Power BI

    Figura 4 – Carregar dados no modelo do Power BI

  4. Você verá que os dados foram carregados no Power BI

  5. Clique em Mesa de Visualizações Painel arraste e solte os campos em
            uma tabela como mostrado na figura

  6. Na nova tabela criada, você pode ver que os meses agora estão classificados em ordem alfabética

    Classificar meses cronologicamente na tabela do Power BI

    Figura 5 – Criando a tabela

  7. Como você pode ver na figura acima, quando você arrasta e solta o Mês campo no Valores
    seção da tabela, todos os meses são classificados, mas em ordem alfabética. No entanto, na referência usual, geralmente tendemos a analisar meses ou melhor, quaisquer períodos cronologicamente e não alfabeticamente. Portanto, para classificar meses cronologicamente no Power BI, precisaríamos fazer algumas transformações no modelo de dados. Essas transformações podem ser feitas usando o Power Query Editor, disponível na ferramenta Power BI Desktop.

    Solução – classifique os meses cronologicamente no Power BI

    Agora que sabemos do que se trata o erro real, vamos em frente e fazer as alterações necessárias no modelo de dados para classificar os meses cronologicamente no Power BI. A idéia é criar um valor fictício de data com base no
    Mês dados disponíveis no conjunto de dados. Quando os valores da data estiverem disponíveis, podemos apenas
        extrair o Número do mês e classifique o Mês coluna usando o Mês
            Número
    campo. Você pode seguir as etapas fornecidas abaixo.

    1. No Power BI Desktop, selecione Transformar dados e depois clique em Transformar
                  Dados

      Transformar dados

      Figura 6 – Transformação de dados

    2. No Editor de consultas de energia que abrir, navegue até o Adicionar coluna guia que
              abre

    3. Selecione Coluna personalizada e insira a fórmula como mostra a figura abaixo

    4. Para o nome da coluna personalizada, estou usando “Encontro“, Já que esta coluna armazenará fictícios
              valores de data

    5. Na fórmula da coluna personalizada, use o seguinte: = “1” e [Month] E “2020”

      Adicionando coluna de data fictícia para classificar os meses cronologicamente no power bi

      Figura 7 – Coluna de adição de data fictícia

    6. Então, basicamente, o que estamos tentando alcançar é apenas criar um valor de data fictício adicionando “1” como a data e
              “2020” como o valor do ano para o mês que já existe

      Nova coluna de data adicionada

      Figura 8 – Nova coluna de data adicionada

    7. O próximo passo é converter esse novo campo, Encontro para um data datatype. Clique com o botão direito do mouse em
              a coluna e selecione Alterar tipo e depois selecione Encontro

      Alterando o tipo de dados

      Figura 9 – Alterando o tipo de dados

    8. Você pode ver que o tipo de dados e os valores desta coluna foram alterados

      Tipo de dados alterado

      Figura 10 – Alterado o tipo de dados

    9. Agora, adicionaremos mais uma coluna personalizada que extrairá o número do mês desse campo. Clique em Adicionar colunas e depois Colunas personalizadas

    10. Forneça o nome do campo como “MonthNumber“E fórmula como” = Date.Month ([Date]) “E clique em Está bem

      Adicionando nova coluna MonthNumber

      Figura 11 – Adicionando nova coluna MonthNumber

    11. Agora você verá mais uma coluna adicionada no conjunto de dados

      Adicionada nova coluna MonthNumber

      Figura 12 – Adicionada nova coluna MonthNumber

    12. Alteraremos o tipo de dados desse campo para o número inteiro. Clique com o botão direito do mouse no MonthNumber,
              selecionar Alterar tipo e depois selecione o Número inteiro

      Alterar o tipo de dados para número inteiro

      Figura 13 – Alterar o tipo de dados para número inteiro

    13. Como temos o campo desejado MonthNumber em nosso modelo de dados, podemos remover a data fictícia
              campo que criamos em nossas etapas anteriores. Clique com o botão direito do mouse no Encontro coluna e selecione Retirar

      Removendo a coluna Data fictícia

      Figura 14 – Removendo a coluna Data fictícia

    14. Por fim, você pode fechar a janela do Power Query Editor navegando para o Casa e selecione Fechar e aplicar

      Fechando o Editor de Query Power

      Figura 15 – Fechando o editor de consulta de energia

    15. Selecionando coluna para classificar os meses cronologicamente no Power BI

      Agora que fizemos as alterações necessárias em nosso modelo de dados para classificar os meses cronologicamente no Power BI, a versão final
          O passo é definir a ordem de classificação no Mês em ordem crescente de MonthNumber.
          Siga as etapas abaixo para classificar os meses.

      1. Clique no Dados guia no painel esquerdo

      2. Selecione os Mês coluna e selecione Classificar por coluna no Ordenar painel na barra de ferramentas acima

      3. No menu suspenso exibido, selecione MonthNumber e navegue até o Relatórios aba

        Classificar mês por número do mês

        Figura 16 – Classificar mês por número do mês

      4. Agora você pode ver que os meses estão sendo classificados cronologicamente e não alfabeticamente

        Meses classificados cronologicamente no Power BI

        Figura 17 – Meses classificados cronologicamente no Power BI

      Além disso, se você deseja ocultar o MonthNumber basta clicar com o botão direito do mouse e selecionar ocultar.

      Ocultar o campo MonthNumber

      Figura 18 – Ocultar o campo MonthNumber

      Você terá seu conjunto de dados como estava no arquivo CSV original, mas os meses são classificados cronologicamente.

      Meses classificados cronologicamente no Power BI

      Figura 19 – Meses classificados cronologicamente no Power BI

      Conclusão

      Neste artigo, expliquei como classificar meses cronologicamente no Power BI. Mencionei também as etapas para replicar o erro e forneci orientações passo a passo sobre como resolver o problema e finalmente obter os resultados desejados.

      Aveek Das
      Últimas mensagens de Aveek Das (ver todos)

Scripts Python para tabelas dinâmicas no SQL Server

Python SQL Scripts example


Este artigo fala sobre scripts Python para criar tabelas dinâmicas de várias maneiras.

Introdução

Você pode usar tabelas PIVOT no Microsoft Excel para análise de dados, preparando relatórios. Isso nos ajuda a extrair informações significativas de um grande conjunto de dados. Podemos transpor linha para coluna junto com agregações nela.

Exemplo de scripts SQL do Python

Podemos gerar dados PIVOT de diferentes maneiras no SQL Server.

Podemos usar CTE recursiva, loop While, concatenação SQL, FOR XML PATH ou CLR

Python é uma linguagem de programação interativa e fácil de usar. Exploramos muitos casos de uso de scripts Python no SQLShack. Este artigo explora o uso de dados Python para Pivot.

Scripts Python e Pivot

Vamos explorar alguns métodos que você pode usar no Python para uma tabela dinâmica. Para a demonstração, crie a tabela a seguir e insira dados nela.

Abra o anexo a seguir para inserir dados nesta tabela.

Método 1: Criar um Pivot usando dados armazenados na tabela SQL

Para esta demonstração, estou usando os dados armazenados no [SalesData] tabela do banco de dados SQLShackDemo.

Dados de amostra

Queremos uma tabela PIVOT, conforme destacado na captura de tela a seguir. Aqui, exigimos Quantity, SubTotal e UnitPrice para a coluna dinâmica ProductName.

Mesa PIVOT

Executamos scripts Python no SQL Server usando o procedimento armazenado sp_execute_external_script.

Pré-requisitos para executar scripts Python no SQL Server

  • Você deve estar no SQL Server 2017 ou SQL Server 2019 para este artigo

  • Instalar Serviços de máquina (no banco de dados) – Python

  • Ative a execução de scripts externos usando sp_configure comando

Para obter instruções detalhadas, consulte este artigo Como usar o Python no SQL Server 2017 para obter análises avançadas de dados.

Depois de preparar o ambiente, execute o seguinte código Python e você obterá a saída conforme nosso requisito especificado acima.

Vamos entender o script Python.

  • No primeiro bloco, usamos o procedimento armazenado sp_execute_external_script e definimos a linguagem Python para o script

    Importamos o módulo python Pandas e Numpy no script. Esses módulos fornecem funções úteis para Pivot, classificação de dados e agregações.

    Procedimento armazenado sp_execute_external_script

  • Na próxima parte, definimos um quadro de dados para o conjunto de dados de entrada. Nós temos uma tabela dinâmica Função Python para criar uma tabela dinâmica a partir de dados de entrada

    No data.pivot_table, definimos índices e sua coluna de valor. Aqui, definimos [ProductName] como coluna de índice e [UnitPrice],[Quantity], [SubTotal] como colunas de valor de dados. Quadro de dados OutputDataSet captura esses dados. Podemos exibir a saída usando uma função PRINT

    função Python pivot_table

  • Especificamos a consulta SQL para recuperar dados de origem de [SalesData] tabela no argumento @ input_data_1

    Dados de entrada

Da mesma forma, vejamos outro exemplo dos seguintes dados de origem.

Dados de origem

Queremos gerar dados dinâmicos em dois formatos.

  • Vendas totais de cada funcionário

  • Vendas totais de cada funcionário em um ano de vendas

Execute o seguinte script Python no SSMS.

Você obtém a seguinte tabela PIVOT na saída e ela atende ao nosso primeiro requisito.

Tabela PIVOT na saída

Para o segundo requisito, vamos adicionar uma nova linha para Raj e agora temos duas entradas para Raj no ano de 2019.

Adicione uma nova linha

Agora, para esse requisito, adicionamos [Year] coluna também nas colunas de índice do Pivot.

Na saída, obtivemos o Pivot para funcionários, além de detalhes anuais. Podemos observar que, para Raj, ele combinou as duas entradas do ano de 2019 e deu uma soma das vendas na produção dinâmica.

Pivô para dados de funcionários

Método 2: ler dados de um arquivo CSV e preparar dados PIVOT usando scripts Python no SQL Server

Nos exemplos anteriores, nossos dados de origem estavam em tabelas SQL. O Python pode ler arquivos CSV, Excel e também usando os módulos dos pandas.

Podemos armazenar o arquivo CSV localmente em um diretório ou ele pode ser lido diretamente de um URL da Web. Nesta demonstração, usamos um arquivo CSV armazenado em um URL da Web.

No código a seguir, usamos pd.read_csv função e insira um URL da Web como dados de origem. O Python pega diretamente os dados desse URL, mas você deve ter uma conexão ativa com a Internet.

Posteriormente, definimos colunas de índice (Equipe, Salário) e valores (faculdade) para ela. Também usamos a função agregada np.sum nisto.

Execute esse script Python e visualize os dados dinâmicos.

Ler dados de um arquivo CSV

Na saída, podemos ver alguns registros mostrando zero na coluna da faculdade. Não temos um nome de faculdade no arquivo CSV para esses registros e, no PIVOT, ele mostra zero para as células NULL ou em branco.

Suponha que não queremos esses registros na tabela dinâmica. Vamos soltar esses registros com células em branco no CSV usando o dropna() Função Python. Usamos argumento inplace = true para fazer alterações no próprio quadro de dados.

O código completo após adicionar a função dropna () está abaixo.

Agora, execute-o e observe a alteração nas tabelas dinâmicas. Eliminou registros com valores NULL na saída, como mostrado na imagem a seguir.

Eliminar valores NULL

Método 3: Tabelas PIVOT usando a função groupby e lambda em scripts Python

Também podemos usar as funções groupby e lambda nos scripts Python para tabelas dinâmicas. Neste exemplo, tenho um conjunto de dados de alguns estados da Índia e suas cidades em uma tabela SQL.

Tabelas PIVOT usando groupby

Precisamos de uma tabela dinâmica a partir desses dados. Na saída, ele deve listar todas as cidades para um estado em uma coluna; deve usar || como um separador de nomes de cidades.

Usamos a seguinte função para nossos scripts.

  • Groupby (): Usamos a função groupby () no quadro de dados do Python pandas para dividir os dados no grupo de acordo com os critérios definidos. É uma função semelhante à da função SQL GROUP BY. Na consulta, especificamos o groupby () função na coluna de estado
  • Lambda (): Podemos usar uma função lambda para construir funções anônimas no Python. Nós definimos expressões nesta função
  • Classificado (): Classifica os resultados em uma ordem crescente ou decrescente. É semelhante a uma cláusula ORDER BY no SQL Server
  • Junte-se(): A função Join () cria uma string concatenada. Exigimos que ele concatene || no conjunto de resultados

Execute o seguinte script Python para obter os dados dinâmicos desejados.

Exibir consulta Python de saída

Conclusão

Neste artigo, exploramos scripts Python para criar tabelas PIVOT semelhantes ao Microsoft Excel. Você deve explorar o Python, pois é uma linguagem de programação popular, versátil e útil.

Rajendra Gupta
Últimas mensagens de Rajendra Gupta (ver todos)

Convertendo pacotes SSIS em scripts Biml

Create SSIS package control flow screenshot


xmlns=“http://schemas.varigence.com/biml.xsd”>

Nome=“DestinationConnection” ConnectionString=“Fonte de dados = .; Catálogo inicial = tempdb; Provedor = SQLNCLI11.1; Segurança integrada = SSPI; Tradução automática = Falso;” />

Nome=“Gerenciador de conexão de arquivo simples” Caminho de arquivo=“F: SourceFile.txt” Formato de arquivo=“Gerenciador de conexão de arquivo simples” />

Nome=“Pacote3” Língua=“Nenhum” ConstraintMode=“LinearOnSuccess” Nível de proteção=“EncryptSensitiveWithUserKey”>

Nome=“Tabela de destino” Tipo de dados=“Corda” IncludeInDebugDump=“Excluir”>[dbo].[Person]

Nome=“Nome do usuário” Tipo de dados=“Corda” IncludeInDebugDump=“Excluir”>Admin

Nome=“Executar tarefa SQL” ConnectionName=“DestinationConnection”>

CRIAR A TABELA [dbo].[Person](

[BusinessEntityID] [int] NÃO NULO,

[PersonType] [nchar](2) NÃO NULL,

[NameStyle] [nvarchar](50) NÃO NULL,

[Title] [nvarchar](8) NULL,

[FirstName] [nvarchar](50) NÃO NULL,

[MiddleName] [nvarchar](50) NULL,

[LastName] [nvarchar](50) NÃO NULL,

[Suffix] [nvarchar](10) NULL,

[EmailPromotion] [int] NÃO NULO,

[ModifiedBy] [nvarchar](50) NÃO NULL,

[ModifiedDate] [datetime] NÃO NULL) LIGADO [PRIMARY]

Nome=“Tarefa de fluxo de dados”>

Nome=“Origem do arquivo simples” LocaleId=“Nenhum” FileNameColumnName=“” ConnectionName=“Gerenciador de conexão de arquivo simples” />

Nome=“Coluna Derivada”>

Nome=“Modificado por” Tipo de dados=“Corda” comprimento=“5”>@[User::Username]

Nome=“Data modificada” Tipo de dados=“Data hora”>GETDATE ()

Nome=“Destino OLE DB” ConnectionName=“DestinationConnection”>

Nome variável=“User.DestinationTable” />

ConnectionName=“Gerenciador de conexão de arquivo simples”>

ExternalProperty=“ConnectionString”>@[$Package::FlatFilePath]

Nome=“FlatFilePath” Tipo de dados=“Corda” É necessário=“verdade”>F: SourceFile.txt

Nome=“Gerenciador de conexão de arquivo simples” CodePage=“1252” TextQualifier=“_x003C_none_x003E_” ColumnNamesInFirstDataRow=“verdade” RowDelimiter=“”>

Nome=“BusinessEntityID” comprimento=“50” Tipo de dados=“AnsiString” Delimitador=“Vírgula” MaximumWidth=“50” />

Nome=“PersonType” comprimento=“50” Tipo de dados=“Corda” Delimitador=“Vírgula” MaximumWidth=“50” />

Nome=“NameStyle” comprimento=“50” Tipo de dados=“Corda” Delimitador=“Vírgula” MaximumWidth=“50” />

Nome=“Título” comprimento=“50” Tipo de dados=“Corda” Delimitador=“Vírgula” MaximumWidth=“50” />

Nome=“Primeiro nome” comprimento=“50” Tipo de dados=“Corda” Delimitador=“Vírgula” MaximumWidth=“50” />

Nome=“Nome do meio” comprimento=“50” Tipo de dados=“Corda” Delimitador=“Vírgula” MaximumWidth=“50” />

Nome=“Último nome” comprimento=“50” Tipo de dados=“Corda” Delimitador=“Vírgula” MaximumWidth=“50” />

Nome=“Sufixo” comprimento=“50” Tipo de dados=“Corda” Delimitador=“Vírgula” MaximumWidth=“50” />

Nome=“EmailPromotion” comprimento=“50” Tipo de dados=“Corda” Delimitador=“CRLF” MaximumWidth=“50” />