SQL pronto para uso em uma tarde | Max S | Skillshare

Velocidade de reprodução


1.0x


  • 0.5x
  • 0.75x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

SQL pronto para uso em uma tarde

teacher avatar Max S, Power through programming

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Aulas neste curso

    • 1.

      Introdução

      0:40

    • 2.

      Introdução

      15:19

    • 3.

      Tipos e programas de dados

      17:35

    • 4.

      [Maca a configuração a servidor de a PG local local

      3:25

    • 5.

      [Windows] OS Postgres locais Server

      4:51

    • 6.

      Configuração no [Mac] Postico

      4:34

    • 7.

      Configuração no Datagrip

      5:32

    • 8.

      Conexão de CLI

      1:20

    • 9.

      Como criar e cair dados

      6:01

    • 10.

      Criação de regimes

      3:48

    • 11.

      Como criar tabelas

      8:36

    • 12.

      Como mudar tabelas

      3:06

    • 13.

      Tipos de enumerados

      4:51

    • 14.

      Como inserir valores

      6:57

    • 15.

      Como executar um script SQL

      6:20

    • 16.

      Leitura dados

      7:00

    • 17.

      Como criar tabelas a partir

      6:28

    • 18.

      16AliasAndorderningHB

      13:41

    • 19.

      Comparação direta com filtro condicionado

      5:08

    • 20.

      18Conditionistamisto

      10:20

    • 21.

      19Joining 19JoiningConditionalsHB

      7:50

    • 22.

      20de a 20NegatingConditionalsHB

      4:40

    • 23.

      21FilterNullValuesHB

      1:31

    • 24.

      22CreatumaNewColumsAndna 22CreatingNewColumnsAndArithmeticsHB

      7:36

    • 25.

      23DatatypeConversations 23

      6:33

    • 26.

      24LogicStatamentsHB

      7:22

    • 27.

      25ManipulatumStringsHB

      9:59

    • 28.

      26StringPositionalInformaçãoHB

      8:10

    • 29.

      27StringSubsetsAndConcatist

      22:56

    • 30.

      28StringReplacementHB

      9:35

    • 31.

      29DateAndTimeHB

      6:32

    • 32.

      30DataTimeIntervalsHB

      7:37

    • 33.

      31ComesHB

      6:50

    • 34.

      32AgregaçãoFunctions 3

      6:54

    • 35.

      33Grouping E filtragem

      12:20

    • 36.

      34JoinsHB

      18:49

    • 37.

      35leftRightJoysHB

      16:48

    • 38.

      36AutojoinsHB

      9:05

    • 39.

      37UnionsHB

      5:29

    • 40.

      Subqueries

      9:02

    • 41.

      39WindowFuntions E 39WindowFunctionsAndAliasesHB

      15:26

    • 42.

      40RowNumberAndRanksHB

      6:14

    • 43.

      41Usandode 41UsingOtherRowsWithWindowFunctionsHB instruçõesde 4

      11:07

    • 44.

      42NTilesHB

      4:09

    • 45.

      43de 43UnderstandingQueryPerformanceHB

      3:47

  • --
  • Nível iniciante
  • Nível intermediário
  • Nível avançado
  • Todos os níveis

Gerado pela comunidade

O nível é determinado pela opinião da maioria dos estudantes que avaliaram este curso. Mostramos a recomendação do professor até que sejam coletadas as respostas de pelo menos 5 estudantes.

359

Estudantes

--

Projetos

Sobre este curso

em apenas uma tarde em treinamento, você vai ser a sua de

  • 100% fluente no SQL
  • Ter o know-how técnico para aplicar no trabalho
  • Poder escrever perguntas no SQL para extrair e analisar dados
  • Resolver perguntas de SQL técnicos com confiança



O treinamento começa com os mais conceitos básicos de a qual a sua

Com cada passo certificamos não apenas escrever as perguntas as perguntas, mas também falar com o comportamento reais, para que nós enta que nós estamos fazendo e a forma de funcionar para que este conhecimento seja aplicado a outros problemas a outros problemas.

No final deste curso, você deve se sentir sentindo muito confortável com perguntas de SQL e serão equipados com as habilidades para responder as perguntas de entrevista no SQL SQL que pode ser criado em entrevistas para as posições como os analistas e dados Scientist.

Conheça seu professor

Teacher Profile Image

Max S

Power through programming

Professor
Level: Beginner

Nota do curso

As expectativas foram atingidas?
    Superou!
  • 0%
  • Sim
  • 0%
  • Um pouco
  • 0%
  • Não
  • 0%

Por que fazer parte da Skillshare?

Faça cursos premiados Skillshare Original

Cada curso possui aulas curtas e projetos práticos

Sua assinatura apoia os professores da Skillshare

Aprenda em qualquer lugar

Faça cursos em qualquer lugar com o aplicativo da Skillshare. Assista no avião, no metrô ou em qualquer lugar que funcione melhor para você, por streaming ou download.

Transcrições

1. Introdução: Ei, aí está Max e bem-vindo à sua missão de SQL. Nesta missão, você aprenderá a usar o SQL para processar e analisar dados diretamente no banco de dados usando consultas SQL Ao final dessa missão, você poderá escrever consultas SQL com essa aparência e também aprenderá o que são bancos de dados relacionais Ao longo do curso, você começará primeiro com sua configuração. Em seguida, você abordará algumas noções básicas sobre tabelas, bancos de dados e consultas Você aprenderá sobre aritmética. Você aprenderá sobre datas e horas, manipulando dados e, em seguida, abordará coisas mais complexas, como junções, uniões e Então, estou animado para você começar. 2. Introdução: Olá, X Max e bem-vindos. Então nesta lição vamos aprender sobre bancos de dados relacionais apenas para garantir que todos estejam no mesmo nível, que todos têm o mesmo conhecimento sobre bancos de dados relacionais e que todos estamos familiarizados com os termos-chave para que quando realmente começamos a usar SQL e aprender SQL, quando você ouvir qualquer um dos termos necessários, você entenda exatamente do que estou falando. Então, primeiro de tudo, relacional ou bancos de dados em um modelo relacional são divididos em tabelas. Então, um banco de dados será composto de várias tabelas, mas vamos começar com a tabela primeiro. Então, por exemplo, podemos ter uma mesa como vemos aqui à direita. A primeira coisa que percebemos é que a tabela tem um nome, que você pode ver acima dela. Agora esta é apenas a maneira que eu vou mostrar. Normalmente, o nome vai ser representado em outro lugar. Mas só para ter certeza de que tudo está ligado aqui, teremos o nome em cima. Então, neste caso, nosso nome é sublinhado de usuário e telefone. Agora você vai notar algo sobre a nomeação, que está lá para convenções gerais de nomenclatura. Um deles está usando um sublinhado e o outro está usando letras maiúsculas. Você pode ver o exemplo de letras maiúsculas no ID do usuário, que é uma coluna em nossa tabela de informações do usuário. Estas duas opções são apenas diferentes convenções de nomenclatura e estão lá apenas para ajudar você, o usuário ou talvez também o administrador de banco de dados ou qualquer outra pessoa que precise usar este banco de dados, ser capaz de ler tudo mais fácil, já que é muito mais fácil ler palavras separadas por um sublinhado ou palavras onde cada nova palavra começa com uma letra maiúscula. E é muito mais fácil ler palavras como essa onde tudo é minúsculo ou maiúsculo ou algo assim. E então você provavelmente verá que uma dessas duas convenções de nomenclatura está sendo usada quando você está usando um banco de dados SQL, por exemplo, em uma empresa, ou quando você recebe uma em uma entrevista técnica ou algo assim. Agora, como você provavelmente já percebeu e provavelmente já está ciente, tabelas são feitas de linhas e colunas e é da mesma maneira em um banco de dados relacional. Então, podemos ver aqui nossa tabela, a tabela userinfo tem quatro colunas diferentes chamadas de ID do usuário, outro chamado nome, outro chamado join, e outro chamado e-mail. E também tem linhas diferentes. Podemos ver aqui que temos três filas neste caso. Então falaremos sobre isso em um segundo. Mas sim, este vai ser o tipo de estrutura base que nosso banco de dados é composto de tabelas diferentes. Cada tabela tem um nome, e cada tabela também é composta de colunas e linhas. Agora, cada tabela em um banco de dados relacional também tem algo chamado chave primária. A chave primária é a coluna que identifica exclusivamente cada linha. Então podemos ver aqui, neste caso, nossa chave primária será o ID do usuário, o que significa que cada linha precisa ter um ID de usuário exclusivo. Esta chave primária pode surgir naturalmente. Por exemplo, em nossa tabela userinfo, o ID do usuário será exclusivo por design, porque cada usuário terá um ID exclusivo. Portanto, o ID do usuário é uma ótima coluna para usar como chave primária. Mas em outros casos, a chave primária pode ser uma coluna adicional porque não há nenhuma coluna em nossa tabela que não resulte realmente em uma avaliação gratuita de identificação exclusiva. De qualquer forma, uma chave primária em tabelas importante porque é isso que vai nos permitir identificar cada registro em nosso banco de dados individualmente. E por isso é importante que tenhamos uma coluna para a chave primária porque dessa forma podemos ter um identificador exclusivo para cada linha que temos em nossa tabela. Agora algo mais importante é a chave primária. Só pode haver um por mesa. Não é possível ter duas chaves primárias em uma tabela. Então, a chave primária será apenas uma, e também nos permitirá identificar cada linha de forma única. Agora estamos usando a linha de termos e colunas. Mas, na verdade, em SQL, geralmente as colunas serão chamadas atributos e as linhas serão chamadas de registros. E assim você pode pensar sobre as colunas sendo atributos para cada um de nossos registros. Novamente, registros sendo linhas. Então, por exemplo, se olharmos para a primeira linha ou o primeiro registro, temos o UserID 1. Então, o atributo da nossa primeira linha onde ele tem um ID de usuário de um e nome. Alice entrou no dia 11 de maio e um e-mail para abc.com. Então isso vai ser uma espécie de sintaxe que você provavelmente vai ouvir quando você está olhando para tabelas e você sabe, ouvir sobre linhas e colunas ou melhor registros e atributos. Agora, como eu mencionei anteriormente, geralmente um banco de dados vai ter várias tabelas em vez de apenas uma. Assim, por exemplo, nosso banco de dados me, pode ser sobre usuários e armazenar informações do usuário, bem como informações sobre os eventos que os usuários estão fazendo. E assim pudemos ver tabelas, por exemplo, chamadas UserInfo, que tínhamos antes, que também poderíamos ter outra tabela chamada log de eventos. E podemos ter outra tabela chamada Event Info. E essas tabelas vão estar relacionadas de alguma forma. Normalmente, não a melhor maneira de definir essas relações é através de algo chamado chave estrangeira. Assim, por exemplo, em nosso registro de eventos temos duas chaves estrangeiras. E com as chaves estrangeiras são, é, elas são colunas nessa tabela que faz referência à chave primária em outra tabela. Então, por exemplo, vamos dar uma olhada na tabela de log de eventos. Aqui temos duas chaves estrangeiras. Um deles será o ID do usuário. Agora, o ID do usuário faz referência à coluna ID e à tabela userinfo. E temos outra chave estrangeira aqui chamada ID do evento. Agora o ID do evento vai fazer referência à coluna ID na tabela de informações do evento. E assim, também podemos estruturar as relações entre nossas diferentes tabelas. Uma vez que, de outra forma, seria ineficiente para nós armazenar todos esses dados na mesma tabela. E é por isso que dividimos essas tabelas, ou é por isso que dividimos os dados em vez dessas tabelas diferentes. Porque senão teríamos uma mesa muito grande. Porque imagine se temos nosso registro de eventos e para cada evento, nós também armazenamos todas as informações sobre o usuário, bem como as informações sobre o evento em si. Isso significa que cada registro vai ter um monte de duplicatas porque as informações do usuário não vai mudar e as informações sobre o evento não vai mudar. Então, uma maneira melhor e mais eficiente de estruturar isso é manter o topo do log de eventos e tudo o que precisa que é irrelevante para este log de eventos que vai mudar. E informações, por exemplo, sobre o usuário, podem ser armazenadas na tabela userinfo. E tudo o que precisamos no registro de eventos é quem fez o evento. Mas se você quiser saber mais sobre o usuário, então podemos ter nossa chave estrangeira, o ID do usuário na tabela de log de eventos, que faz referência à chave primária, o ID e a tabela de informações do usuário. E então lá podemos obter uma pesquisa direta essencialmente. E para cada registro, se quisermos, então podemos obter mais informações sobre o usuário e, em seguida, a mesma coisa sobre os eventos. Dessa forma, podemos usar chaves estrangeiras para fazer referências entre tabelas e vinculá-las. Agora falamos sobre a chave primária, colocando uma restrição em cada tabela, que significa que o valor e a chave primária precisam ser únicos em cada linha, precisam ser únicos em todos os registros. Mas você também pode ter restrições adicionais. Por exemplo, outra restrição que podemos querer fazer é dizer OK, o campo de e-mail na tabela userinfo também precisa ser exclusivo. Agora não vai identificar exclusivamente a pessoa, mas queremos que ela seja única em cada pessoa. Assim, podemos ter uma chave primária, por exemplo, sendo o ID do usuário. E então temos outro campo, por exemplo, o e-mail. Mas também queremos ter certeza de que a coluna de e-mail em si é única. E assim podemos colocar restrições adicionais em uma tabela para dizer, por exemplo, que o e-mail precisa ser exclusivo. Ou talvez se você tem uma plataforma diferente onde você pode fazer login diferentes regiões e você tem um nome e você tem regiões diferentes, então você pode dizer o nome ou o nome de usuário que uma pessoa deseja usar precisa ser único em cada região. Assim, você pode ter uma combinação do nome e a combinação de região precisa ser única. Assim, as pessoas podem ter o mesmo nome de usuário em diferentes regiões. Mas em cada região, cada pessoa só tem permissão para ter um nome de usuário. Por exemplo, os nomes de usuário só podem aparecer uma vez. Dessa forma, você pode ter restrições adicionais para tabelas que vão além da chave primária que também exigem exclusividade ou que também resultam em mais condições sendo colocadas na tabela. Agora, isso não vai substituir a chave primária, mas vai ser restrições adicionais, além da restrição de que precisamos ter a chave primária, que cada valor na chave primária precisa ser exclusivo em cada registro único. Essas restrições podem, naturalmente, ser boas porque dessa forma, se você MRF, alguém talvez queira criar uma conta, mas os e-mails já foram usados por qualquer motivo. E podemos enviar-lhes uma mensagem de erro e dizer que os e-mails já estão sendo usados. E não vamos criar registros onde várias pessoas estão tendo o mesmo e-mail. Porque então, se você quiser enviar um e-mail para nossos usuários, por exemplo, em várias pessoas diferentes estão usando o mesmo e-mail por qualquer motivo, e isso obviamente vai causar problemas. E então, se houver quaisquer restrições adicionais, como quantas, seja através da lógica de negócios ou apenas sua compreensão de como todos esses dados devem ser organizados, então você pode, naturalmente, colocá-los em ou em vez essas restrições podem ser colocadas nas tabelas individuais para que, você sabe, nenhum desses problemas aconteça. Agora, ao longo do tempo, mesmo que estejamos dividindo nossos dados nessas tabelas diferentes, as tabelas ainda podem ficar muito grandes. Por exemplo, nosso registro de eventos pode crescer muito rapidamente se tivermos muitos usuários usando nossa plataforma. E então algo que você pode ouvir sobre é algo chamado uma partição. Agora uma partição como uma forma que podemos dividir uma tabela em pequenos pedaços sub. E dessa forma podemos armazená-los em locais diferentes. E isso pode tornar o armazenamento mais eficiente, mas também pode tornar a consulta mais eficiente. Normalmente, você cria uma partição por uma coluna que é frequentemente usada para filtragem. Assim, por exemplo, uma maneira muito comum de particionar dados é por data. Porque muitas vezes, se você estiver fazendo uma consulta, por exemplo, você deseja ver todos os usuários ativos na última semana, então você estará consultando ou melhor, você estará filtrando por data. Então, se sua tabela é particionada ou melhor, dividida em segmentos diferentes, então você não precisa passar por tantos dados. Você só precisa fazer referência às tabelas que realmente contêm os dados apropriados. Dessa forma, ele será mais eficiente para armazenamento porque você não precisa armazenar uma mesa grande em um só lugar. Mas, na verdade, também será mais eficiente para a consulta, porque você só precisa passar por uma parte menor da tabela para obter os resultados que você está procurando. Agora, a coisa legal sobre partições é. Realmente não afeta você como a consulta ou as partições são atendidas pelo próprio banco de dados. E ele vai lidar com todas essas coisas de armazenamento para você. E isso vai torná-lo mais eficiente se você estiver filtrando pelas colunas que são usadas para as partições. Mas se você quiser obter todos os dados na tabela, você ainda pode, mesmo que a tabela vai ser particionada, você ainda pode consultar todas as tabelas se quiser, ou você pode consultar toda a tabela que pode ser armazenada em diferentes locais. Então, mesmo que as partições vão dividir nossas tabelas para torná-las mais eficientes. E eles podem tornar nossas consultas mais eficientes se estamos usando os filtros apropriados, ele ainda não vai ter nenhum outro efeito negativo em você ou você não vai realmente notar isso além dos possíveis efeitos positivos que você começa a partir dele. Por isso, as petições são extremamente legais porque tornam as coisas muito mais eficientes. No entanto, eles não têm, você realmente não tem que interagir com eles qualquer outra forma, exceto usá-los em seu benefício. Agora, há também outras maneiras que bancos de dados relacionais ou tabelas podem ser projetados para tornar a consulta mais eficiente. E isso é definindo índices ou uma definição de índices adicionais. Então, por exemplo, digamos que muitas vezes consultamos por eventos. Podemos querer configurar um índice adicional para cada evento. E dessa forma, nosso banco de dados vai realmente manter o controle de qual registro tem qual ID de evento, por exemplo. Agora, a indexação vai exigir mais armazenamento. Então, obviamente, você não quer indexar cada coisa porque então você precisa manter o controle de todas essas coisas. Mas na próxima coisa nas colunas à direita pode tornar a consulta muito mais eficiente, porque agora você tem uma tabela de pesquisa rápida. Então, em vez de ter que pesquisar através de todo o banco de dados e encontrar todos os registros, você pode basicamente referenciar esta tabela de pesquisa e ele irá dizer-lhe quais registros você deseja. Portanto, a indexação geralmente é feita nas colunas que são muitas vezes usadas para filtragem. E isso pode tornar as consultas muito mais eficientes. Agora você ainda pode fazer todas as coisas normais sem filtrar as colunas de índice. E a próxima coisa é apenas outra maneira de os designers de banco de dados tornarem a consulta das tabelas ainda mais eficiente. E assim geralmente vai ser que as colunas que são muitas vezes usadas para filtragem vão ser índice. E isso vai tornar as consultas muito mais eficientes. Então, se você souber quais das colunas são indexadas, então, quando você quiser fazer sua filtragem, é melhor começar a filtrar por essas colunas. E então, dessa forma, nas consultas subsequentes que você está fazendo, você já precisará passar por muitos menos registros porque você já reduziu o tamanho da tabela executando a filtragem. E assim a indexação, assim como o particionamento, é algo que só pode nos afetar positivamente basicamente como a consulta ou porque não precisamos usá-los. Mas se usarmos índices e partições de tabelas corretamente, então ele também pode realmente melhorar o desempenho de nossas consultas. Agora, outra coisa que você também pode estar ouvindo sobre como uma mesa de relações. Portanto, existem diferentes maneiras que as tabelas podem ser relacionadas a outras tabelas. Uma dessas maneiras como uma relação um-para-um. Agora, uma relação um-para-um significa que um registro em uma tabela corresponde a um registro em outra tabela, mas ele tem que corresponder a apenas 11 registro em que outra tabela tem que corresponder a apenas um registro na tabela original. Então você tem duas tabelas se elas estão relacionadas por um relacionamento um-para-um do que uma linha em cada tabela corresponde a uma e apenas uma linha na outra tabela. Em seguida, temos uma relação um-para-muitos. Um um-para-muitos significa que uma linha em uma tabela corresponde a muitas linhas ou várias linhas pelo menos. E outra mesa. E várias linhas nessa outra tabela podem corresponder a apenas uma linha na tabela original. Assim, por exemplo, ou userinfo e nosso log de eventos estão relacionados por um relacionamento um-para-muitos, uma linha e nosso UserInfo pode corresponder a muitas linhas e ao log de eventos, uma vez que o usuário pode fazer vários eventos. Assim, podemos ter vários registros que todos têm o mesmo ID de usuário. Mas cada um desses registros faz referência apenas a uma linha ou a um registro em nossa tabela userinfo. E as informações do evento e o log de eventos têm o mesmo relacionamento. Finalmente, também podemos ter uma relação muitos-para-muitos, o que significa que vários registros em uma tabela podem corresponder a um registro em outra tabela. E vários registros nessa outra tabela podem corresponder a um registro na tabela original. 3. Tipos e programas de dados: Tudo bem Agora que entendemos um pouco mais sobre bancos de dados relacionais e como eles são construídos, como funcionam e como geralmente se parecem Nesta lição, quero abordar os tipos de dados e esquemas. Agora, vamos começar falando primeiro sobre os tipos de dados. Vou usar uma das tabelas que tínhamos aqui em nossa lição anterior, para que tenhamos essa coisa visual à qual nos referir. Se entrarmos nessa tabela e observarmos apenas alguns dos valores, podemos ver que existem diferentes tipos de dados representados aqui. Por exemplo, a coluna ID parece conter números inteiros ou pelo menos números A coluna de nome parece conter texto, a junção parece conter informações de data ou alguma outra hora e, em seguida, o e-mail é novamente texto. Quando definimos uma tabela, em vez de permitir que cada coluna tenha o valor desejado, pode fazer muito sentido definir o tipo de dados que esperamos ver em cada coluna Agora, isso é útil porque, de uma perspectiva externa, você pode ver rapidamente qual tipo de dados deve estar em cada coluna e o que você espera ver lá Também é bom porque tipos de dados diferentes exigem quantidades diferentes de armazenamento. Você pode otimizar o armazenamento escolhendo o tipo de dados apropriado para não bloquear o espaço de armazenamento desnecessário que não precisa ser usado. Isso também pode ajudar muito em coisas como desempenho, porque se você estiver usando os tipos de dados corretos, na verdade, na maioria dos casos, as consultas serão executadas mais rapidamente do que se você estiver usando apenas um tipo geral para tudo, porque as operações estão muito mais bem definidas para o que exatamente você está tentando fazer E também é bom porque, quando você quiser inserir novos dados ou quando estiver examinando a tabela e quiser extrair dados dela, saiba o que esperar. Se houver alguma incompatibilidade, você poderá comparar isso rapidamente ou receberá uma mensagem do banco de dados dizendo você tentou inserir texto aqui, por exemplo, mas esse campo exige um número inteiro ou esse campo espera ter uma data ou hora ou algo parecido Dessa forma, seus bancos provavelmente permanecerão mais consistentes e menos propensos a erros, pois é necessária essa verificação de validação para garantir que o que está acontecendo seja do tipo apropriado. É claro que você pode ver diferentes vantagens, tanto do ponto de vista do usuário quanto tanto do ponto de vista do usuário banco de próprio banco de dados e do ponto de vista da eficiência, tanto em termos de memória quanto em termos de desempenho e velocidade de nossas consultas Vamos dar uma olhada em alguns dos tipos de dados que estão disponíveis para nós, começando com os tipos de dados numéricos Um dos mais comuns que você verá é um número inteiro Também existem diferentes variações de um número inteiro. Você pode ter um número inteiro pequeno ou pequeno e uma extremidade grande um número inteiro grande A diferença aqui é a quantidade de espaço que ele aloca para cada Você pode ver no caso inteiro, temos quatro bytes na extremidade menor, temos dois bytes na extremidade grande, temos oito bytes Podemos ver aqui que já podemos fazer escolhas que afetarão o desempenho. Por exemplo, se tivermos um banco de dados que está pontuando as pontuações dos testes, faria sentido usar um número inteiro pequeno porque pontuações dos testes, mas provavelmente, não podem ultrapassar 100 Por outro lado, se você quiser armazenar grandes quantidades de números grandes , pode fazer sentido usar números inteiros grandes Caso contrário, seus números serão cortados em algum momento e você não poderá aumentar. Dependendo do que você espera dos dados, você pode realmente fazer as escolhas apropriadas para garantir que não esteja usando memória extra desnecessariamente Depois, é claro, também existem outros tipos. Há outro chamado numérico ou outra variação disso seria decimal Isso significa apenas que temos a precisão que queremos. Esse tipo de dados não tem um número definido de bytes alocados e está variando Obviamente, isso o torna muito mais flexível do ponto de vista do usuário, mas também um pouco menos eficiente do ponto de vista do banco de dados, pois ele não pode alocar quantidades específicas de dados para cada tipo de dados ou para cada valor que entrará em cada registro Agora, também temos algo chamado precisão real e dupla. Ambos são usados para armazenar números decimais. Mas o real pode ir até cinco casas decimais, enquanto a precisão dupla pode ir até 15 casas decimais Novamente, dependendo de quanta precisão você precisa, você pode usar o real se depois de cinco casas decimais, isso realmente não importar mais, ou se você realmente se importa com essas casas decimais extras, pode usar a precisão dupla, por exemplo, para garantir que você mantenha todas essas informações pode usar a precisão dupla, por exemplo, para garantir que você mantenha todas Então, outro tipo de dados numéricos que podemos definir é chamado de cereal Novamente, aqui temos a opção de usar cereais pequenos ou grandes ou apenas cereais normais O que é cereal, é um incremento automático. Isso é muito bom se quisermos ter uma coluna adicional para uma chave primária, mas essa coluna não está definida especificamente. Seria apenas um contador de números que está aumentando. O serial, na verdade, é incrementado automaticamente. Por exemplo, se quisermos ter uma chave primária que apenas acompanhe o número da linha ou algum identificador exclusivo , podemos atribuir a ela o tipo serial porque ela será incrementada automaticamente e, na verdade, não precisamos passar nenhum valor adicional para ela Isso apenas garantirá que continue incrementando relação ao valor anterior que tinha Também pode ter opções, é claro, entre o cereal pequeno e o cereal grande versus apenas o cereal normal Novamente, dependendo da quantidade de dados que esperamos ter em nosso banco Agora, a próxima categoria de tipo de dados são dados de tipo de texto. Há um tipo de dados chamado texto, que é semelhante ao tipo de dados numéricos ou decimais que tínhamos antes, que permite apenas quantidades variáveis de Não é um valor fixo, mas pode variar novamente com base na entrada. Mas também temos opções para ter, por exemplo, char ou character, e então definimos quantos bytes queremos alocar para ele O que isso faz é se dissermos, por exemplo, char 25, isso significa que vamos alocar 25 bytes para cada registro dessa coluna Se não aumentarmos para 25 bytes, teremos um pouco de preenchimento e, caso contrário, seremos cortados em 25 Novamente, podemos definir restrições de tamanho de dados com base no que esperamos. Então, também temos a opção de usar um var char ou um caractere variável, que significa que podemos usar tantos tipos Novamente, para tudo isso, podemos armazenar dados de texto, mas a quantidade de memória que estamos usando para cada registro que estamos inserindo ou para cada valor no registro em uma coluna específica que estamos inserindo variará dependendo do tipo de dados que escolhermos aqui Agora, existem alguns tipos de dados adicionais específicos para data e hora. Temos opções de carimbo de data/hora, que serão apenas carimbos de data/hora, mas também temos um carimbo de data/hora TZ e, na verdade, também os temos em outros lugares, onde podemos carregar informações onde podemos Nós escolhemos usar o carimbo de data/hora com o fuso horário? Isso também aumentará novamente a quantidade de armazenamento de que precisamos para cada elemento. Então, podemos ter um tipo de dados de data, que é menor do que o timestamp, porque agora só precisamos nos preocupar com a data e não com informações extras sobre as horas, os minutos ou segundos ou mesmo milissegundos mesmo milissegundos se isso for algo que estamos A data, por outro lado, depende de quanta precisão queremos em nossas informações de tempo. Estamos lidando com datas e a precisão das datas é suficiente ou precisamos de registros de data e hora específicos, por exemplo Sábio, também podemos lidar com o tempo, que é novamente uma forma de armazenar a data, mas, além da data, também podemos armazenar a hora. Aqui, novamente, temos a opção de usar também o fuso horário. Mas se usarmos o fuso horário, novamente precisaremos mais armazenamento de dados porque, novamente, precisamos armazenar essas informações extras de fuso horário. Agora, normalmente, se você não estiver usando o fuso horário, o fuso horário padrão a ser usado será o horário UTC Na maioria das vezes, para economizar armazenamento, você pode usar a hora ou o carimbo de data/hora sem um fuso horário e apenas garantir que todos os dados inseridos estejam no horário UTC Finalmente, há também outro tipo de dados interessante chamado intervalo, que, como o nome realmente sugere, representa intervalos entre horários diferentes Isso pode ser muito útil porque nos permite fazer cálculos com base no tempo. Por exemplo, relembrar uma semana ou avançar uma semana ou amanhã ou na última hora. O intervalo é outro tipo de dados, que é muito legal de usar. Como você verá quando chegarmos à seção diurna para escrever as consultas SQL Isso também pode ser muito bom nas consultas em si. Bem, existem alguns tipos de dados adicionais que temos. Um deles é um booleano. Esse é um tipo de dado muito pequeno, e tudo o que estamos armazenando aqui são informações sobre verdadeiro ou falso. Isso pode assumir apenas dois valores, dois ou falso. Temos o dinheiro, que pode ser usado como moeda, temos o byte A, que pode ser usado para armazenar cadeias de bytes Nós enumeramos, que é apenas um tipo de dados personalizado que podemos Onde podemos atribuir uma série de elementos ou uma série de objetos e podemos atribuir uma ordem a eles. Por exemplo, podemos usar enumerate para enumerar os diferentes meses do ano Dessa forma, poderemos comparar a ordenação dos meses Por exemplo, podemos dizer usando um tipo de dados de enumerador que abril vem Por outro lado, se apenas armazenássemos isso como informações de texto, não seríamos capazes de fazer isso. O enumerado é um tipo de dados personalizado ou definido pelo usuário que podemos criar, onde podemos dar uma ordem específica aos objetos Agora. Uma extensão disso seria então apenas tipos de dados gerais definidos pelo usuário , onde podemos realmente definir nossos próprios tipos de dados e, em seguida, usá-los em nossa própria tabela. Agora, à medida que o postgres se desenvolve ou, geralmente, à medida que os bancos de dados relacionais se desenvolvem, também são introduzidos outros tipos de dados personalizados também são introduzidos outros tipos de dados personalizados que podem não ser inicialmente naturais para o próprio sistema Alguns exemplos são, por exemplo, JS, XML, matrizes, pesquisas de texto, UUIDs, geométricos ou tipos de dados de rede Todos esses são basicamente tipos de dados de extensão que chegam porque pode tornar muito útil armazenar esse tipo de dados, pois está se tornando mais comum que esses tipos de dados apareçam. Poder colocar isso em uma tabela em um banco de dados relacional pode ser muito bom Mas, novamente, esses são tipos de dados personalizados que são extensões. o passar do tempo, é provável que também haja mais tipos de dados personalizados disponíveis para uso. Dependendo também do que a situação exige. Como você pode ver, há uma grande variedade de tipos de dados que estão realmente disponíveis para nós. Mas, geralmente, os tipos de dados que você verá se concentrarão mais nos tipos de dados básicos. Saber quais tipos de dados estão disponíveis e também o que eles representam pode ser muito bom, porque quando você está examinando e tentando entender uma tabela, você simplesmente reconhece isso. Além disso, se precisar tomar uma decisão sobre a criação de uma nova tabela, entenderá quais opções estão disponíveis para você e talvez até mesmo consiga pensar em uma um pouco sobre como posso otimizar a eficiência certificando-me de usar o tipo de dados correto e também alocando a quantidade certa de armazenamento de dados para eles Agora, a outra coisa sobre a qual quero falar são os esquemas Agora, em geral, quando você se refere a esquemas, isso geralmente significa que temos um esquema que representa uma coleção de tabelas, bem como informações sobre cada uma das Mas também é comum usar a palavra esquema para definir as propriedades e estruturas de uma tabela em si Por exemplo, vamos ver essa consulta realmente SQL no canto inferior esquerdo, mas não se preocupe muito com a consulta. Vamos dar uma olhada nos elementos internos. O que podemos ver aqui é que temos um ID, que é um tipo inteiro que também pode ser abreviado para t. Podemos ver que é a chave primária e que também não é permitido assumir O que estamos fazendo aqui é definir nossa tabela de informações do usuário no lado direito. Podemos ver aqui que nossa tabela de ID está atualmente definida para transportar tipos de dados inteiros Ela também é definida como a chave primária e também não é permitido carregar valores nulos A próxima coluna que teremos será o nome. Aqui, decidimos usar o tipo de dados Varchar, que significa que, nesse caso, atribuímos 25 bytes a ele, que significa que assumimos que nossos nomes não serão maiores que 25 porque essa é a quantidade de armazenamento que alocamos para cada elemento que vamos colocar em Juntado aqui, haverá um tipo de dados de data, porque se olharmos para a coluna, na verdade estamos apenas armazenando informações de data, não estamos armazenando informações de hora adicionais. Para tornar o armazenamento um pouco mais eficiente, não precisamos armazenar nenhuma informação adicional sobre a hora, apenas sobre a data. Se quisermos armazenar informações adicionais sobre a hora, é claro, não temos permissão para usar o tipo de dados de data porque isso não conteria informações suficientes. Finalmente, temos o campo de e-mail. Aqui, decidimos usar o tipo de dados de texto porque os e-mails podem ter links muito variados Também é importante garantir que os usuários tenham e-mails. Se um usuário se inscrever com um e-mail e tiver um e-mail muito longo ou muito curto, é difícil prever por quanto tempo os usuários podem enviar é difícil prever por quanto seus e-mails Agora podemos fazer algumas suposições sobre isso. Mas é claro que não queremos que um usuário insira seu e-mail. Em seguida, nosso banco de dados diz que não temos armazenamento suficiente alocado para armazenar o e-mail completo Então, aqui, decidimos usar o tipo de dados de texto, mas você também pode tomar essa decisão mais fundamentada Se você já tem dados sobre vários usuários e vários e-mails, pode ver o tamanho desses e-mails pode ver o tamanho e, em seguida, talvez deixar algum espaço extra para usar algo como um tipo de dados varchar usar algo como um tipo de dados varchar O que você pode ver no canto inferior esquerdo aqui é basicamente a definição do esquema da nossa tabela Pode ver o que é cada coluna e que tipo de dados ela carrega. Podemos ver aqui, a partir dessa consulta, apenas informações sobre nossa tabela em si. Sabemos que tem quatro colunas, o ID, o nome, a junção no e-mail e também sabemos o tipo de dados de cada coluna, que significa que também sabemos quais valores esperar de cada coluna e, se quisermos inserir valores, quais valores devem ser colocados em cada coluna. Dê uma olhada em outra tabela, especificamente nossa tabela de registro de eventos. Aqui, um esquema será um pouco diferente e temos a chave do evento, que aqui será um tipo de dados serial porque a chave do evento só aumentará a cada Se esperamos muitos dados porque temos uma plataforma muito grande, talvez até queiramos usar o grande serial aqui. A chave de ventilação será a chave primária. Novamente, não é permitido ser nulo. Em seguida, teremos a coluna ID do evento, que será um número inteiro Você pode ver aqui, também comparando com a coluna de ID do usuário abaixo, que podemos usar tanto em quanto em número inteiro É apenas uma abreviatura para número inteiro. Novamente, estamos dizendo que o ID do evento não pode ser nulo Então temos a hora, que neste caso é na verdade um registro de data e hora Podemos ver aqui que temos informações de hora, mas esse é um formato semelhante ao timestamp, então queremos ter certeza de que usamos o tipo e, em seguida, temos o ID do usuário, que novamente será um número inteiro Novamente, vamos dizer que não é permitido ser nulo. Agora, aqui o que também estamos fazendo é definir nossas duas chaves estrangeiras, já que nosso registro de eventos tem duas chaves estrangeiras. Podemos ver o ID do usuário em nosso registro de eventos, referenciando a coluna ID na tabela de informações do usuário. Podemos ver novamente, apenas a partir do link aqui. Em nossa tabela de informações do evento, temos o ID do evento na tabela de registro de eventos, faz referência à coluna ID nas informações do evento. Assim, podemos ver na consulta no canto inferior esquerdo, mas também na definição do esquema de nossa tabela, entendemos que nossa tabela de registro de eventos, novamente, tem quatro colunas, a chave do evento, a ID do evento, a hora e a ID do usuário Também sabemos o tipo de dados de cada um. Sabemos qual é a chave primária e também entendemos os links de chave externa para nossa coluna de ID de usuário, bem como o ID do evento e quais colunas fazem referência nas outras tabelas. Então, sim, é assim que podemos definir os esquemas das tabelas individuais Mas isso também ocorre se você estiver lendo as informações sobre uma nova tabela que talvez seja apenas alguém além da nova tabela que você pode usar, você pode examinar a definição do esquema da tabela para entender quais colunas estão disponíveis, mas também quais tipos de dados e como eles são armazenados, bem como quais referências existem Novamente, não se preocupe muito com a consulta, pois é isso que aprenderemos em breve. Esteja ciente de que é assim que podemos definir os esquemas de nossas tabelas, e isso também é o que as definições de esquema de nossas tabelas significam, para que possamos definir adequadamente nossa tabela como um todo, bem como os tipos de dados atribuídos corretamente, o que pode ser ótimo para o próprio banco de dados, para garantir que ele também faça armazenamento eficiente de memória e isso também é o que as definições de esquema de nossas tabelas significam, para que possamos definir adequadamente nossa tabela como um todo, bem como os tipos de dados atribuídos corretamente, o que pode ser ótimo para o próprio banco de dados, para garantir que ele também faça um armazenamento eficiente de memória. como tornar as consultas mais eficientes Mas também é ótimo do ponto de vista do usuário porque entendemos quais dados devem entrar, quais dados podemos esperar, bem como quais links podem existir entre tabelas diferentes e como essas tabelas são vinculadas. 4. [Maca a configuração a servidor de a PG local local: Agora vamos começar a ver como podemos fazer o PostGress rodar em nossa máquina para que possamos realmente começar a usá-lo Agora, se você estiver em uma empresa ou algo assim, é muito provável que seu banco de dados esteja on-line em algum lugar, então você terá detalhes da conexão. Mas aqui vamos aprender como podemos configurar um servidor local para nos conectarmos aos bancos de dados, para que possamos simplesmente acompanhar e manter tudo em nossa máquina local. Então, se você estiver trabalhando com um banco de dados diferente, tudo o que você precisará alterar são apenas as conexões que veremos nos vídeos a seguir. Não há muito mais do que isso, dependendo do banco de dados que você vai usar, você precisará se conectar a uma fonte diferente. Mas agora vamos ver como podemos realmente fazer isso funcionar em nossa máquina local. Vamos acessar postreql.org. Então, quando estivermos aqui, clicaremos no botão de download aqui para ir para a seção de download. Agora, dependendo do seu sistema operacional, você deve ter certeza de escolher o pacote certo para isso. Estou no Mac, então vou clicar no macOS. E então vou rolar até aqui até o aplicativo PostGress Este é um aplicativo interativo visual muito bom e fácil de usar que podemos usar. Vou clicar aqui, o que me levará a esta página. Em seguida, vou para downloads e, em seguida, basta clicar no botão de download aqui, e isso iniciará o download, que você poderá usar para obter o arquivo necessário para realizar a instalação. Quando o download terminar, vou abrir o arquivo resultante. E então eu vou pegar esse ícone de postar grama e, bem, os padrões do Mac o arrastam para o aplicativo. Depois de terminar de copiar, também posso abrir minha pasta de aplicativos e podemos ver aqui que ela acabou de ser instalada. Então, para abri-lo, tudo o que preciso fazer é clicar duas vezes aqui. Em seguida, abrirá o postgress para nós, que podemos usar para hospedar nosso servidor local Clique em abrir aqui também. Se esta é a primeira vez que você o abre , então vamos lá. Essa é a aparência do seu cliente visual. Você também terá um pequeno ícone que vem com ele aqui. Então, se quisermos iniciar um servidor local, basta começar aqui, e então você pode ver que agora temos um servidor em execução. Por padrão, você terá apenas três bancos de dados em sua máquina, um com o nome do computador que você configurou, um chamado Postscri e outro chamado template one Esses são três bancos de dados diferentes que estão configurados para nós em nossa máquina agora, que podemos acessar. O importante é garantir que , se estivermos usando um desses bancos de dados, nosso servidor aqui esteja realmente funcionando. Porque se clicarmos em parar , não poderemos mais nos conectar a ele. Se você estiver tendo problemas de conexão, certifique-se de verificar se servidor está realmente em execução e se o nome do banco de dados que você também está usando está correto. Então, o próximo vídeo mostra como podemos nos conectar a esses bancos de dados. Agora, você também pode gerenciar isso no ícone aqui em cima. Você pode ver que também podemos simplesmente parar ou servir aqui. Se quisermos, também podemos citá-lo totalmente na barra de menu, bem como apenas citá-lo em nosso aplicativo Mas sim, recomendo que você deixe isso ligado durante o curso, apenas para ter certeza de que sempre terá acesso ao banco de dados. 5. [Windows] OS Postgres locais Server: Agora vamos dar uma olhada em como podemos instalar nosso servidor Post Gress no Windows. Novamente, vamos para o postgres ou aqui. Em seguida, vamos para a guia de downloads, que atualmente podemos acessar aqui ou simplesmente clicando no botão aqui. Em seguida, vamos clicar no Windows aqui. Então, aqui em cima, vamos baixar o instalador, que será para a versão 12, que é o que queremos aqui. vamos baixar o instalador do Windows Atualmente, vamos baixar o instalador do Windows para a versão 12. Em seguida, basta salvar isso e deixar o download. Agora, depois de fazer o download, você vai querer abri-lo. Vou executá-lo aqui como administrador, e então você dirá, aqui. Então, quando nosso instalador estiver aberto, podemos ir até ele, e vamos fazer a configuração aqui, então vamos clicar em Avançar. Escolha onde instalá-lo. Vamos deixar tudo marcado aqui, clique em Avançar Novamente, basta deixar tudo na posição padrão. Agora precisamos fornecer um banco de dados, uma senha para nosso banco de dados, e é importante que você se lembre disso. Podemos ver aqui que nosso usuário publicará. Vou usar a senha postgres para ambos Mas é claro que você pode configurá-lo para o que quiser. Mas vou fazer com que minha senha aqui seja igual ao nome de usuário, apenas para simplificar, já que qualquer forma, isso é uma coisa local. Em seguida, vá em frente e clique em Avançar. Deixe a porta padrão aqui como 5432 e clique em Avançar Novamente, vou deixar esse como padrão aqui e clicar em Avançar e depois em Avançar aqui e, em seguida, iniciar o processo de instalação. A configuração está concluída e você chegará à tela de conclusão. Ele perguntará se você deseja apenas iniciar o Stack Builder agora Você não precisa. Você pode pegar isso. Se você deixou de marcar e clicar em Concluir como reação, você também pode simplesmente clicar em cancelar ou fechar no próximo aplicativo do Stack Builder que abrir Não precisamos usar isso. Você pode simplesmente clicar em Concluir aqui. Agora, para entrar em nosso painel de administração, vamos entrar em nossa função de pesquisa. Vamos procurar por PG Admin. Aqui temos o formulário de administração do PG. Abra isso. Depois de aberto, ele será aberto em um navegador, como podemos ver aqui. Agora, eu ia pedir que definíssemos uma senha mestra para o post Cris Administrador. Vou apenas definir uma senha aqui. Isso não precisa ser o mesmo que você definiu durante a instalação, mas anote as duas senhas usadas aqui. Então você pode clicar em OK. Então, podemos ir, por exemplo, para o navegador. Agora, se quisermos dar uma olhada no servidor postgress, que foi o que fizemos durante a instalação do postgress Agora, precisaremos usar a senha que definimos durante o processo de instalação, não a senha mestra que acabamos de criar aqui, mas a senha ou a senha que usamos durante a instalação. Lembre-se de que usei a senha postgress aqui, pois estamos nos conectando com o usuário postgres Vou inserir aqui a senha que defini durante o processo de instalação que fizemos ou pelo qual passamos alguns minutos atrás, clique em OK. E então podemos ver aqui, agora eu tenho basicamente acesso ao banco de dados post Postgres no servidor Você também pode ver que, ao entrar na guia aqui, temos essa opção também, onde podemos, por exemplo, se você quiser abri-la em uma nova janela, que é o que temos aqui. Mas também é assim que você pode colocá-lo em sua barra de tarefas, e aqui temos o banco de dados, que também é o que exploraremos um pouco mais tarde. Em casos posteriores, quando também quisermos nos conectar ao nosso banco de dados Postgres ou ao servidor Postgres local que temos, certifique-se de usar o mesmo nome de usuário e senha que você definiu Veremos mais tarde, quando analisarmos o Data Grip, por exemplo, no caso do MAC, que na verdade não precisamos definir ou fornecer um nome de usuário e senha porque não definimos um No caso do Windows, novamente, para o exemplo de captura de dados que veremos em breve Certifique-se de usar o usuário Postcres como fizemos aqui para se conectar ao servidor e, em seguida, certifique-se de usar a senha que você definiu durante o processo de instalação, não a senha que você definiu como senha mestra aqui, mas a senha que você definiu durante o processo de instalação, que é a mesma que também inserimos aqui quando fomos solicitados quando tentamos vá para o servidor. Novamente, o nome de usuário será Postcre e, em seguida, a senha será aquela que você definiu durante o processo de instalação 6. Configuração no [Mac] Postico: Neste vídeo, vamos aprender como podemos realmente nos conectar ao nosso banco de dados e começar a escrever consultas SQL nele Se você estiver em um Mac, há uma interface interessante que você pode usar para se conectar chamada postco Esta é apenas a página de download que estávamos na última vez. Se você estiver na guia de introdução e rolar para baixo, poderá ver aqui um link para postco Eu já o abri em uma nova guia aqui. Depois, você pode simplesmente fazer o download e deixá-lo parar localmente. Então, se você quiser abri-lo, podemos ir aqui e é isso que você vai ver. Atualmente, não temos ou não estamos conectados a nenhum banco de dados. Mas vamos dar uma olhada na configuração. Isso será o mesmo dependendo das outras plataformas que também analisaremos. Mas vamos passar por isso aqui também. Podemos dar um apelido ao nosso banco de dados. Isso é só para entendermos o que estamos vendo. Aqui podemos dizer, por exemplo, meu primeiro banco de dados ou se você quiser dar a ele um nome mais específico, claro, você pode hospedar é claro, você pode hospedar aqui que será nosso host local. Queremos manter isso. Nossa porta será a porta 5432 É importante que também mantenhamos isso. Se também voltarmos para o postcras, isso também será executado na porta É importante que nos certifiquemos de manter o mesmo. Usuário, também podemos manter o mesmo. Não há necessidade de senha porque a estamos executando em um host local. O banco de dados que podemos conectar ao padrão será apenas o nome do usuário, que temos aqui. Se formos ao nosso postgres, também podemos ver que esse banco Mas também podemos ver que temos opções diferentes, por exemplo, a do Postgres aqui, bem como a do modelo Você pode se conectar a qualquer um deles. Vou me conectar ao modelo um. Se você não colocar nada aqui, só vai usar os valores padrão que tem aqui. Quando estivermos prontos, basta clicar em Concluído. Agora que temos a configuração da conexão do banco de dados, podemos simplesmente clicar em Conectar aqui e, em seguida abriremos essa nova janela para nós, onde podemos ver, podemos acessar a consulta SQL do editor e aqui podemos escrever nossas consultas Também podemos ver pela barra de menu aqui em cima, com qual banco de dados estamos conectados. No momento, podemos ver que estamos conectados ao modelo um. Mas se clicarmos em segundo plano no meu primeiro banco de dados, que é o apelido que demos ao nosso banco de dados, vemos que o servidor ao qual estamos conectados na verdade tem três bancos Se quisermos, também podemos nos conectar aos diferentes. Podemos ver aqui agora que estamos no meu banco de dados de nomes de usuário, ou podemos sair e entrar no modelo um ou podemos sair e entrar no banco de dados Postgres Você pode ver que, para cada um deles, também podemos abrir o editor de consultas e dependendo do banco de dados em que estamos. Bem, essa será a pessoa com a qual estamos conectados e para a qual escreveremos consultas. Se quisermos criar um novo banco de dados em seu servidor ou em nosso servidor, também podemos fazer isso clicando no botão do banco de dados aqui e, em seguida, podemos dar um nome ao nosso banco de dados, se quisermos, ou excluí-lo, basta clicar em Excluir aqui e, em seguida, digitar soltar banco de dados e isso excluirá esse banco de dados. Se quisermos voltar para a opção em que realmente o conectamos a esse banco de dados, podemos entrar no arquivo, mostrar a janela de favoritos e, em seguida, teremos a janela original em que nos conectamos à nossa sala de banco de dados. Deseja configurar qualquer conexão adicional e, em seguida, criar um novo favorito. Recomendamos que você se desconecte primeiro desta Atualmente, estamos no teste gratuito. Se você quiser criar novas conexões aqui, você pode criar um novo favorito e, em seguida, tudo bem, então você pode configurar opções de conexão adicionais. Você pode ter um, por exemplo, seu lado local com o qual queira brincar. Se você tiver um no trabalho ou em outro lugar, também poderá se conectar a eles aqui. Como você pode ver, quando estamos baixando o postco, você usa, por padrão, a versão de teste A versão de teste é gratuita, por tempo indeterminado. Ele só tem um número reduzido de recursos. Mas, para qualquer intenção e propósito , servirá muito bem Mas é claro que, se você quiser ativar, é claro que pode. Mas certifique-se de conferir todas as diferenças ou, pelo menos , conferir também o outro vídeo. Vou falar sobre um controle de dados, apenas para que você veja as diferentes interfaces de usuário com as quais você pode lidar ou os diferentes serviços conexão ou aplicativos de conexão que você pode usar para decidir qual é a melhor para você, qual você mais gosta Então eu recomendo ficar com aquele que você mais gosta e com o qual se sente mais confortável. Sim, 7. Configuração no Datagrip: Agora, a próxima ferramenta que vou mostrar para você se conectar a bancos e fazer todas essas coisas legais com a escrita de consultas e tudo mais será uma captura de dados da Jet Brains Esse também é o que vamos usar ao longo do curso. Você pode obter isso acessando jet brain.com, depois em Ferramentas e aqui em Data Grip Com o data grip, você terá um teste gratuito de 30 dias problema em fazer o curso, além de realizar algumas práticas adicionais Mas se você gostar, então ele tem uma versão paga. Existem, como também vimos com a postco ou também com outros GYs. Obviamente, existem outros gratuitos que você pode usar, dependendo do quanto você gosta ou, se já brincou com outros, você pode optar por usar o Data Grip ou, é claro, também escolher qualquer outro sistema No final das contas, isso realmente não importa. Tudo isso vai se conectar aos nossos bancos de dados e outras coisas. É exatamente aquele com o qual você se sinta mais confortável. Então, vamos começar com um teste gratuito de 30 dias. Se você quiser seguir o curso com exatidão , é claro que você pode obter informações aqui Então, quando seu teste expirar, você pode decidir se deseja continuar com o data grip ou se deseja usar um IG diferente que tenha serviços gratuitos, por exemplo, o código postal que vimos oferece um teste gratuito vitalício, e aí você pode continuar a usá-lo gratuitamente Isso depende totalmente de você. Mas vá em frente e baixe o data grip. Feito isso, basta seguir a configuração e abri-la. Agora, depois de baixar uma alça de dados aberta, ela será exibida quando você a abrir, caso não tenha essa janela aqui na barra lateral Você pode obter isso facilmente acessando a visualização, depois as janelas de ferramentas e clicando no banco de dados aqui. Em seguida, basta abrir ou fechar a janela do lado esquerdo. Para me conectar a um banco de dados aqui, basta clicar com o botão direito do mouse na nova fonte de dados. Vou selecionar postgress QL aqui. Isso nos permitirá configurar uma fonte de dados Postgres Vou clicar nisso, e isso abrirá essa janela de conexão aqui. Se você não vê postgress quando me deixa fechar isso novamente. Se você não vê postgress aqui em cima , é provável que seja aqui embaixo Depois de selecioná-los antes, eles serão movidos para você aqui para que você tenha acesso mais fácil. Provavelmente não estará aqui para você se você nunca usou um grupo de dados antes Nesse caso, estaria aqui em algum lugar. De qualquer forma, vá em frente e abra isso, e isso nos dará nossa janela de conexão postgress Aqui, novamente, podemos dar um apelido. Então, podemos ter nossas opções de conexão. Nosso anfitrião ainda será o anfitrião local. Nossa porta ainda será a porta 5432. Não precisamos de um nome de usuário ou senha para coletar no banco de dados local. Então, no banco de dados ao qual queremos nos conectar, podemos escolher entre, é claro, o Postgress novamente. Ou, se simplesmente abrirmos nosso aplicativo Postgress, também temos, é claro, Temple one, bem como o nome de usuário de qualquer computador que você esteja usando Em seguida, podemos clicar em OK. E isso vai nos conectar a um banco de dados, e podemos ver aqui que também temos um console com ele onde podemos realmente escrever nossas consultas SQL Se quisermos, também podemos explorar banco de dados abrindo-o e, em seguida, podemos ver a estrutura aqui. Já existe um banco de dados configurado nele por padrão. Mas ainda não há mesas nela. Aprenderemos mais sobre isso um pouco mais tarde, quando abordarmos tudo isso. Mas é assim que podemos nos conectar ao banco de dados Postgres usando o grupo de dados Caso você acidentalmente feche seu console aqui, basta reabri-lo facilmente clicando com o botão direito do mouse aqui e, em seguida, abrir o console de consulta Agora, algo tão interessante sobre o controle de dados é que podemos , na verdade, ter várias conexões de banco de dados abertas Por exemplo, vou adicionar outra nova fonte de dados aqui, e vou adicionar aqui outra fonte de dados postgres, e agora também vamos nos conectar ao modelo Nossas configurações aqui ainda dirão que o mesmo que ainda estará no host local ainda estará na porta. Nosso apelido aqui será preenchido com meu padrão, e então eu posso clicar Agora podemos ver que estamos nos conectando a outro banco de dados aqui em nosso sistema local, que é esse. Aqui. Aqui também podemos ver que também podemos entrar aqui e explorá-la. O banco de dados Postgres, por padrão, na verdade tem mais algumas coisas configuradas nele Mas, novamente, aprenderemos mais sobre isso quando entrarmos na consulta. Isso é apenas mais para garantir que tenhamos a configuração correta. Você também pode ver aqui que agora eu tenho dois consoles. Um que esteja conectado ao nosso postgres. Novamente, esse será nosso apelido. O outro que é para o banco de dados modelo 1. Obviamente, se você fechar um ou qualquer um desses ou todos eles, basta voltar aqui, clicar com o botão direito do mouse em abrir console de consulta e também aqui podemos abrir o console de consulta. Você só quer ter certeza de que seja qual for o console de consulta que estiver usando, você quer ter certeza de que é para o banco de dados certo caso tenha vários bancos Parece que a guia da barra aqui está ficando muito cheia Você também pode simplesmente clicar no banco de dados novamente, clicar com o botão direito do mouse e remover, então isso removerá a configuração do banco de dados. Uma coisa a observar sobre isso é que a configuração também desapareceu. Se você quiser se reconectar a ela, precisará seguir as etapas novamente da nova fonte de dados e, em seguida, conectar-se à fonte de dados e inserir os detalhes da configuração Mas se você quiser removê-lo, é assim que você pode fazer isso. 8. Conexão de CLI: Agora, a outra opção que você pode escolher e que às vezes pode escolher é usar a interface da linha de comando. Isso significa apenas usar o terminal ou algo parecido para se conectar. Às vezes, você pode querer usar isso. Embora, pessoalmente, eu prefira as interfaces gráficas. Outras vezes, você pode ser forçado a fazer isso. Se você estiver, por exemplo, conectado a uma máquina remota e precisar trabalhar no banco de dados de lá, a única opção que você tem é usar uma interface de linha de comando. De qualquer forma, você também pode usar a interface de linha de comando. Para nós, conectar-se a ele será fácil porque temos nosso servidor Postgres Podemos simplesmente conectar ou clicar duas vezes em um deles, e então isso abrirá a conexão em um terminal aqui, e então podemos escrever apenas nossos comandos SQL aqui. Essas são as diferentes opções que estão disponíveis para nós. Neste curso, abordaremos o controle de dados. Mas é claro que você pode escolher o que quiser. Obviamente, você também pode alternar entre os diferentes aplicativos. No final das contas, não vai importar muito qual deles você escolher porque todos fornecem o mesmo meio para atingir um fim, que é conectar-se ao nosso banco de dados e nos permitir escrever nossas consultas Qualquer um com o qual você se sinta mais confortável é aquele com o qual você deve escolher, porque no final do dia, todos eles basicamente nos permitirão fazer a mesma coisa 9. Como criar e cair dados: Agora que sabemos como se conectar a uma fonte de dados. Vamos continuar e aprender como podemos criar um banco de dados dentro da nossa fonte de dados. Vou me conectar ao modelo, só porque não há bancos de dados nem nada dentro daqui, está completamente vazio. Eu recomendo que você faça o mesmo apenas para ter uma fonte de dados completamente nova. Para você, pode até ser possível que, ao clicar nessa seta suspensa, você não veja nada, porque geralmente essas pastas são criadas apenas se você criar e depois remover um banco de dados. Para você, se você fizer o menu suspenso, é possível que nada realmente caia. Agora, caso você esteja na configuração aqui, por exemplo, está informando que o banco não foi encontrado ou que você não pode se conectar a ele. Por exemplo, se eu tentar me conectar ao modelo dois aqui. Antes de realmente me inscrever, também posso testar a conexão. Se eu tentar isso, não vai funcionar porque o banco de dados não existe. Nesse caso, se você quiser se conectar a um banco de dados diferente, mas uma opção, é claro, é sempre conectar-se ao PoCs, que sempre deve ser incluído e criado em cada sistema Os outros geralmente serão criados em outros sistemas, mas pode haver casos diferentes de sistema para sistema em que o banco de dados pode não ser criado por padrão. Para fazer isso, podemos simplesmente nos conectar ao postcras, por exemplo, então podemos usar isso diretamente ou acessar nosso console de consulta, e isso também é o que aprenderemos na próxima lição: escreveremos aprenderemos na próxima lição criar banco e criaremos, por exemplo, o modelo dois, se for esse ao qual queremos nos conectar Então, podemos executar isso e podemos ver aqui que ele estava apenas atualizando, e vamos voltar às nossas propriedades aqui. Agora, se tentarmos nos conectar ao modelo dois e testarmos nossa conexão. Vemos aqui que agora está funcionando corretamente. Isso ocorre porque, no vídeo, vou usar o banco de dados modelo 1, caso ele não exista para você, você pode fazer isso para criá-lo e depois se conectar a ele. Mas é claro que, como alternativa, você também pode usar o banco de dados Postgres padrão Mas vamos criar um banco de dados porque lembre-se, quando aprendemos sobre o modelo relacional, temos tabelas que estão dentro de um banco Antes de podermos criar tabelas, primeiro precisamos ter um banco de dados para colocar essas tabelas. Como podemos criar um banco de dados? Bem, aqui, vou abrir o console do Querin. Você notará que esse é o console da minha conexão de fonte de dados modelo 1, como você pode ver pelo nome aqui. Caso você tenha várias fontes de dados abertas, certifique-se de usar o console certo para a fonte de dados certa. Além disso, verifique se você está conectado usando o post grass para garantir que o servidor postgress local esteja em execução Se não estiver, certifique-se de clicar em Iniciar. Ok, então como podemos criar um banco de dados em nossa fonte de dados modelo one? Para fazer isso, vamos usar ou digitar em nosso console de consulta aqui, criar banco de dados e, em seguida, digitar aqui o nome do banco de dados, que preencheremos em um segundo. Então vamos terminar com um ponto e vírgula. Há algumas coisas importantes a serem observadas aqui sobre a estrutura geral de consultas SQL. Em primeiro lugar, todos os comandos SQL geralmente são capitalizados pelo usuário apenas para tornar a consulta mais legível Além disso, é comum finalizar os comandos SQL com ponto e vírgula Você não precisa fazer isso, mas isso indica que a consulta acabou e você pode realmente encadear várias consultas juntas. Sempre que terminar uma consulta, você pode colocar um ponto e vírgula aqui para dizer basicamente que essa consulta foi Vamos criar nosso banco de dados e chamá-lo de nosso banco de dados. Se rodarmos isso, veremos que temos um console aqui. Se entrarmos em bancos de dados, agora teremos nosso banco de dados criado. Esse é o nome do banco de dados que demos a ele. Podemos ver aqui que também temos algumas pastas extras que vêm com ele. Sim. É assim que podemos criar um banco de dados. E se quisermos remover um banco de dados. Bem, o que temos que fazer então é alterar a criação para soltar. Então, se executarmos isso, você notará que agora nosso banco de dados desapareceu. Podemos ver que ele foi removido da nossa fonte de dados. Para mostrar que a capitalização não é necessária e nem o ponto e vírgula Vamos continuar e repetir a mesma consulta que fizemos no início. Mas desta vez usar tudo em letras minúsculas, além de não usar o ponto e vírgula no final Se executarmos isso, e aqui está, podemos abrir nosso banco de dados novamente e tudo voltará ao que estava. Você pode ver que ainda pode escrever consultas SQL com tudo em minúsculas e sem ponto e vírgula No entanto, geralmente é uma boa prática manter o ponto e vírgula no final, bem como escrever todos os comandos SQL em letras maiúsculas Porque dessa forma, é muito mais fácil ler a consulta. É fácil distinguir o que faz parte de uma consulta SQL e o que talvez seja um nome que ocorre em uma tabela em nosso banco de dados que tem um nome semelhante ou idêntico a algo que você teria em uma consulta SQL. E, claro, também crie um segundo banco de dados. Vamos criar outro banco de dados aqui chamado nosso segundo banco de dados. Vamos usar alguns sublinhados aqui para tornar esse banco de dados mais legível ou esse nome mais Se prosseguirmos e executarmos isso , você verá aqui que agora temos dois bancos de dados e nosso modelo, uma fonte de dados. Você pode ver que podemos entrar em cada um deles, e cada um deles é um banco de dados separado. Obviamente, podemos removê-los novamente dessa forma e, em seguida, também podemos remover nosso primeiro banco de dados usando o nome apropriado. Então, novamente, chamando a instrução drop database. 10. Criação de regimes: Tudo bem Agora que sabemos como criar e eliminar bancos de dados, vamos dar uma olhada em como podemos criar e eliminar esquemas, já que é aí que queremos colocar nossas tabelas dentro deles. nossa última aula, pudemos criar o RDB aqui Mas às vezes você pode realmente se deparar com um erro. Por exemplo, se eu digitar aqui, descartar o banco de dados e quiser eliminar o RDB, isso me dará um erro porque eu já estou conectado ao banco de dados atualmente aberto Como estou conectado a ele, não posso realmente abandoná-lo. Então, uma coisa que você pode fazer para mudar isso seria, por exemplo, entrar em uma opção diferente que temos aqui. Vemos que temos nosso banco de dados, que estará em nosso modelo um, mas também temos opções diferentes para acessar. A outra coisa que podemos fazer se realmente quisermos eliminar um banco de dados é criar um novo banco de dados. Por exemplo, nosso banco de dados de sublinhado Podemos criar isso e, seguida, temos que alterar nossa conexão, o que podemos fazer entrando aqui e clicando em RDB Agora, eu acho que esses nomes não são particularmente úteis quando você fala isso em voz alta, mas agora temos dois bancos de dados. Um deles tem um sublinhado, que é aquele ao qual estamos conectados atualmente, como podemos ver aqui no canto superior direito O outro não tem um sublinhado e não é aquele ao qual estamos conectados em nossa sessão atual aqui, porque, novamente, não é o que temos aqui no canto superior direito Isso aqui será específico do Data Grip, mas é provável que você tenha indicações de interface de usuário semelhantes se estiver usando editores SQL diferentes Se quisermos, podemos, por exemplo, agora descartar nosso banco de dados, já que agora estamos conectados ao banco de dados que tem um sublinhado nele Se quisermos eliminar o banco de dados ao qual estávamos conectados antes, agora podemos descartar o banco de dados e, nesse caso, chamar o nome sem o sublinhado, podemos executá-lo Agora podemos ver que o banco de dados foi removido. Uma coisa que você notará é se entrarmos no esquema aqui, na verdade não conseguiremos ver nenhum esquema No entanto, se examinarmos atentamente nosso símbolo RDB aqui, veremos que estamos conectados ao nosso banco de dados de sublinhado, que é o banco de dados público, que é o esquema Se for esse o caso, você provavelmente receberá essa notificação, que também estou vendo aqui Data Grip, onde podemos simplesmente clicar no esquema de introspecção Então, agora, se formos para o nosso esquema, podemos ver como ele está disponível para nós Na verdade, temos o esquema público disponível. Mas como você pode criar um novo esquema. Bem, para fazer isso, digitamos create schema e, em seguida, digitamos o nome exatamente como fizemos para o banco de dados Por exemplo, aqui, podemos chamar esse de nosso esquema, e podemos executá-lo Para mim, eu já o criei, então estou recebendo um erro que já existe. Vamos ver como podemos acabar com isso. Podemos digitar drop schema, nosso esquema. Então, se executarmos isso, podemos ver como o esquema é removido Então, se quisermos, podemos criá-lo novamente digitando create schema, e então ele criará outro esquema Agora, é claro, o nome do esquema não precisa ser assim Pode ser qualquer nome que seja mais apropriado. Se quisermos, podemos parar com isso de novo. Geralmente é habitual ou. Geralmente, não há problema em seguir o esquema público. Não há nada de errado com isso. Se você já tem um esquema público que deveria estar lá por padrão, você também pode simplesmente ficar com um esquema público e não se preocupar muito. Mas se você precisar ou quiser especificamente criar esquemas extras para agrupar tabelas , é claro que agora você sabe como e tem a opção de fazer isso 11. Como criar tabelas: Agora vamos aprender como podemos criar tabelas em nossos esquemas de banco de dados Para fazer isso, a sintaxe que vamos usar será criar essa tabela de tempo e teremos o nome da nossa tabela Por exemplo, aqui podemos usar as informações do usuário, como também vimos nas lições anteriores. Agora, há algumas coisas extras que precisamos fazer aqui. Queremos abrir e fechar parênteses aqui, e agora podemos inserir os nomes reais das colunas em nossa tabela, bem como o tipo de dados que elas carregam Faça com que tudo isso pareça um pouco mais bonito. Vou levar isso por várias linhas. Também vou colocar novamente um ponto e vírgula no final aqui, só para ter certeza de não esquecê-lo Mesmo que, como você viu antes, funcione sem ele, é uma boa prática tê-lo lá. Vamos ter nossa primeira coluna, o ID, que será apenas um número inteiro Aqui, vamos ter essa nossa chave primária. Agora, para criar uma próxima coluna, vamos colocar uma vírgula aqui para separar isso Então, nossa próxima coluna, vamos fazer com que esse seja o nome. Vamos fazer com que seja um varchar usando 25 bytes. O próximo ao qual podemos ter aderido. Essa, vamos ter o oitavo encontro. Podemos definir o e-mail deles se quisermos, e neste podemos, por exemplo, ser um campo de texto. Se executarmos isso, podemos ver aqui agora nossa tabela de informações do usuário foi criada dentro do esquema público Podemos ver aqui também que, se entrarmos, também temos informações sobre a chave primária, bem como as colunas que estão dentro ou os atributos, bem como os tipos de dados cada atributo de alcance de coluna que temos. Como podemos remover uma mesa? Bem, isso vai ser muito mais fácil. Vamos apenas digitar drop table. Em seguida, vamos colocar aqui o nome da tabela. Por exemplo, informações do usuário, ponto e vírgula, clique em executar Lá vamos nós. Esqueça de clicar em executar e depois espere e você pode ver aqui agora que nossa tabela foi removida. E se tivermos vários esquemas. Vamos criar um segundo esquema e chamá-lo de nosso esquema novamente Então vamos executar isso. Agora temos dois esquemas Vou voltar um pouco aqui para obtermos nosso código que tínhamos de antemão O que acontece agora se executarmos nossa instrução create table? Bem, vamos experimentar. Se executarmos nossa instrução create table, veremos aqui que agora estamos colocando-a no esquema público, que também é aquele ao qual estamos conectados aqui Temos diferentes opções disponíveis. Uma delas é que podemos mudar nossa conexão aqui. Por exemplo, conectando-se ao nosso esquema, em vez do público, e podemos ver aqui agora que nossa conexão foi alterada Aqui, podemos criar novamente a tabela de informações do usuário. Desta vez, ele será criado em nosso esquema. Às vezes, você pode não se ao luxo de mudar assim. Às vezes, pode ser diferente. Em outros casos, se precisar especificar um esquema, você também pode adicioná-lo colocando o nome do esquema na frente da tabela real Vamos criar outra tabela aqui chamada Informações do usuário dois. Deixe-me corrigir esse erro de digitação aqui. Você pode ver mesmo que eu esteja conectado ao nosso esquema, que é o esquema Eu criei uma tabela de informações do usuário no esquema público, como podemos ver aqui Obviamente, se eu remover esse prefixo aqui e executá-lo novamente, ele será criado no esquema ao qual estamos conectados no momento será criado no esquema ao qual estamos conectados no qual estamos Você pode ver se está lidando com vários esquemas e, seguida, criar alternando para eles e criando tabelas diretamente neles ou, se quiser, pode referenciar o esquema com antecedência para criar tabelas nele agora Então, o que aconteceria agora que criamos nosso esquema, vamos voltar para o público entrando no RTB, entrando no público, clicando O que acontece agora se quisermos descartar o esquema e o novo esquema que criamos Bem, agora vamos ter um problema porque temos tabelas criadas internamente. Uma coisa que podemos fazer é continuar e remover todas as tabelas internas e, em seguida, excluir o esquema ou, como sugere Data Grepard, usar algo chamado cascata Podemos digitar cascade aqui. Em seguida, ele basicamente executará essa operação, mas continuará e fará a limpeza apropriada também internamente neste caso Se executarmos isso agora, não apenas nosso esquema será removido, mas também todas as tabelas contidas nele Agora, para limpar isso ainda mais. Vamos também eliminar as informações do usuário em duas tabelas para que não tenhamos nomes de tabelas estranhos com todas as mesmas colunas conflitantes Vamos deixar de lado esta tabela 2. Vamos também dar uma olhada em como podemos criar as outras duas tabelas que vimos na lição apenas para que também possamos ver as chaves estrangeiras. Aqui, podemos criar novamente a tabela, e vamos criar nossa tabela de informações do evento, informações sublinhado do evento Aqui vamos ter duas colunas no interior. Um deles será o ID, que, novamente, podemos ser um número inteiro, e vamos fazer disso nossa chave primária Então também teremos o nome, que pode ser um texto ou um varchar, ou o que quisermos, que acharmos apropriado Agora, uma coisa que eu quero fazer é colocar esses nomes em maiúsculas em vez de minúsculas apenas para mostrar o que acontece aqui. Se executarmos isso e entrarmos na tabela de informações do evento, podemos ver aqui que, embora os tenhamos criado com nomes em maiúsculas, quando entramos na tabela, ainda temos apenas nomes em minúsculas É também por isso que é tão bom usar esses sublinhados, porque mesmo que essas conversões ocorram, isso ainda facilita a leitura Vamos continuar e também criar a tabela de registro de eventos. Aqui, teremos nossa chave de evento, que será serial para que seja incrementada automaticamente Então, vamos manter nossos dois IDs aqui e não nos preocupar muito com as outras coisas. Teremos um ID de evento, que será um número inteiro Então, também teremos um ID de usuário, que também será um número inteiro Então, se quisermos, também podemos adicionar, por exemplo, a coluna de tempo a ela, ou podemos chamá-la de hora maiúscula. Assim, podemos fazer um timestamp, vamos fazer isso em maiúsculas Não vamos adicionar horários aqui porque, se estivermos usando isso, basta usar UTC, e isso economizará espaço de armazenamento para nós Agora que temos nossas quatro colunas, como podemos referenciar as chaves estrangeiras. Para fazer isso, vamos usar uma nova linha, e vamos dizer, chave estrangeira, e você já deve se lembrar disso das aulas anteriores. Vamos abrir e fechar parênteses. Vamos colocar aqui o nome que queremos referenciar da nossa tabela, que será o ID do evento. Vamos dizer referências. Mas então vamos colocar aqui o nome da nossa tabela. Por exemplo, informações de ventilação. Então, aqui vamos colocar o nome da coluna que queremos referenciar. Nesse caso, o ID. Nosso ID do evento será uma chave estrangeira que faz referência à coluna ID e à tabela de informações do evento . Fazendo a mesma coisa com as informações do usuário, criaremos a chave estrangeira, que será nosso ID de usuário. Vai dizer que faz referência à tabela de informações do usuário, aqui vai fazer referência à coluna ID. Se prosseguirmos e executarmos isso, vamos dar uma olhada em nossas tabelas. Agora também temos a tabela de registro de eventos. Podemos ver aqui que temos a chave primária, mas também temos referências de chave estrangeira aqui. 12. Como mudar tabelas: Agora, é provável que, com o tempo , seus requisitos de banco de dados mudem. Você pode querer alterar tabelas, adicionar coisas a elas, removê-las ou até mesmo alterar coisas dentro delas. Para fazer isso, podemos usar o comando alter table. Em seguida, colocaremos o nome da tabela que queremos alterar e, em seguida, o que exatamente queremos alterar nela. Vamos ver alguns exemplos. Digamos que também queremos adicionar uma região às nossas informações de usuário. Dizemos que temos a identidade, o nome e quando eles se cadastram no e-mail, mas na verdade não sabemos em que região eles estão. Em que parte do mundo eles estão. Vamos dizer que vamos alterar nossa tabela de informações do usuário. Nesse caso, queremos adicionar uma coluna. Vamos digitar add. Aqui, teremos o nome da coluna, que será região, e então queremos ter o tipo de dados da coluna. Podemos dizer isso, por exemplo, novamente, vamos fazer com que seja um varchar, talvez de tamanho 20 ou o que considerarmos apropriado Então, é claro, também queremos ter certeza de colocar um ponto e vírgula no final aqui, apenas para uma boa Então, se executarmos isso e apenas observarmos a tabela de informações do usuário, veremos que agora temos a coluna de região adicionada a ela. Digamos que, em algum momento, nossa tabela esteja ficando muito grande e decidimos a coluna da região na verdade não é tão importante. Então, podemos usar em vez do comando drop column. Agora vamos colocar o nome da coluna que queremos eliminar. Queremos eliminar a coluna da região. Você pode clicar ou executar aqui e, em seguida, removê-lo da nossa tabela de informações do usuário. Digamos que, em algum momento, percebemos que nossa coluna de ID está ficando muito grande, os números inteiros aqui estão ficando muito grandes e precisamos modificar nossa coluna para que possamos cuidar de IDs maiores porque nossa base de usuários está crescendo muito O que podemos fazer para fazer isso é criar ou podemos dizer alterar a tabela, queremos alterar a tabela de informações do usuário. Agora queremos alterar a coluna. Queremos alterar a coluna ID, queremos alterar o tipo da coluna ID para, por exemplo, uma grande. Nós podemos executar isso. Então você pode ver aqui nosso tipo de inteiro agora será atualizado para um tipo grande Se quisermos, também podemos reverter isso. Você notará aqui que eu posso usar a versão em minúsculas quanto em maiúsculas. Dessa forma, posso modificar ou alterar as colunas que já estão disponíveis. Agora, há muito mais alterações que você pode fazer que realmente dependem da situação Dependendo da situação em que você se encontra, talvez você queira atualizar seu banco de dados ou precise atualizar seu banco de dados e queira alterar ou modificar algo. Hum, a coisa mais fácil de fazer é dar uma rápida olhada no Google e dizer, como faço para transformar isso em isso, e então será exatamente a mesma sintaxe que tínhamos aqui Ou será algo que você já viu, por exemplo, alterando tipos de coluna ou adicionando ou removendo colunas, ou algo muito semelhante, por exemplo, modificando uma coluna ou alterando suas restrições 13. Tipos de enumerados: Então, vamos dar uma olhada em como podemos criar tipos de dados enumerados porque às vezes queremos ter ou há uma ordem natural das coisas, mas talvez seja difícil para nós representar isso para representar isso Então, um exemplo fácil disso é pegar os dias da semana e dizer que há um pedido específico, e começarmos com segunda-feira sendo o primeiro dia, e então podemos ir terça, quarta, quinta, sexta, sábado, domingo, ou talvez você queira começar com domingo e ir para sábado ou qualquer pedido que você queira usar Mas talvez você queira dizer algo como “Eu só quero procurar casos que aconteçam depois de quarta-feira”. Então, entre quarta e sábado ou algo parecido. Usar essa ordem é difícil porque não é inerente às palavras em si. Sabemos disso porque entendemos o significado dos dias da semana, mas um computador, é claro, não sabe disso. Uma coisa que podemos fazer no SQL é criar um tipo de dados enumerado e, nele, podemos especificar ordem hierárquica SQL é criar um tipo de dados enumerado e, nele, podemos especificar a ordem hierárquica entre essas diferentes instâncias. Por exemplo, para fazer isso, podemos criar um tipo e teremos nosso nome de tipo aqui. Podemos chamar esse, por exemplo, de dia da semana. Em seguida, vamos dizer aqui como um número, que vai dizer como parênteses enumerados, abrir e fechar e, em seguida, ter um ponto e vírgula no final aqui apenas para uma Agora podemos colocar aqui a ordem dos diferentes tipos Por exemplo, digamos que primeiro temos segunda-feira e depois terça. Depois, temos quarta-feira e, em seguida, vamos continuar na próxima linha para torná-la mais legível Então teremos quinta-feira. Então teremos sexta-feira, sábado e domingo. Agora, criamos um novo tipo chamado dia da semana, que é um tipo de dados enumerado, e a ordem entre eles é a que vemos O que podemos fazer, por exemplo, é que agora podemos usar esse tipo para criar outra tabela. Vamos criar uma tabela de criação. Então, aqui podemos chamar essa tabela de teste. Dessa forma, não precisamos nos preocupar com um nome. Nesta tabela, vamos usá-lo para acompanhar, por exemplo, a frequência. Embora eu ache que um nome melhor agora teria sido presença, mas de qualquer forma. Vamos deixar assim. O que podemos acompanhar aqui, por exemplo, é uma carteira de estudante Vamos fazer com que seja um número inteiro Então, também vamos, por exemplo, usar nosso tipo de dados de enumerador, para que possamos chamar isso aqui de dia da semana, que usará nosso tipo de dados de dia da semana, e ainda precisaremos Vamos chamar isso de alguma chave, e isso vai ser serial, e vai ser nossa chave primária. Se executarmos isso, aqui, na verdade, está nos dando a opção de quais declarações queremos executar. Por exemplo, execute apenas a instrução create, obteremos um erro porque ainda não criamos o tipo de numeração E isso provavelmente ocorre porque temos a caixa de tela aqui que indica que vamos executar essa seção de consulta aqui Vamos executar isso de novo e, desta vez, selecionando a declaração inteira. Então, se clicarmos em Executar ou selecionarmos isso e executá-lo, podemos ver como funciona porque criou nosso tipo para nós. Podemos ver aqui, se entrarmos em nossa tabela de teste, agora temos um tipo de dados personalizado ou chamado dia da semana, que, como podemos ver aqui, criamos aqui. O importante aqui também é que temos o ponto e vírgula no final, porque caso contrário, ele teria tentado encadear esses comandos Dessa forma, agora temos consultas SQL diferentes, e é importante apenas separar consultas SQL diferentes com ponto e vírgula para garantir que elas não sejam encadeadas ou algo assim, mas Dessa forma, mesmo que algumas consultas ou alguns comandos possam ser executados em série, é sempre uma boa prática separá-los , pois outras vezes você terá problemas É sempre uma boa prática simplesmente separar ou finalizar suas consultas com ponto e vírgula Dessa forma, o editor de consultas saberá que esse é o fim da consulta. Então, a próxima coisa que virá será o início de uma nova consulta. 14. Como inserir valores: Agora que sabemos como criar e remover tabelas, além de criar nossos tipos de enumerador personalizados e criar tabelas Vamos aprender como podemos inserir dados em nossas tabelas. Para fazer isso, vamos usar insert into. Então vamos ter aqui o nome da tabela. Por exemplo, vamos usar nossa tabela de teste e, opcionalmente, voltaremos a isso em um segundo Podemos colocar a ordem das colunas aqui, mas vamos pular isso por enquanto Em seguida, usaremos os valores das palavras-chave. Em seguida, abriremos e fecharemos parênteses e, novamente, para uma boa prática, colocaremos o ponto e vírgula no final da consulta Agora vamos inserir os valores que queremos inserir. Agora, por padrão, os valores estarão na ordem em que também os colocamos aqui. Por exemplo, temos uma carteira de estudante e um dia da semana. Como nossa chave aqui é na verdade uma série, não precisamos fornecer um valor para ela. Digamos que nossa carteira de estudante seja uma e o valor do dia da semana seja segunda-feira Então, podemos executar isso e , em seguida, ele será inserido. Escreve toda a declaração. Ele vai inserir em nossa tabela de teste os valores um e segunda-feira. Como podemos ver isso? Bem, podemos simplesmente clicar duas vezes em nossa tabela aqui e isso a abrirá em uma nova guia. Aqui podemos ver que temos a carteira de estudante. Temos o dia da semana como segunda-feira e também temos nossa chave aqui, que foi criada automaticamente para nós Agora também podemos especificar a ordem das colunas aqui, se quisermos. Por exemplo, talvez queiramos inserir primeiro o dia da semana depois inserir a carteira de estudante Então, dessa forma, temos que mudar a ordem aqui. Digamos que, na terça-feira, tenhamos novamente um aluno. Mas desta vez, observe que a ordem das colunas é diferente Escolhemos ou escolhemos nosso pedido personalizado que queremos usar para inserir nessa tabela Mas é importante que sigamos esse pedido personalizado. Caso contrário, a tabela assumirá que usamos a ordenação padrão e também é assim que ela inserirá os valores Outra coisa importante que eu também quero salientar é que é importante aqui usarmos aspas simples não usarmos aspas duplas Vou explicar o porquê em um segundo. Vamos seguir em frente e executar isso. Vamos executar toda a consulta. Ele será inserido em nossa tabela aqui. Deixe-me fechá-lo e reabri-lo. Ele vai ser inserido em nossa tabela. Novamente, temos nossa carteira de estudante. Temos o dia da semana, agora é terça-feira, que é exatamente o que fornecemos aqui Agora, o motivo pelo qual não queremos usar aspas duplas é porque aspas duplas são usadas para nomes de colunas Às vezes, podemos ter nomes de colunas que podem colidir com outra coisa no SQL Para especificar que algo é uma coluna, também podemos colocar aspas duplas ao redor dela Por exemplo, vamos usar a quarta-feira aqui. Vamos usar aqui as aspas duplas para especificar que são colunas Novamente, isso será para a identificação estudantil 1. Novamente, porque é assim que estamos especificando a ordem das colunas agora Se prosseguirmos com isso, e atualmente estou me confundindo com fato de minha grafia de quarta-feira Vamos dar uma olhada em nosso dia da semana e tipo de dados, e eu vou, entendi. Havia um espaço extra aqui. Bem, vamos deixar como está por enquanto. Só precisamos colocar um espaço extra na frente. Aqui, é claro, você também pode ver o que acontece, e isso é realmente o que eu abordaria a seguir. Mas você pode ver o que acontece se você colocar aqui um valor em um tipo de dados enumerado que não pertence ao tipo de dados Usando agora a formatação apropriada, vamos executar isso mais uma vez e, em seguida, dar uma olhada em nossa tabela Ok. Dê uma olhada em uma tabela aqui. Se quisermos, podemos fechá-lo e reabri-lo. Outra coisa que podemos fazer é simplesmente apertar o botão de atualização aqui e isso atualizará nossa tabela, como podemos ver aqui, podemos ver isso quando voltamos ao nosso console, usando as aspas duplas Novamente, vamos especificar a coluna. Ao usar uma aspa simples, vamos especificar o valor que queremos inserir Se colocarmos aqui aspas duplas, por exemplo, vamos usar quinta-feira aqui, mas neste caso, vamos usar aspas duplas Já podemos ver pelo código de cores que ele falhará E vamos fechar isso. Mas vamos tentar de qualquer maneira. Vamos executar isso e correr para que possamos ver que diz aqui que a coluna quinta-feira não existe. Novamente, aspas duplas são quatro colunas. As aspas simples são para cadeias de texto. Se prosseguirmos e executarmos isso agora, inserindo-o aqui e apenas recarregando nossa página, podemos ver aqui novamente, inserimos nossos dados O que acontece se quisermos atualizar nosso tipo que estamos usando já que agora confundimos um pouco nosso tipo Agora, o que podemos fazer para isso é dar uma olhada em nossos tipos novamente aqui. A sintaxe que vamos usar, vamos dizer, altere o tipo e vamos alterar nosso dia da semana Vamos dizer renomear valor, e vamos renomear quarta-feira dois, Sam colon Execute, vamos dar uma olhada em nosso tipo e, na verdade, vamos atualizá-lo Então, podemos ver aqui agora que nosso tipo foi atualizado. Percebo o mesmo erro aqui no domingo. Vamos continuar e fazer isso também no domingo. Domingo e vamos renomear isso para domingo. Vamos seguir em frente e executar isso. Volte para nossos tipos aqui, recarregando, e vemos aqui que um domingo também foi corrigido Se dermos uma olhada na atualização do nosso banco de dados, podemos realmente ver que o valor do nosso banco de dados também foi atualizado adequadamente Agora vimos como podemos inserir dados em nosso banco de dados. Além disso, como podemos alterar o tipo, se quisermos. Obviamente, outra opção é se você está apenas começando do zero, se tiver um banco de dados completamente limpo, você também pode simplesmente remover a tabela e criar o tipo do zero e continuar com o tipo correto. Obviamente, existem opções diferentes para resolver o mesmo problema. 15. Como executar um script SQL: Agora, como você pode ver, inserir dados em nossas tabelas pode ser um pouco entediante, especialmente porque no SQL, temos que inseri-los um valor por vez Geralmente, é por isso que os dados nas tabelas SQL são inseridos por trás onde as coisas são configuradas com os outros pipelines e, sempre que os dados necessários chegam ou passam por eles, carregados no banco de Usar as instruções insert into não é particularmente eficiente se você, como usuário, precisar fazer isso porque precisa escrever tudo. É muito mais eficiente fazer isso como parte do código, onde isso faz parte de seus pipelines de dados , para que você possa simplesmente carregar os dados no banco de Então, na maioria das vezes, você não vai realmente inserir dados Se você o estiver usando para fazer consultas para explorar seus dados, analisá-los ou exportá-los para executar sua própria análise personalizada ou fazer outras coisas com Esteja ciente disso. Agora, existem algumas maneiras pelas quais podemos inserir dados mais rapidamente. Por exemplo, se acessarmos as informações do nosso evento e, digamos, inserirmos as informações do evento, e quisermos inserir os valores e apenas dar uma ideia de um e um nome, por exemplo , login, se pudermos executar isso ou se quisermos realmente inserir vários valores de uma vez, por exemplo, dois aqui serão clicados. Então, como você pode ver os valores de inserção, podemos simplesmente separar por vírgulas e , em seguida, cada linha ou cada registro que queremos inserir aqui está dentro de seus próprios parênteses Podemos, por exemplo, inserir dois valores. Vamos dar uma olhada na nossa tabela de informações do evento. Atualmente, está vazio. Se executarmos isso e depois dermos uma olhada e atualizarmos nossa tabela, podemos ver que inserimos dois valores ao mesmo tempo Mas mesmo isso não é particularmente eficiente. Novamente, na maioria das vezes, basicamente o tempo todo, isso será feito no back-end, à medida que seus dados passam pelos pipelines de back-end, à medida que seus dados dados porque tudo isso pode ser automatizado, e isso é extremamente bom, pois seu banco de dados continua sendo preenchido com dados à medida que seus pipelines de dados processam os dados ou os movem Agora, para nós, o que vamos fazer é usar um banco de dados aberto com o qual possamos brincar. Antes de fazermos isso, vamos deixar de lado todas as nossas mesas. Vamos dizer drop, vamos ficar com a sintaxe em maiúsculas aqui Vamos retirar a tabela de informações do evento. Vamos seguir em frente e executar isso. Nesse caso, porque vinculamos nosso registro de eventos às informações do evento com uma chave externa. Se você se lembra de como criamos o registro de eventos, temos um link aqui. Para as informações do evento com a chave estrangeira. Também vamos usar a instrução cascade para fazer essa série contínua de exclusões onde estão todas essas referências . Executando isso. Isso removerá nossa tabela de informações do evento para nós. Então, podemos fazer a mesma coisa com as informações do usuário, novamente, distribuindo o evento em cascata porque ainda o temos vinculado ao registro de eventos e, em seguida, podemos excluir o registro de eventos Aqui, não precisamos mais colocar nada em cascata porque não está mais vinculado a nada Vamos remover isso. E então também podemos remover a tabela de teste. Vamos remover isso. Então, também podemos fechar nosso toque extra aqui porque não é mais relevante. Vamos voltar ao controle de dados e vamos limpar nosso editor de consultas aqui para nosso console de consultas Para obter nossos novos dados, acessaremos esta página de configuração aqui para o banco de dados chinook Inclua um link para isso na guia de materiais, para que você também possa consultá-lo a partir daí. Para obter esses dados, essa será uma consulta SQL que podemos executar, basta clicar em baixar aqui e, ou ela será baixada gratuitamente diretamente ou, como aconteceu comigo, abrirá em um segundo, se eu clicar nela Ele vai abri-lo aqui em uma nova guia e você pode ver aqui que tudo isso são, na verdade, instruções SQL. Novamente, se você tem SQL ou se você tem SQL, a tabela está integrada à sua empresa. Na maioria das vezes, ele ainda não será inserido usando instruções SQL, mas sim conectado diretamente à tabela SQL. Mas de qualquer forma. Aqui, tudo isso será feito para nós por meio do uso de consultas SQL Se quiser, você também pode dar uma olhada nisso para ver o que está realmente fazendo. Mas se você quiser usar essa consulta, clique botão direito do mouse aqui. Ok. Você clicará com o botão direito do mouse e, em seguida, poderá clicar em salvar. Então eu o salvei na área de trabalho, como você já pode ver. Apenas certifique-se de remover a extensão dot TXT para que possamos usá-la em um segundo Em seguida, basta clicar em Salvar. É claro que você também pode salvá-lo onde quiser. Eu já fiz isso. Para executar essa consulta SQL ou a série de consultas SQL que baixamos agora e adicioná-las ao nosso banco de dados Vamos clicar com o botão direito do mouse em nosso esquema aqui. Em seguida, vamos executar aqui o script SQL. Vamos escolher esse script SQL aqui. Vamos abrir e, seguida, ele vai funcionar para nós. Podemos esperar até que termine, o que levaria apenas alguns segundos. Podemos ver aqui, agora que está pronto , criou novas tabelas para nós. Podemos dar uma olhada em cada um, se quisermos , e explorá-los um pouco, ou você também pode visualizá-los diretamente aqui. Agora temos dados que podemos usar que, na verdade , são muito mais do que poderíamos ter inserido manualmente. Se você quiser abrir o editor de consultas porque foi divulgado acidentalmente Novamente, sabemos como fazer isso. É assim que também podemos executar scripts SQL, se quisermos, o que, nesse caso, apenas nos permite criar uma prática ou usar um banco de dados de prática que podemos usar para consultas extras Novamente, é claro, se você estiver trabalhando com o banco de dados de uma empresa ou algo assim, o banco de dados já estará preenchido e, portanto, ao analisá-lo, você se concentrará apenas em e, portanto, ao analisá-lo, fazer sua análise ou em encontrar os dados necessários que você possa extrair para fazer mais coisas Como o upload acontecerá principalmente nos pipelines de dados será muito mais eficiente atualizar tudo isso automaticamente como parte dos automaticamente como parte dos 16. Leitura dados: Tudo bem. Agora que temos nossas tabelas disponíveis, vamos aprender como podemos realmente obter dados de nossas tabelas. Vamos dar uma olhada na primeira tabela aqui, aquela sobre álbuns chamada álbum. Se dermos uma olhada aqui, veremos que temos várias colunas diferentes, vários atributos diferentes, temos o ID do álbum. Temos o título, bem como um ID do artista. Temos álbuns diferentes aqui que são feitos por artistas diferentes, e cada álbum, é claro, também tem seu próprio ID exclusivo. Como podemos obter dados daqui? Como podemos ler os dados dessa tabela usando uma consulta SQL. Vamos voltar ao nosso console, certificando-nos de que estamos conectados à nossa fonte de dados correta aqui usando o console correto. Agora, para obter dados da nossa tabela, vamos dizer, selecione. Então vamos dizer estrela, o que significa tudo. Selecione todas as colunas. Em seguida, queremos selecionar um item do álbum. Agora, se eu pressionar Enter aqui e deixar o preenchimento automático, você realmente verá que temos aspas por aqui Falaremos sobre isso e também falaremos sobre essa estrela aqui, bem como sobre como podemos modificar essas coisas. Mas antes de tudo, vamos fazer isso e ver os resultados que obtemos. Se executarmos isso, podemos ver aqui esses são os resultados que obtemos da nossa consulta. Podemos ver que selecionamos três colunas diferentes. Temos o ID do álbum, o título ID do artista, e podemos ver aqui, podemos rolar para baixo e selecionar vários dados ou, nesse caso, todos os nossos dados da tabela de álbuns aqui. Vamos primeiro dar uma olhada nessas aspas porque muitas vezes, nas consultas SQL, você não terá aspas nos De onde vem isso? Bem, se observarmos o script SQL que executamos, podemos realmente ver aqui a instrução create table que eles usaram, colocando aspas ao redor do nome da tabela, o que significa que agora precisamos nos referir a ela usando aspas Se eu retirei as aspas, você já pode ver aqui que ela fica vermelha, mas podemos tentar executá-la de qualquer maneira Receberemos um erro porque diz que a tabela não existe. Como podemos mudar isso porque não é muito bom sempre ter que colocar aspas ao redor disso Para atualizar isso, vamos novamente usar a instrução alter table, e vamos alterar o álbum, novamente, colocando-o entre aspas aqui, e então vamos dizer, renomear dois, e agora vamos chamá-lo de álbum sem as aspas Vamos seguir em frente e executar isso. Agora, vamos escrever a mesma declaração de seleção, selecione a estrela do álbum. Mas desta vez, não vamos colocar aspas por aqui Se executarmos isso, você pode ver que desta vez não temos problemas porque agora renomeamos nossa tabela para passar das aspas para um nome de tabela sem aspas, que é muito mais conveniente porque nem sempre precisamos colocar aspas Em alguns casos, você pode encontrar isso porque o comando create table, como podemos ver aqui, tinha aspas no item original de criar tabela Vamos também falar sobre essa estrela aqui. O que colocamos aqui são as colunas que queremos selecionar da nossa tabela. Nesse caso, colocamos estrela, isso significa selecionar cada coluna. Às vezes, não queremos selecionar todas as colunas. E se às vezes quisermos apenas selecionar um subconjunto de colunas Digamos que só nos importamos com o ID do álbum e o título. Não queremos extrair o artista. Bem, o que podemos fazer é dizer que vamos selecionar o ID do álbum e também vamos selecionar o título. Do álbum. Agora, novamente, você verá aqui que preciso colocar aspas e, novamente, o preenchimento automático aqui do Data Grip fez isso por Novamente, isso ocorre porque, se entrarmos em nossa consulta SQL aqui , podemos ver que os nomes das tabelas também foram criados usando aspas Se voltarmos, podemos ver aqui novamente que precisamos usar aspas ou nomes de tabelas também. Se executarmos isso, podemos ver aqui agora nossos resultados atualizados não contêm mais o ID do artista, que temos aqui. Mas, em vez disso, temos o ID do álbum e o título. Agora também podemos, é claro, alterar a ordem aqui Em vez de ter o ID do álbum primeiro, talvez possamos ler o título e depois o ID do álbum. Portanto, se executarmos isso, poderemos ver aqui que a saída da ordem de nossas colunas também será invertida Depois da declaração select aqui, selecionamos quais colunas queremos. Se quisermos selecionar todas as colunas, colocamos uma estrela. Se quisermos selecionar colunas específicas, temos que colocar o nome delas aqui. A instrução Create table não usa aspas na definição dos nomes das colunas, então também não precisamos usá-las aqui. Mas, nesse caso, eles funcionam, o que significa que também precisamos usá-los em nosso código. Agora, às vezes, quando você está apenas explorando um banco de dados ou talvez esteja escrevendo uma consulta e queira ver os resultados da consulta, mas não quer que tudo seja retornado porque retornar todos os dados, especialmente porque há muitos dados em seu banco de dados, é muito trabalhoso . Há uma declaração extra que podemos colocar no final da nossa consulta chamada mit. Isso limita o número de linhas que são retornadas para nós e que realmente aparecerão. Por exemplo, se eu colocar mit cinco, isso significa que vamos ver apenas cinco linhas aqui. Serão as primeiras cinco linhas. Se executarmos isso, podemos ver aqui agora que só temos as cinco primeiras linhas retornadas para nós. Se eu limitar dois, ele mostrará apenas as duas primeiras linhas. Se eu fizer 50, ele nos dará as primeiras 50 linhas. Dessa forma, você também pode gerenciar quantos valores são retornados, que você pode usar dentro das consultas, se quiser pois não sei se você está fazendo alguma filtragem personalizada específica, ou também pode usá-la ao testar suas consultas e não quer que todos os valores sejam suas consultas e não retornados, mas você só quer ter certeza de mas você só quer ter certeza que está e, portanto, você deseja apenas alguns valores, limitar seus resultados a algumas linhas para poder examiná-los, verificar se estão funcionando corretamente ou talvez detectar alguns erros, corrigir sua consulta, tentar novamente e até que funcione e, novamente, remover a instrução de limite, se quiser executá-la no conjunto de dados completo ou melhor, se você quiser que todos os registros sejam retornados. 17. Como criar tabelas a partir: Então, na lição anterior, aprendemos sobre como podemos ler dados de nossas tabelas em nosso banco de dados. Mas agora vamos dar uma olhada em como podemos realmente criar novas tabelas a partir dos resultados , porque às vezes você está escrevendo uma consulta e depois quer salvar esses resultados em uma tabela separada para que você possa acessá-la rapidamente para visualização porque você fez algum processamento de dados ou talvez usá-la em outro lugar Portanto, pode haver, é claro, situações em que você queira armazenar os resultados da sua consulta em apenas uma tabela separada para uso posterior. Como podemos fazer isso? Para fazer isso, colocaremos primeiro aqui, criaremos a tabela e, em seguida, teremos o nome da tabela. Ah. Crie uma tabela e teremos o nome da tabela. Talvez chamemos esse álbum de resultados, e então digamos como, e então vamos colocar parênteses em torno de nossa declaração selecionada Isso significa que vamos criar uma tabela e usar os resultados daqui. Agora você notará que, na verdade, não estamos definindo nenhuma das colunas ou também não estamos definindo nenhum de seus tipos de dados. Tudo isso será inferido resultados da nossa consulta aqui Se executarmos isso, então fique de olho no lado esquerdo aqui. Podemos ver agora que temos nossa tabela de resultados de álbuns, que é, como podemos ver, apenas os resultados de nossa consulta aqui e ela será idêntica à tabela de nossos álbuns, porque isso é novamente o que retornamos daqui. Também podemos dar uma olhada no interior, se quisermos. Podemos apenas dar uma olhada aqui dentro, podemos ver que os tipos são inferidos Uma coisa que notamos é que não há uma chave primária definida aqui. A chave primária, bem como as possíveis reservas estrangeiras, não aparecem em nossa nova tabela aqui Mas ainda podemos usar os resultados de nossas consultas e depois salvá-los em tabelas separadas para que possamos, posteriormente , usar esses resultados para o que quisermos especificamente Agora, como você já me viu fazer várias vezes, comecei a expandir nossas consultas em várias linhas apenas para facilitar a leitura Às vezes, não há problema em executar toda essa consulta como uma, mas em outras vezes isso pode não funcionar ou pode não ser ideal, pois ela se tornará muito longa. Obviamente, você pode dividir sua consulta em várias linhas, o que também facilitará a leitura. Normalmente, você deseja dividi-lo em pontos-chave específicos. Por exemplo, se você estiver selecionando colunas diferentes, geralmente o que você quer fazer é também ter a instrução from em uma nova linha, e podemos fazer a ordenação adequada aqui Queremos criar uma tabela e ter o nome da tabela aqui, e então podemos colocar nossa consulta aqui. Se você quiser selecionar, por exemplo, colunas específicas, como o ID do álbum. Então, na próxima linha aqui, podemos ter, por exemplo, o título para que dessa forma se torne muito mais legível e não se estenda por muito tempo na horizontal O que acontece se executarmos essa consulta novamente? Executando a coisa toda. Desta vez, vamos cometer um erro novamente porque nossa tabela já existe. O que podemos fazer é alterar nossa instrução de criação de tabela aqui, e podemos dizer, criar tabela se não existir Agora, isso funciona para a instrução create table que usa o resultado da instrução select, mas também funciona para nossa instrução geral create table. Lembre-se de quando criamos nossa tabela e, em seguida, fornecemos o nome da tabela e definimos cada coluna bem como cada tipo, bem como chaves primárias e referências de chave estrangeira bem como talvez outras restrições Além disso, podemos usar criar tabela, se não existir. O bom disso é que isso só executará a instrução ou só tentará criar a tabela se ela ainda não existir. Então, não terá esse problema de entrar em conflito com uma tabela já existente Agora, mais uma coisa que eu também quero analisar é como podemos acessar os nomes das tabelas. Vamos remover isso novamente e vamos selecionar tudo. Agora, atualmente, estamos fazendo basquete. Vamos voltar aqui. Atualmente, estamos selecionando tudo do álbum e inferindo qual tabela queremos porque já estamos no banco de dados e no esquema Mas às vezes podemos ter vários bancos de dados ou vários esquemas Como podemos referenciar especificamente a tabela exata que queremos se tivermos vários bancos de dados aqui ou vários esquemas Também podemos fornecer o caminho completo para nosso banco de dados, ou melhor, para nossa tabela. Podemos dizer que queremos ir do RDB aqui, queremos escolher o esquema público E aqui queremos escolher o álbum. Se clicarmos em Executar agora, você verá que ainda funciona totalmente. Mas, nesse caso, estamos referenciando o caminho completo para nossa tabela Agora, é claro que isso é útil. Novamente, se tivermos vários esquemas diferentes ou vários bancos de dados diferentes contidos neles, podemos sempre garantir que, se os nomes das tabelas forem repetitivos, estejamos referenciando as Eu também posso fazer a mesma coisa. Por exemplo, vamos remover nossa tabela de resultados de álbuns que criamos. Vamos dizer eliminar a tabela e vamos eliminar a tabela de resultados do álbum usando o caminho de referência completo. Também podemos usá-lo apenas com esse componente aqui, mas também podemos usar o caminho de referência completo. Se executarmos isso e pudermos observar que nossa tabela agora é removida, também podemos ver que nosso controle de dados a atualiza e basicamente diz que isso não está definido Essa é uma referência desconhecida. Podemos ver que podemos usar tanto caminhos absolutos quanto relativos. Muito disso é apenas facilidade de implementação. No nosso caso, por exemplo, quando temos apenas um banco de dados, um esquema com várias tabelas, será muito mais fácil referenciar a tabela diretamente em vez de colocar o caminho completo Mas à medida que seu banco de dados cresce ou você obtém mais esquemas ou talvez a empresa já tenha vários bancos de dados diferentes ou vários esquemas diferentes Usar esses caminhos absolutos pode ser ótimo porque garante que você esteja referenciando as tabelas certas 18. 16AliasAndorderningHB: Às vezes, quando executamos consultas ou quando estamos tentando tirar colunas específicas estão fazendo referência a tabelas específicas. Os nomes podem ficar muito longos. Então, uma coisa que eu quero olhar agora é usar aliases para nomes para que possamos encurtar os nomes que estamos usando em nossas consultas. Então vamos dar uma olhada na mesa dos funcionários. Eu já abri aqui. Podemos percorrer as diferentes colunas disponíveis para nós. E vamos tirar três colunas aqui. Vamos tirar o FirstName, o Sobrenome, e vamos também tirar o e-mail deles. Então vamos dizer selecione primeiro nome e, em seguida, vamos selecionar sobrenome. E também vamos selecionar o e-mail da tabela de funcionários. Eu estou certo. E então vamos colocar nosso ponto e vírgula aqui. E vamos novamente limitar nossos resultados. Mas vamos também colocar alguma estrutura aqui. Então r de declaração vai estar em uma nova linha. Nosso limite será em uma nova linha, e cada uma de nossas colunas também estará em uma nova linha. Então isso só vai torná-lo mais legível como a consulta, talvez seja maior. E vamos também, claro, colocar um número aqui quando estamos limitando nossa declaração. Então, se executarmos isto, podemos ver aqui estes são os nossos resultados. E você notará que, neste caso, ainda temos que colocar as aspas em torno do nome da tabela porque eu não atualizei o nome da tabela aqui. E nossa coluna ainda está exigindo aspas. Agora, quando nossas colunas são criadas sem aspas, ainda podemos usá-las para saber nenhum nome de coluna, mas não é necessário. Neste caso. Na verdade, é necessário para nós porque foi criado com aspas. Então, se nos lembrarmos, se tirarmos isso, vamos ter um problema porque nossa tabela foi criada com aspas ao redor. No entanto, usar aspas em torno nomes de colunas é realmente muito bom porque é muito mais fácil ver o que a coluna ou quais são chamados nomes e quais são outras coisas. Então, manter aspas em torno de nomes de colunas não é realmente muito ruim, mas é, e é também nomes de tabela Kieran, mas ele fica um pouco tedioso para o usuário em dois amônios. Então, se você quiser fazer isso, você pode, é claro, como vimos nas lições anteriores, apenas alterar o nome da tabela aqui e então você não precisa usar as aspas mais ao redor. Tudo bem, então como podemos adicionar alguns pseudônimos ou colunas? Por exemplo, digamos que queremos que nossa coluna de saída não seja chamada FirstName, mas sim que quiséssemos dar-lhe outra coisa. Por exemplo, digamos que só queremos usar a coluna de saída aqui para ser o primeiro. E queremos que nosso sobrenome seja chamado por último. E queremos que o e-mail permaneça como e-mail para que não os mudemos. Então, se executarmos isso, podemos ver aqui agora nossa saída é o primeiro e o último, e nosso e-mail permaneceu o mesmo. Então podemos ver aqui podemos atribuir aliases para nossos nomes de coluna, e isso realmente vai mudá-los nas respostas resultantes que temos. E, mais tarde, à medida que as consultas se tornam maiores, podemos também fazer referência ou nomes de tabelas usando os aliases que lhes atribuímos aqui, em vez de usar o nome completo. Mas não é apenas para colunas que podemos atribuir aliases, também podemos fazê-lo para tabelas. Então, para atribuir um alias para uma tabela, vamos apenas colocar um espaço aqui. E então nós colocamos o pseudônimo que queremos usar. Por exemplo, se queremos abreviar para empregado, que pode ser usar MP. E isso significa que agora também podemos usar MP para referenciar funcionário. Então, um lugar onde você pode fazer isso é, por exemplo, às vezes quando você está lidando com várias tabelas na mesma consulta, e talvez algumas das colunas sejam as mesmas colunas em várias tabelas diferentes. Você deseja se certificar de que você está fazendo referência à coluna da direita da tabela da direita. Assim como vimos quando estávamos selecionando a partir de uma tabela e demos o caminho completo para a tabela. Podemos fazer o mesmo pelas colunas. Então, por exemplo, podemos então referenciar nossa tabela e aqui, e podemos dizer m ponto primeiro nome. Você pode dizer m dot sobrenome. E podemos dizer m dot e-mail. E então, se executarmos isso, vemos que é executar isso. Então vemos que nossos resultados não vão mudar. Mas a maneira como estamos escrevendo nossa consulta faz porque agora estamos referenciando as coisas de forma diferente. Então podemos ver aqui, é assim que damos aliases para nossos nomes de coluna usando a palavra-chave como. Mas se quisermos dar um alias a um nome de tabela, podemos apenas colocar um espaço depois que temos a declaração frontal aqui no nome da tabela. E então colocamos o alias que queremos dar ao nome da tabela. E isso apenas nos permite usar esse alias em toda nossa consulta para que estejamos fazendo referência essa tabela em vez de ter que escrever o nome completo da tabela. É claro que, neste caso, pode parecer um pouco desnecessário só porque já podemos extrair as colunas assim. Mas quando você tem várias tabelas diferentes na mesma consulta, pode ser muito bom. Para se certificar de que, quando existem colunas diferentes, são colunas idênticas entre as diferentes tabelas que você faz referência à coluna direita da tabela direita. E assim também é assim que podemos usar a abreviação da tabela que estamos usando. E podemos usá-lo, por exemplo, para acessar os atributos de coluna dentro para ter certeza de que estamos acessando a coluna a partir desta tabela específica, que é uma abreviação para esta tabela aqui. Outra coisa que eu também quero revisar é pedir resultados. Então, neste momento, a maneira como nossos resultados estão sendo retornados é apenas pela forma como eles estão inseridos aqui. Então podemos ver que temos a ordem aqui. E também é exatamente assim que eles vão ser devolvidos para nós aqui. Mas às vezes nós realmente queremos encomendar as coisas, ou ordenar como parte da consulta e, em seguida, fazer outra coisa mais tarde, ou apenas ter os resultados finais ordenados. Então, para fazer isso, vamos usar a instrução ordem BY com 1D aqui. Tudo bem, então a ordem BY agora podemos colocar nos nomes das colunas ou a localização da coluna. Vamos olhar para ambos e depois podemos pedir por eles. Então, digamos que primeiro queremos encomendar pelo FirstName e, em seguida, pelo sobrenome. E então queremos retornar nossos resultados. E queremos ordenar em ordem ascendente para que o que for mais baixo seja primeiro e depois vamos em ordem crescente. Então, para ordenar primeiro pelo FirstName, podemos então colocar aqui primeiro, que vai fazer referência, neste caso, ao alias de coluna que usamos aqui. Então vamos pedir por último. E agora também queremos dizer que ambos devem ser ordenados em ordem crescente, que na verdade vai ser o padrão. Mas vamos fazer assim primeiro. E então vamos colocar especificamente a ordem ascendente. Então, estamos executando essa consulta. E podemos ver que agora estamos ordenando em uma ordem de primeiro nome ascendente, e então no caso de haver um primeiro nome de tempo, que neste caso não parece haver para eles e usar o sobrenome para ordenar. Então, para verificar isso, nós também podemos ir para a nossa mesa, que é realmente muito pequena como você pode ver. E nós também podemos apenas clicar no pedido pelo primeiro nome aqui. E veremos que teremos o mesmo pedido que chegarmos aqui. Então, novamente, a instrução ordem BY é a ordem pela qual queremos ordenar as colunas de. Então, primeiro vamos ordenar pela primeira coluna aqui, que é o nosso alias para a coluna FirstName. No caso de haver um empate, vamos usar esta última coluna, que é o nosso apelido para a coluna de sobrenome. Neste caso, não temos nenhum vínculo, então não faz nada. E depois disso não há nenhuma ordem específica que estamos usando. Então ele vai para o caso de haver mais laços, apenas padrão de volta para a borda, a ordem natural dos dados dentro da nossa tabela. Agora, para especificar explicitamente que queremos usar ordem crescente, podemos colocar ASC aqui, e podemos colocar ASC aqui. Então podemos executar isso de novo. Agora, nossos resultados não vão mudar porque também é padrão para ASC. Mas você pode ver depois de cada coluna que temos nesta cláusula ordem BY aqui, nós também podemos especificar a ordem que queremos fazer, seja ascendente ou descendente. Então, se queremos ordenar primeiro o FirstName em ordem decrescente, e em seguida, no caso de empates, use o sobrenome em ordem crescente. Podemos especificar descendente assim, e então podemos deixar o LastName como ascendente assim. Então, se executarmos isso, agora nossos resultados vão mudar porque estamos usando o FirstName primeiro, e estamos ordenando em ordem decrescente, que significa o mais alto primeiro para urnas grandes alfabéticas mais próximas de zed. E então no caso de laços, caso em que atualmente não há nenhum, vamos usar o sobrenome. Então, neste caso novamente, o sobrenome não está sendo usado, mas a ordem vai ser primeiro pela ordem do primeiro nome, descendente, então mais alto primeiro e depois Lois na parte inferior. E no caso de empates, use o sobrenome e, em seguida, classifique as colunas que têm laços no FirstName, sobrenome, mas aqui use uma ordem crescente. E como você pode ver, podemos especificar a ordem específica que queremos usar para cada coluna que queremos encomendar BY. E então também podemos encomendar por, por exemplo, e a coluna de e-mail aqui. Se quisermos. Nós também pode realmente ordenar BY colunas que não estamos selecionando desde que eles estão na tabela original nesta declaração de. Então, mesmo que não os selecionemos para visualização, ainda podemos pedir por eles porque eles estão na tabela original. Então podemos encomendar aqui, por exemplo, vamos pegar a data de nascimento. Então podemos encomendar por nome de nascimento e ele vai padrão para a ordem ascendente. Então podemos comandar isso. Bem, nós podemos ver que nós realmente não temos o nascimento em colunas, então nós realmente não podemos realmente verificar este MOOC ainda é pedido pela data de nascimento, mesmo que nós não estamos usando em nossa declaração de seleção final aqui. Finalmente, outra coisa sintaxe que podemos usar é em vez de colocar os nomes das colunas ou aliases. Então, por exemplo, aqui temos o nome da coluna e anteriormente reutilizado o alias da coluna. Primeiro. Poderíamos usar o primeiro nome, verdadeiro nome da coluna aqui. Você pode ver que ambos funcionariam, mas também podemos usar primeiro como fizemos colocando isso em ordem decrescente agora, e depois usando último. E vamos também colocar isso, ou vamos manter isso em ordem ascendente. Então aqui estamos usando os pseudônimos. Podemos usar os nomes. E vamos fazer isso de novo para mostrar. Mas outra coisa que também podemos fazer é que podemos usar o número para a coluna em que ele aparece em nossa instrução select. Então vamos dizer que queremos encomendar primeiro pelo primeiro aqui, e depois segundo pi ou LastName. Na verdade, também podemos usar o único, que significa que vamos primeiro indexar pela primeira coluna em nossa instrução select. E, em seguida, dois significa a segunda coluna em nossa declaração de seleção. Então, isso é outra vez só mais uma abreviação que podemos fazer no caso de eu chamá-lo de nomes, ficar muito tempo. Podemos escrever nosso código mais limpo, mais limpo e rápido. Então você pode executar isso e podemos ver que vamos obter os mesmos resultados porque ele não muda. Podemos ter um aqui que é referenciado, indo para referenciar a primeira coluna que estamos selecionando aqui. Podemos colocar o apelido aqui, que é o apelido que atribuímos a esta coluna. Então podemos fazer isso e ver. Ou também podemos colocar o nome completo da coluna. Todos estes são equivalentes. Claro, usar o pseudônimo, na minha opinião, é o mais fácil porque é por isso que estamos atribuindo pseudônimos. B pode, naturalmente, também usar o nome completo da coluna ou a versão numérica do mesmo, dependendo da sua preferência. Os números que eu acho que são uma abreviação agradável, mas às vezes eles podem ser confusos porque então você tem que olhar para trás e você tem que ver o que é a primeira coluna eo que é a segunda coluna. E no caso de você estar selecionando algo como 10 colunas, você realmente tem que começar a contagem regressiva para ter certeza de que você está usando estão fazendo referência à coluna direita. Então isso pode ser bom para taquigrafia. Mas é claro, você sabe, todos eles têm suas concessões. Pessoalmente, eu prefiro o apelido mais, mas realmente cabe a você o que permite que você faça as consultas mais legíveis. Agora, como também podemos ver aqui pela ordem, podemos encadear em viés de ordem adicional. Então, por exemplo, podemos dizer, ok, queremos encomendar primeiro pela primeira, a primeira coluna aqui, depois pela segunda coluna aqui, já que sempre quisemos seus 2s. E então queremos encomendar, por exemplo, pela data de nascimento, que nem está incluída em nossas colunas selecionadas aqui. E então podemos colocar isso aqui. E digamos que aqui queremos ordem descendente. E então nós queremos talvez pedir pelo e-mail. Então podemos colocar um três aqui, se quisermos. Ou podemos colocar e-mail o que quisermos. Então podemos ver, e talvez queiramos colocar isso ascendente para que possamos ver, podemos encadear ordens diferentes juntos, apenas separando tudo por vírgula. E então a ordem que vai escolher como primeiro vai ser este desamarrar, ele vai usar isso e em TI para ambos estes, ele vai usar este desamarrar para todos os três destes, ele vai usar isso e assim por diante. E assim você pode ver para cada coluna, nós também podemos especificar se queremos fazer ordem decrescente ou ascendente. 19. Comparação direta com filtro condicionado: Agora, acabamos de ver como podemos ler dados do nosso banco de dados. Mas é claro que ler o banco de dados completo ou cortá-lo após um certo número ou limite de linhas não é realmente o ideal. O ideal é fazer mais com o SQL do que apenas ler todos os dados do nosso banco de dados. A primeira coisa que aprenderemos a fazer mais é filtrar Vamos dar uma olhada nessa faixa. Tabela aqui. Se percorrermos isso, podemos ver que temos colunas diferentes aqui, temos o ID da faixa, o nome da faixa, o ID do álbum, o ID do tipo de mídia, ID do gênero, os compositores, a hora e os milissegundos da música, o tamanho do byte da música, bem como o preço das músicas individuais Vamos tentar pegar essa tabela e encontrar todas as músicas compostas pelo ACDC Para fazer isso, vamos dizer, selecionar e vamos dizer apenas começar. Na tabela de faixas, pressione enter aqui. Novamente, temos as aspas. Novamente, porque foi assim que a tabela foi criada com as aspas ao redor dela e, em seguida, vamos limitar nossos resultados primeiro a cinco linhas limitar nossos resultados primeiro a cinco linhas , para que possamos verificar antes de retornar a tabela inteira Agora, para filtrar especificamente para algo ou para fazer a filtragem em geral, teremos uma declaração extra aqui chamada where Aqui podemos dizer exatamente o que queremos filtrar. Por exemplo, atualmente queremos filtrar por where composer e queremos descobrir onde o compositor é igual a Como fazemos essa comparação? Bem, as cadeias de caracteres serão colocadas em aspas simples, como temos aqui ou o texto será colocado em aspas simples Acesse nosso banco de dados aqui. Novamente, o ACDC é escrito maiúsculas com uma barra frontal aqui Vamos dizer, Onde compositor é igual a ACDC. Observe aqui que temos um único sinal de igual. Caso você conheça alguma outra linguagem de programação, é comum usar sinais duplos de igualdade e outras linguagens Mas no SQL aqui, temos um único sinal de igual. Vamos prosseguir e executar essa consulta. Podemos ver aqui que todos os nossos resultados de retorno são compostos pelo ACDC Então, se quisermos, também podemos desativar esse limite aqui e obter a lista completa de linhas ou a lista completa de registros. Podemos ver que cada registro aqui cumpre esse critério do ACDC Agora também podemos fazer outros tipos de comparações. Por exemplo, outra coisa que podemos fazer é menor ou igual a. Agora, é claro, não vai fazer muito sentido comparar menos ou igual a com um nome, porque então estamos fazendo uma classificação de texto estranha, que será baseada principalmente em coisas alfabéticas Não vai fazer muito sentido aqui. Vamos usar uma coluna diferente. Use a coluna de milissegundos aqui. Digamos que, onde os milissegundos sejam menores ou iguais a, e vamos escolher dois 100.000 milissegundos, 200 segundos Estamos selecionando todas as linhas ou todas as colunas, em vez da faixa em que os registros atendem a esses critérios, em que a coluna de milissegundos é menor ou igual a 200.000 Vamos continuar e limitar nossa resposta novamente. Então, vamos executar isso. Agora podemos ver se rolarmos para a direita aqui, todas as nossas faixas têm um tempo menor que 200.000 milissegundos, menos de 200 Novamente, podemos retirar a declaração de limite. Execute isso na íntegra em vez de obter todos os valores retornados Podemos ver que todos eles aqui têm tempos menores que 200.000 milissegundos, menos de 200 Também podemos fazer um valor maior ou igual a. Tudo que seja pelo menos 200.000. Isso, e obtemos tudo o que tem milissegundos aqui acima 200.000 milissegundos, como podemos Também podemos simplesmente retirar os iguais e dizer maior que ou também podemos fazer apenas menos então podemos ver que também podemos fazer uma filtragem específica A principal diferença, é claro, usando menos que ou menor que ou igual a, é que o igual a dois também inclui tudo o que é igual a 200.000, enquanto o menor que incluiria apenas aquelas instâncias menores que 200.000 Por exemplo, aqui teríamos um, nove, nove, 999. Essa seria a instância mais alta que podemos incluir assumindo que tudo é inteiro aqui, porque, caso contrário, seríamos iguais a 200.000 e, portanto, isso seria igual e só seria incluído no caso menor ou igual, ou quando verificamos a igualdade, ou quando verificamos se há maior 20. 18Conditionistamisto: Então, acabamos de ver como podemos fazer alguma filtragem básica procurando igualdade. Estão à procura de menor ou maior que ou menor do que igual ou maior ou igual a. Mas e quando queremos encontrar todos os, por exemplo aqui na coluna de compositores, todos os discos onde Angus Young, um dos compositores. Atualmente não podemos fazer isso porque se olharmos, por exemplo, onde compositores iguais a Angus Young, não nos dará esse valor porque não é exatamente igual a ele. Existem também outros componentes para ele. E então atualmente não podemos usar a igualdade para encontrar todos esses registros porque também há outros elementos aqui, mas há outras coisas que podemos fazer. Então vamos dar uma olhada nisso agora. Então, primeiro de tudo, vamos escrever nossa declaração select novamente, selecionar todas as colunas da faixa. E vamos limitar nossos resultados agora. E novamente, aqui vamos ter a declaração onde. Agora queremos encontrar onde Compositor, e queremos encontrar onde Angus Young está no compositor. Então o que podemos fazer é usar a palavra-chave like. E então vamos dizer onde está o compositor. E então temos uma mensagem aqui, para podermos dizer Angus Young. Mas neste caso, ainda estaríamos à procura de correspondências exactas com isto. Mas há alguns personagens que podemos colocar que dão basicamente algum espaço para tipo de expansão. Então, se usarmos um percentual, então isso significa onde este componente está aqui. Mas o percentual significa que podemos ter qualquer coisa depois deste ponto. E o percentual na frente também significaria que temos qualquer coisa na frente. Então podemos ter várias quantidades de caráter na frente. E então o percentual significa exatamente como muitos personagens aqui. Mas o importante é que em algum lugar dentro nós combinamos exatamente Angus Space Young, assim. Se levássemos a pessoa na frente, seria a fila teria que começar com Angus Space Young. E depois disso podemos ter qualquer coisa. E se tivéssemos, por exemplo, o percentual e a fronteira, então basicamente teríamos que terminar com Angus Space Young. Então, para ser seguro, podemos usá-lo assim, que significa que pode haver qualquer coisa na frente e qualquer coisa atrás. Mas em algum lugar dentro do nosso registro, precisaríamos ver exatamente esse pedaço de texto aqui. Então vamos em frente e executar isso. E assim podemos ver que todas as linhas aqui contêm Angus Young. E vamos tirar ou limitar declaração aqui e uma reexecutar isso e rolando através de um resultado, podemos ver agora que temos mais resultados do que todos contêm Angus Young. E de fato, em todos esses casos, Angus Young é a primeira parte desta entrada aqui. Então nós poderíamos tecnicamente também apenas tirar este símbolo percentual aqui. E nós ainda conseguiríamos o resultado porque não há nada na frente, pelo menos neste caso, mas não podíamos ter certeza disso de antemão. E se quiser ficar a salvo, ainda podemos deixar isso aqui, caso mais tarde seja registrado um registro onde Angus Young não seja o primeiro nome lá dentro. Mas o que acontece se tirarmos este símbolo de última porcentagem aqui? Bem, então, agora não vamos receber nada devolvido porque nenhum dos registros termina com Angus Young e não deixamos mais a opção de ter outros personagens depois. Então precisamos, neste caso, certeza de que temos outros personagens depois. Só para ter certeza de que há casos em que a corda Angus Young está contida dentro, mas também há espaço para outros valores também serem contidos dentro do mesmo elemento aqui. Agora, há também um personagem selvagem diferente que podemos usar. Em vez de usar o percentual, que basicamente perde espaço para qualquer número de caracteres, podemos colocar algo como um sublinhado. Agora o sublinhado significa que pode haver qualquer caractere aqui. Então, por exemplo, vamos substituir este y por um sublinhado. E se executarmos isso, vemos que ainda teremos o mesmo resultado porque estamos procurando onde temos espaço angus. E então este sublinhado aqui significa que qualquer caractere, qualquer caractere pode estar aqui, não também, tem que ser exatamente um. E é neste caso, temos o y aqui, e então temos a UO e G. Se tirarmos o espaço aqui, não funcionaria mais. Porque agora já não temos apenas um personagem aqui. Mas nós poderíamos colocar um símbolo percentual aqui, o que significa que há qualquer número de caracteres pode ser também entre aqui. Só precisamos de ter, em algum momento, o Angus. E depois precisamos ter. Neste ponto. Então você pode ver que existem diferentes opções para nós. Um deles vai ser o sublinhado, que nos permite substituir, mas sim ter a opção de ter um caractere livre. E então temos as porcentagens, que nos permitem ter a opção de ter tantos caracteres quanto possível. Agora, enquanto estamos fazendo tudo isso, a capitalização é realmente muito importante. Se mudássemos isso para ser minúscula, não funcionaria mais porque já não temos exatamente esse jogo. Então o que podemos fazer é usar uma declaração diferente aqui chamada “Eu gosto”, que significa que é insensível aos casos. Então, neste caso, não se importa se há letras maiúsculas ou minúsculas. E só olha se temos essa correspondência de texto e ele não considera casos, é insensível a maiúsculas e minúsculas. E assim podemos ver neste caso que funciona novamente porque ainda temos o texto aqui. Mas desta vez usando a IA da mesma forma foram realmente ir em caso insensível. Então estamos ignorando se tudo é maiúsculo ou minúsculo. E estamos apenas recebendo a correspondência onde o texto é o mesmo. E você pode ver que podemos capitalizar o G aqui, por exemplo. E ainda teremos a mesma correspondência. Porque tudo aqui ou a correspondência que estamos fazendo daqui até aqui vai ser insensível a maiúsculas e minúsculas. Agora, em alguns casos, podemos não estar procurando por correspondências de texto como este, mas estaríamos procurando por um certo número de valores. Por exemplo, vamos dar uma olhada em nossos rastros aqui. Talvez algo que queremos são todas as faixas onde o ID do álbum é um ou o ID do álbum é quatro. Estamos à procura de dois casos. Queremos ambos os álbuns 14 ou todas as faixas que são de Al meu d1 e ID do álbum para. Então, como podemos fazer isso? Bem, em primeiro lugar, vamos mudar sua coluna aqui novamente. Vamos dizer onde está o ID do álbum. E novamente, temos que usar as aspas aqui porque nossa Criar tabela foi definida com as aspas para as colunas. Normalmente, como eu disse, as aspas são opcionais. Mas neste caso, porque a nossa tabela era encontrar com as aspas, temos que usá-los. E agora estamos procurando os casos em que a identificação do álbum está. E agora as idéias do álbum que estamos procurando um 14. Então estamos dizendo que estamos procurando por todas as colunas das faixas aqui e todos os registros das faixas onde esses registros têm a coluna ID do álbum onde o valor está em um ou quatro. Então, se executarmos isso, podemos ver aqui agora todos os registros que retornamos têm ID do álbum, um ou quatro. E também podemos fazer, por exemplo, um para informar. E como você pode ver, podemos expandir isso tanto quanto quisermos. Mas há também alguns casos em que talvez queiramos escolher uma série de números. Então, por exemplo, digamos que queremos encontrar todos os álbuns com ID de álbum de um a cinco. Então podemos fazer, por exemplo, 12345 assim e executar isso, o que nos dará nossos resultados. Agora, isso funciona, mas não é o ideal, porque temos que digitar tudo isso. E ainda funciona porque temos cinco números aqui. Mas imagine que tínhamos 500 ou até mais ou imaginando que estávamos procurando por um intervalo de datas. Nada disso funcionaria mais. E há uma maneira melhor de fazermos isso. Agora, uma dessas maneiras que já vimos de antemão, que é usar maior que igual ou menor que ou igual. E então podemos encadear as condições juntos, que é o que aprenderemos em breve. Mas, na verdade, há outra declaração que podemos fazer com apenas chamada entre. Então podemos dizer que estamos procurando os casos em que o ID do álbum está entre 1, sem parênteses aqui, e cinco. Então, novamente, vamos selecionar todas as colunas da tabela de controle. E vamos filtrar pelos registros onde os registros aqui onde uma rosa tem uma identificação de álbum entre 15. Então, executando isso, podemos ver todos os nossos valores aqui estão entre 15, inclusive em ambas as extremidades. E agora, como você já deve ter adivinhado, incrível por causa da sugestão que recebemos do nosso editor SQL aqui. Também podemos não fazer entre, o que significa que só vamos olhar para os registros onde os valores estão. O ID do álbum não está entre 15. Então, se executarmos isso, vemos que tudo aqui tem valores não entre 15. E esta declaração NOT também funciona para as outras coisas que olhamos. Por exemplo, não gosto. E então aqui podemos fazer AC, DC. Então, qualquer lugar onde o compositor não é como este texto aqui, AC , DC, que vai nos dar todos os discos onde o compositor não é esta string ac-dc. 21. 19Joining 19JoiningConditionalsHB: Então agora já sabemos uma boa quantidade de filtragem. Mas às vezes até mesmo a filtragem que conhecemos atualmente não é suficiente. Às vezes precisamos fazer mais. Às vezes precisamos juntar condições específicas de filtragem para realmente obter os resultados que queremos. Então, como podemos fazer isso? Bem, vamos trabalhar nisso com um exemplo. Vamos tentar encontrar todos os discos aqui onde o nosso compositor é igual a AC, DC e o comprimento da música é maior ou igual a 250 mil milissegundos. Então, vamos dizer selecionando todas as colunas da tabela de controle. Vamos filtrar as linhas onde o compositor. E agora podemos dizer igual ou podemos usar o tipo aqui. Mas vamos usar um era igual a porque queremos igualdade exata. Então vamos dizer onde os compositores iguais a AC, DC e a coluna de milissegundos é pelo menos maior ou igual a 250 mil milissegundos. Então, se rodarmos isso, podemos ver agora nossos resultados são todas as músicas do ac-dc são todos os cromossomos neste banco de dados, onde aqui os milissegundos são maiores ou iguais a 250 mil. Nós podemos, claro, também mudar isso e procurar por menos ou igual a 0, que neste caso eu sou só nos dá um registro. Podemos ver que podemos usar a instrução e aqui para fazer alguma filtragem. Mas vamos tornar isso ainda mais complexo. Digamos que queremos encontrar todos os casos em que as faixas milissegundos são maiores que 250 mil. Mas nós só queremos as músicas onde os bytes são menores que. Chegamos aqui, três e depois mais três. Então nós temos 10 milhões é uma espécie de ordem de magnitude com que estamos trabalhando. Então queremos encontrar todas as músicas onde os bytes são menos de 10 milhões. Então podemos acrescentar se quisermos. Outra condição aqui, digamos e somos bytes é menor ou igual a dez milhões. E alguém pode comandar isso. E então podemos ver que temos essas faixas específicas retornadas. Alternativamente, em vez de encadeamento com e também podemos usar ou declarações. Então, por exemplo, vamos procurar todas as músicas que são feitas ou vamos começar com todas as músicas que são feitas por AC, DC ou têm pelo menos 1.050,000 milissegundos de duração. Então a declaração de OR aqui significa que estamos procurando para corresponder a qualquer uma dessas condições. Então vamos em frente e executar isso. E podemos ver aqui ou temos ac-dc, nesse caso, como podemos ver aqui, podemos encontrar a linha. Aqui vamos nós. A coluna de milissegundos é inferior a 250 mil. Ou nos casos em que os compositores não ac-dc, todos eles milissegundos é pelo menos igual ou superior a 250 mil. Então podemos ver aqui que temos uma declaração ou. Agora o que também podemos fazer isso é legal, é que você pode continuar encadeando condições usando parênteses. Então, por exemplo, vamos olhar para todas as músicas onde o compositor é ou ac-dc ou a faixa é mais de 250 mil milissegundos. Bud É bytes também é menor ou igual a 10 milhões. Portanto, queremos AC, DC ou pelo menos 250 segundos e menos de 10 milhões de bytes. Então, qualquer uma dessas duas condições, mas então a segunda temos que fazer. Então o que podemos fazer é usar parênteses aqui. E então podemos dizer, e bytes é menor ou igual a 10 milhões. E então o que vai acontecer é que esta afirmação vai ser avaliada como uma só. E vai ser comparado a este. Então, ou temos este ou temos o resultado aqui onde ambas as condições precisam ser cumpridas. Então você pode ver que há muito que você pode fazer com uma filtragem usando o e na ordem, bem como usar parênteses para decidir quais condições precisam ser unidas. Agora, é claro que atualmente nós apenas usamos coisas como igual a ou maior do que igual a ou menor que igual a. Mas isso também funcionará bem se colocarmos aqui, por exemplo, similares, ou se colocarmos lá em um intervalo, tudo funcionará da mesma forma. Podemos usar as outras palavras-chave que também aprendemos em onde declarações aqui, e também continuar mudando as condições usando os remos, usando os ands e colocando parênteses em torno de condições que queremos agrupar como um parênteses ou em vez de que queremos agrupar juntos como uma unidade. E também podemos continuar encadeando parênteses. Então, por exemplo, aqui, podemos então colocar outros parênteses e fazer mais algumas coisas, por exemplo, e bytes é menor que 10 milhões. Ou eu não sei, vamos pensar em algo ou um compositor é como. E então, na verdade, vamos mover isso para uma nova linha para tornar isso mais limpo e mover isso para uma nova linha. E o compositor é como Angus Young. Observe que estamos usando a luz aqui, não a que eu gosto, então precisamos usar o invólucro correto. Então, neste caso, e vamos nos certificar de que fechamos os parênteses 2. Estamos procurando onde o compositor é como ac-dc, ou onde os milissegundos são maiores ou iguais a 250 mil e nossas mordidas são menos de 10 milhões. Ou compositores como Angus Young. Então vamos fazer isso para ver os resultados. E então o que fazemos aqui, vamos retroceder. Ou verificamos, primeiro lugar, temos a condição aqui fora. Então tudo o que é AC-DC vai estar aqui. Mas agora o que temos aqui é, ok, ou estamos procurando por menos ou igual a 10 milhões de bytes ou o compositor precisa ter Angus Young nele. E então, se qualquer um desses dois for verdade, também precisamos descobrir que os milissegundos são maiores ou iguais a 250 mil. Então, por exemplo, podemos ver neste registro aqui, temos os bytes sendo maiores que 10 milhões. Mas nosso compositor é como Angus Young. Então esta parte da condição é cumprida, que torna esta ou afirmação verdadeira. Este aqui. Então este é verdade. Agora precisamos que este e este sejam verdadeiros. O que significa que nossos milissegundos precisam ser maiores ou iguais a 250 mil, que é o que temos aqui. Então nós temos, este é verdadeiro, e este é verdade. Agora precisamos dizer ou usar compositores como AC, DC, que é falso, ou onde todo esse segmento aqui era verdade, o que não é neste caso. Então podemos ver que podemos fazer lógica bastante complicada usando o filtro aqui por encadeamento juntos são diferentes operações como, como V igual a IR que eu gosto no meio, bem como usar os ands e os ors e fazer parênteses para agrupar coisas que queremos ter agrupadas. 22. 20de a 20NegatingConditionalsHB: Certo, agora vimos um monte de filtragem onde as condições são verdadeiras. Mas, em alguns casos, queremos que as condições não sejam verdadeiras. Agora nós meio que já vimos isso, mas vamos dar uma olhada mais detalhada nisso. Então, voltando para a nossa tabela de faixas aqui, vamos primeiro de tudo, basta olhar para todos os casos em que Composer é um não igual a AC, DC. Então, o que podemos fazer aqui, você pode selecionar, basta selecionar todas as nossas colunas da tabela de faixas e ciente do compositor. E agora não ter igual, e podemos ter um ponto de exclamação igual a. E então aqui vamos colocar o texto ac-dc. Então isso vai nos dar todos os registros onde o compositor não é igual a AC, DC, como podemos ver aqui, nenhum desses registros contendo CDC. E o que nós também poderíamos fazer aqui porque nós temos texto aqui. Então poderíamos dizer não como ACC, que significa todos os casos em que não é como este texto aqui, que nos dará o mesmo resultado neste caso. Agora também podemos fazer outras coisas. Por exemplo, não entre, o que nós meio que vimos. Então podemos dizer que não entre. E queremos dizer porque neste caso entre não faz muito sentido para a coluna do compositor, já que é tudo texto. Então vamos usar o ID do álbum. Então queremos encontrar todos os discos onde o ID do álbum não está entre 46. Então isso vai nos dar todos os discos aqui são ID do álbum não está entre 46, então não quatro, não cinco, não seis, e tudo o mais que vamos conseguir. Ou também podemos fazer nada aqui. E então colocando nossos parênteses, que significa que o ID do álbum não está em 46, o que significa que não é igual a 46. Então, se corrermos esse risco agora vamos obter o ID do álbum cinco porque não estamos usando-os entre, mas agora estamos especificamente combinando as instâncias aqui. Assim, podemos ver que podemos usar o não é igual a dois, por exemplo, como este para fazer negação para o caso de igualdade. E podemos fazer a declaração NOT para alguns dos outros métodos mais complexos onde temos. Agora você pode, você pode estar se perguntando, bem, que tal o oposto de maior do que igual a? Como podemos negar isso? Bem, nós já temos uma declaração para o que é o menor que. Então podemos dizer qualquer coisa que não seja maior ou igual a será menor que. E tudo o que não é menor que, pode ser maior ou igual a. E então podemos obter a mesma coisa, vice-versa. Agora, mais uma coisa que eu quero acrescentar aqui, se nós apenas voltar para alguns de nossos resultados anteriores para o meio, é que em alguns casos nós podemos realmente querer ordenar nossos resultados também. Então, vejamos os resultados disso. Você tem o nosso ID de álbum não está entre 46. Eu precisava voltar mais longe? Problemático de novo? Ok. Estranho. Parece estar bem. Então vamos pedir tudo pelo nosso ID de álbum aqui. Então, a instrução ordem BY que já aprendemos, mas na verdade tem que haver uma ordem específica para os locais onde estamos colocando essas instruções SQL. Então SARSA selecione e temos o de. Neste caso, vamos ter o onde e a ordem por vai vir depois. Assim, por exemplo, queremos ordenar por ID de álbum em ordem decrescente, o que significa mais alto primeiro. Então, se rodarmos isso, você pode ver que começamos com o ID de álbum mais alto e vamos para o mais baixo. Agora é importante que esta ordem BY venha depois da declaração where. Porque se colocarmos isso antes da declaração “where “, então vamos ter um erro porque, bem, vamos executar a coisa toda porque não pertence lá. Essa não é a ordem correta da sintaxe SQL. Então Dasa vem depois. Agora também, a mesma coisa com a declaração de limite. A declaração de limite tem que chegar no final. Então, tudo o que aprendemos para esta ordem BY declarações ainda é verdade porque ainda fazer pedidos adicionais fazendo vírgulas aqui. Mas é importante que a ordem em que estamos fazendo esses comandos esteja nessa ordem específica. Neste caso, ele vai começar com selecionar e a partir da instrução where, em seguida, a ordem BY e, em seguida, temos o limite porque se ele está em outra ordem e não vai funcionar. 23. 21FilterNullValuesHB: Agora há mais um caso especial de filtragem que ainda não analisamos. Então vamos dar uma olhada na nossa mesa de compositores novamente aqui. Algumas dessas instâncias podem ter valores ausentes, que são representados aqui como valores nulos. Então, atualmente, não há nenhuma maneira real de sabermos como verificar isso ainda. Então vamos dar uma olhada neles. Então vamos primeiro de tudo, selecionar todas as nossas colunas de nossa mesa de caminhão, filtrando para os registros onde o compositor. E agora queremos dizer tudo. Queremos encontrar todos os casos em que o compositor é nulo aqui. Então, para fazer isso, nós realmente temos que escrever é nulo. E, em seguida, um ponto e vírgula apenas para terminar ou consulta SQL aqui e, em seguida, executar uma corrida. E então agora temos todos os casos em que o valor aqui na coluna compositor é nulo. Agora, o importante é que nós não fazemos o que é igual aqui, porque isso não está correto. Queremos ter certeza de que o fazemos é nulo. Essa é a declaração correta a usar. Agora, para a negação, vai ser bem simples e talvez você já tenha visto isso na sugestão de código. Tudo o que você precisa fazer é escrever NÃO É NULO. E isso vai nos dar todos os casos em que o compositor não é conhecido. E então isso novamente vai funcionar como qualquer outro condicionamento que tivemos aqui. Novamente, neste caso, nós apenas temos um caso especial para usar quando não há valores contidos dentro. Mas tudo o resto que aprendemos sobre a declaração onde ainda é verdade. 24. 22CreatumaNewColumsAndna 22CreatingNewColumnsAndArithmeticsHB: Então, nesta lição, vamos dar uma olhada em como podemos fazer algumas operações em nossas colunas. Vamos abrir nossa mesa de pista novamente aqui. E a primeira coisa que devemos fazer é tentar converter essa coluna de bytes em vez de kilobytes. Então, para fazer isso, vamos dividir tudo aqui por 1024. Então, como podemos fazer isso? Bem, voltando ao nosso console, vamos escrever select, e então vamos deixar estrela aqui como um modelo por enquanto, mas vamos voltar e mudar isso em um segundo. Selecionamos estrela da pista. E vamos também limitar nossos resultados a cinco por enquanto, apenas no caso de um tipo de boa prática ou nossas mesas agora tubulando aqui. Mas caso tivéssemos milhões de linhas ou algo assim, seria bom testar e retornar apenas um pequeno segmento dessas linhas. Tudo bem, então vamos escolher por enquanto e apenas a coluna de bytes. E vamos convertê-lo também dois kilobytes. Então a primeira coluna que queremos tirar vai ser mordidas. E a segunda coluna que queremos retirar é novamente a coluna bytes. Mas aqui queremos dividi-lo, dividir por 1024 para torná-lo em kilobytes. Então, podemos usar a barra aqui para a divisão e colocar o número 1024. E isso vai dividir os valores nesta coluna aqui por 1024. E então podemos usar um pseudônimo para, para torná-lo mais, para dar-lhe um nome melhor. Então podemos salvar isso aqui como kilobytes, por exemplo. Então vamos em frente e executar isso. E podemos ver aqui, aqui temos os bytes e aqui temos a mesma quantidade, mas em kilobytes em vez disso. Agora, é claro, a operação da divisão não é a única coisa que podemos fazer. Nós também poderíamos fazer outras coisas, como, e talvez, vamos criar algumas novas colunas para isso. Então vamos multiplicar nossas mordidas. Pode multiplicá-lo por dois, por exemplo. E aqui podemos salvar isso como bytes multiplicados apenas para ser capaz de diferenciá-los. Podemos fazer subtrações. Por exemplo, podemos pegar nossos tubos e subtrair algo dele. E, em seguida, aqui podemos chamar este sub bytes para bytes subtraídos. E então vamos também fazer o outro, que vai ser uma adição. E aqui este vai ser o nosso bytes adicionado. Então eu vou colocar alguns espaços aqui para tornar toda a formatação agradável. Então, se executarmos isso, você pode ver aqui há um monte de operações diferentes são operações aritméticas simples que podemos fazer em nossas colunas. Então você pode ver aqui nós meio que temos todas as operações padrão disponíveis para nós. Nós também podemos fazer outras coisas legais em vez de apenas usar valores numéricos fixos. Também podemos usar outras colunas. Por exemplo, vamos tentar encontrar uma nova coluna. Esse é o número de bytes por milissegundo do comprimento da música. Então vamos dividir os valores na bytes por aqueles na coluna de milissegundos. E então obtemos o número de bytes por milissegundo e a faixa. Então, para fazer isso, vamos pegar nossa coluna de mordidas e vamos dividi-la pela coluna de milissegundos. Vamos dar a isto um pseudónimo chamado bytes por milhão. Então bytes por milissegundo. E mais uma vez, podemos comandar isto. E podemos ver aqui agora que temos valores diferentes do número de bytes usados para armazenar a música por milissegundo comprimento da música. E não podemos fazer outras coisas legais aqui. Por exemplo, podemos encomendar agora por nossas mordidas por milissegundo, se você quiser. Então, talvez a primeira coisa que devemos fazer é apenas tirar esta declaração de limite aqui. E vamos fazer isso mais uma vez para obter os resultados completos. E vamos também tirar o nome da faixa para que possamos realmente ver o que esta faixa é. E então nós vamos remover isso agora e apenas tirar o nome da pista. E não precisamos fornecer nenhum nome extra. Nós não precisamos fornecer quaisquer adições extras ou qualquer coisa aqui. Porque eles não são, eles realmente não significam muito aqui. Estas multiplicações são subtrações, mas como você pode ver, nós não podemos fazê-las. Tudo bem, então temos nossas mordidas calmas. Se rodarmos isto, temos os nossos kilobytes, temos o nome da música e também os bytes por milissegundo. Então vamos em frente e ordenar nossos resultados pelos bytes por milissegundo em ordem crescente. Vamos pedir por BY agora. Podemos ter maneiras diferentes. Então, por exemplo, podemos pedir por quatro ser a maneira mais rápida. E é meio fácil de ver aqui porque agora ainda é fácil contar o número de colunas que temos. Você também pode encomendar por bytes por mililitro, se quisermos. Então podemos ver aqui obtemos os mesmos resultados ou podemos realmente repetir a operação e ordem por bytes por milissegundos como este. Este é, de longe, o menos ideal. Provavelmente. É muito melhor usar o alias de coluna real que você designou aqui. Mas só para mostrar, podemos fazer isso e se também podemos fazê-lo em ordem decrescente, é claro. Então lá vamos nós. Agora podemos ver que existem diferentes maneiras de fazermos tipos de operações aritméticas simples, tanto com tipo de valores naturais como também usá-lo entre diferentes colunas. Agora, vamos fazer outra coisa. Porque também aqui podemos tornar isso mais complexo adicionando coisas como parênteses. Então vimos isso quando estamos fazendo condicionais de junção e onde tínhamos a opção de usar ands e ors, bem como parênteses. Podemos fazer a mesma coisa aqui. Então vamos pegar algo e pegar nossa identificação de caminhão. E vamos adicionar a ele o id do álbum multiplicado pelo ID do tipo de mídia. Então aqui, por exemplo, vamos pegar nossa identificação de caminhão. E então nós vamos adicionar. E então podemos pegar nosso ID do álbum mais o ID do tipo de mídia, vezes o ID do tipo de mídia. Isso não significa muito, mas só para mostrar que podemos fazer tudo isso. Então, em primeiro lugar, temos uma simples adição e multiplicação. E isso podemos chamar agora como coluna personalizada. E nós vamos em frente e executar isso. Podemos ver aqui que temos os resultados do que quer que seja. Mas se usarmos parênteses, podemos realmente fazer r mais operação primeiro, e então podemos fazer nossa operação de multiplicação. Assim como fizemos para nossas condicionais onde podemos usar parênteses, também podemos fazer exatamente a mesma coisa aqui para usar parênteses. E então podemos ver, obviamente, agora essa coisa vai ser avaliada como uma unidade. E então o resultado disso vai ser multiplicado. Então, como você pode ver, nós também podemos fazer modificações em nossas colunas aqui. Fazendo divisões de coluna são tipo de dividir uma coluna pela outra. Também podemos multiplicar colunas uns pelos outros. Podemos adicionar colunas uns aos outros, e também podemos usar parênteses para ditar a ordem das operações que queremos usar. 25. 23DatatypeConversations 23: Agora, anteriormente vimos que podemos fazer, por exemplo, divisões aqui. E fizemos isso dividindo nossa coluna de mordidas por um 1024 para convertê-la em kilobytes como vemos aqui. Mas você provavelmente percebeu, ou você provavelmente pelo menos se perguntou, que dividir todas as nossas mordidas, sempre comprar um 1024. É muito improvável que sempre tenhamos valores inteiros perfeitos aqui. E você está absolutamente certo. Não é muito provável. E muitos deles são números de ponto flutuante são, muitos deles são números reais ou números decimais. Mas eles foram convertidos em inteiros porque temos um inteiro aqui e um inteiro aqui. Então estamos fazendo divisões inteiras. Então, nesta lição, vamos analisar como podemos mudar nossos tipos de dados para valores diferentes. Agora, neste caso, vai ser bem fácil porque uma coisa que podemos fazer é mudar o nosso 1024 para 1024. E isso vai mudá-lo de um inteiro para um número de casa decimal. Então, se executarmos isso, podemos ver aqui agora nós realmente temos decimal está incluído em nossas divisões. E assim podemos ver os resultados aqui. Obviamente têm números decimais, enquanto que de antemão nós apenas tê-los arredondados para o número inteiro mais próximo. Mas também há maneiras diferentes de fazermos isso. E já que nem sempre vamos usar números codificados como este. Mas muitas vezes nós talvez queira se referir a colunas específicas ou queremos alterar os tipos de colunas. Isso nem sempre é possível. Então, por exemplo, não podemos fazer a mesma coisa para a coluna de bytes. Não podemos colocar um 0 aqui. E você pode ver que se rodarmos isso, vamos ter um erro porque novamente, isso não vai funcionar. Portanto, há outras maneiras de nos aproximarmos fazendo a mesma coisa aqui. Isto vai ser chamado de “typecasting”. Então o que podemos fazer é, e vamos tentar isso na coluna bytes. Primeiro. Podemos lançar, podemos lançar nossas mordidas. E então colocamos aqui a palavra-chave As. E então vamos colocar aqui o tipo de dados. E agora podemos converter nossa coluna e alterar o tipo de dados. Por exemplo, podemos alterá-lo atualmente é inteiro padrão, que podemos ver também se abrirmos isso e olharmos para os bytes, podemos ver que é um inteiro aqui. Então podemos moldar, por exemplo, para ser um tipo de dados real. Então, se executarmos isso e, neste caso, nossos resultados não vão mudar só por causa da maneira como eles são exibidos. Mas os nossos valores aqui são, na verdade, um tipo real. Então vamos aplicar a mesma coisa abaixo e realmente ver alguns resultados. Então vamos lançar nosso número 124 em vez de estar em um número real. Então vamos lançar 1024 como um número real. Então este aqui não vai ser um número real aqui em baixo. Então, se executarmos isso, vocês podem ver aqui agora que novamente temos essa divisão de ponto flutuante. Novamente, agora têm casas decimais. E os tipos de dados que podemos colocar aqui são os tipos de dados que aprendemos na lição de introdução. Assim, você pode transmitir para qualquer um dos tipos de dados que estão disponíveis para nós. Então podemos fazer o elenco assim. E como você pode ver, nós podemos, nós podemos lançar em inteiros individuais. Nós também podemos lançar em colunas completas. Por exemplo, como vimos acima. Podemos lançar nossas mordidas também para ser um tipo de dados numérico real. Então, se executarmos isso e pudermos ver que esses são os resultados que vamos conseguir. Agora. Tudo o que estamos fazendo aqui é mudar o tipo de dados. Agora, uma maneira de fazer isso, novamente é usar a instrução CAS aqui. Mas outra maneira de fazer isso é, e eu vou mostrar isso primeiro em nosso 1024, mas isso que funciona em todos os outros lugares também. Nós também podemos lançar isso usando esta sintaxe. Então vamos colocar dois pontos. E, em seguida, aqui podemos colocar o tipo de dados que queremos transmiti-lo para. Então, correndo assim. Você pode ver aqui, ou tendo isso, ambos são equivalentes. Bem, trilhões, ambos são equivalentes. Então, há maneiras diferentes que podemos lançar. Um deles é o que acabamos de ver, que é o elenco como o outro está usando esses dois pontos duplos, que nos permite lançar o valor na frente deste novo tipo de dados. Então também podemos fazer isso, por exemplo, para nossas mordidas aqui. Mas vamos converter isso em um texto. Porque agora vamos ter um problema, já que estamos tentando dividir o texto por valor numérico e essa operação não está definida. Então podemos ver aqui, podemos lançar ambos os valores individuais que colocamos aqui, o que, claro, não vai ser tão útil. Mas também podemos lançar valores completos ou nossas colunas completas, mas também podemos converter nossas colunas completas dois tipos de dados diferentes. E isso pode ser muito bom para diferentes operações. Ou também se você for o tipo de dados e as colunas tiverem o valor errado. Por exemplo, se você estiver armazenando um valor numérico em vez disso como uma string, então, se você estiver tentando fazer divisões, ele não funcionará Mesmo se você tiver. Por exemplo, vamos olhar, bem, vamos pegar isso e convertê-lo em texto. E então se nós também convertemos isso em texto, então isso vai ser um problema para nós porque não podemos dividir texto por texto. Então, nesses casos, o que podemos fazer é lançar nossos valores de texto, dois inteiros, por exemplo. Podemos fazer a mesma coisa aqui. Queremos ter isso fora e bytes do cliente aqui, dois inteiros. E assim, em alguns casos, quando os tipos de dados são confusos em nosso banco de dados, por exemplo, ou também quando queremos fazer conversões de tipo de dados por diferentes razões, podemos usar a conversão com as duas sintaxes. Um deles é este dois-pontos duplos, e um deles é este elenco como sintaxe de tipo de dados. Dessa forma, também temos mais flexibilidade lidar com tipos de dados, bem como mudar para diferentes tipos de dados. 26. 24LogicStatamentsHB: Agora, em alguns casos, talvez também queira incluir instruções lógicas em consultas SQL. Então vamos olhar para um exemplo simples de como podemos fazer isso. Vamos pegar nossa mesa de pista aqui de novo. E vamos novamente passar pelos compositores. E agora vamos fazer uma nova coluna que basicamente diz sim ou não se o compositor for AC, DC. Então vamos dar uma olhada neles. Vamos em frente e, em primeiro lugar, basta selecionar tudo da nossa coluna de caminhões e limitar nossos resultados a cinco. Gosto de ter esse código esqueleto aqui porque depois disso você pode voltar e mudá-lo. Então, só para ter o esqueleto aqui. Então a primeira coisa que vamos fazer é escolher o compositor, qual coluna, apenas para que tenhamos o valor verdadeiro para comparar. E agora queremos fazer uma nova coluna. E podemos chamar isso, por exemplo, é AC, DC, que vai ser sim. Quando o nosso compositor aqui for AC, DC e não será de outra forma. Então, como podemos fazer isso? Podemos usar a instrução caso que faz parte do nosso, que é uma parte do SQL. Então podemos dizer caso quando compositor é igual a AC, DC, então sim, não. E então vamos salvar isso como AC-DC. Então vamos dar uma olhada nesta declaração completa aqui. A palavra-chave case indica que vamos iniciar uma declaração caso aqui. E, em seguida, temos a uma palavra-chave que diz quando esta condição, em seguida, fazemos o seguinte. Senão, temos isto. Agora, há mais uma coisa que nos falta no final de cada declaração de caso. Assim que acabarmos com todos os nossos casos, precisamos acabar aqui. Então ele começa com caso quando compositor é igual a AC, DC. E agora vimos essa comparação já quando estávamos olhando para a filtragem, especificamente as declarações onde. Então fazemos caso quando compositores ac-dc, então o valor vai ser SIM. Caso contrário, o valor será não. Fim para indicar que este é o fim da nossa declaração de caso. Então vamos fazer isso. E podemos ver aqui que temos duas colunas. Então o primeiro é nossos compositores aqui. E atualmente estamos limitando nossos resultados. Então vamos em frente e tirar esta declaração de limite e passar por mais alguns resultados para que você possa ver tudo onde não é igual a AC, DC que conhecemos. E quando é igual a AC, DC, temos, sim, como podemos ver aqui. Tudo bem, legal. Nós também podemos, claro, dividir isso em várias linhas para facilitar a leitura para que não saibamos, passar por tantas linhas. Então podemos fazer algo assim, por exemplo. E ainda nos dará os mesmos resultados. Agora, também podemos fazer mais coisas. Por exemplo, em vez de ter apenas 11 declaração, também podemos ter vários. Então vamos dizer que queremos ter uma verificação separada e verificar novamente quando o compositor é como. E agora vamos usar a declaração de luz que também vimos antes. E aqui vamos procurar por Angus Young, em qualquer lugar lá dentro. Então, vamos dizer “talvez “, não. Então vamos fazer isso de novo. E podemos ver aqui no caso em que Angus Young está dentro, talvez tenhamos no caso em que nem Angus Young nem AC DC estão lá dentro. Nós temos NÃO. E caso contrário, quando AC, DC está dentro, então temos sim. Agora, o importante que também devemos estar cientes aqui é que temos uma ordem específica. Então primeiro procuramos esta afirmação, depois procuramos esta afirmação. E esta aqui vai ser a nossa declaração de reserva. Portanto, dependendo da ordem em que você os coloca, seus resultados podem ou não mudar dependendo exatamente quais comparações você está usando. Agora, neste caso, usamos o igual e a declaração de luz. Mas é claro que também vimos outras declarações que podemos usar para comparação quando estávamos passando pela filtragem especificamente. Talvez para limpar isso um pouco mais. Vou colocar as declarações de quando e Venn nas mesmas linhas. Ou eu também posso dividir cada uma dessas linhas em linhas separadas, apenas algo que torna intuitivo para ler, mas também algo que impede nossas consultas SQL de apenas fugir muito estranho para a horizontal, que novamente também não o torna muito legível. Então, podemos ver que temos um monte de opções diferentes usando as instruções caso. E também podemos fazer outras coisas. Por exemplo, não precisamos colocar um valor de texto aqui. Podemos ter aqui, por exemplo, o 1. Aqui, podemos ter talvez 0,5. E caso contrário, podemos colocar 0. E podemos executar isso e podemos ver os resultados aqui. Então podemos ver que não estamos limitados apenas a colocar texto. No entanto, os tipos de dados que escolhemos precisam ser compatíveis uns com os outros. Por exemplo, algo que não vai funcionar é se colocarmos aqui, talvez porque agora ele não sabe qual tipo de dados escolher. Então você pode ver aqui ele está tentando usar um inteiro, mas então quando ele encontra o texto e ele simplesmente fica confuso. Portanto, certifique-se de que os tipos que você está usando são compatíveis uns com os outros. Como você pode ver aqui, tudo isso vai ser real como números. Então tudo isso deve funcionar bem. O que vamos usar mensagens de antemão. E, claro, podemos encadear, continuar a encadear essas declarações condicionais se quisermos, dependendo de outras coisas que estamos procurando. E podemos usar novamente esses operadores de comparação, que também vimos antes. Então, o que é legal sobre as declarações de caso é que agora temos uma maneira e lógica em nossas consultas SQL. E mais uma vez, estas vão criar novas colunas para nós. E essas novas colunas contêm valores que são especificamente compostos de instruções de caso que definimos aqui. Novamente, a sintaxe importante é apenas nós temos um caso para indicar reiniciar a instrução caso. Então, uh, quando eu indicar que estamos começando a comparação ou condicional aqui, então nós temos a condicional real que estamos procurando. Se essa condicional for verdadeira, então temos essa palavra-chave. Vamos assumir esse valor. Esta condição não é verdade. Vamos passar para a próxima, para a próxima declaração. Se houver uma instrução X1, observe esta condicional. Se esta condição for verdadeira, então vamos assumir esse valor e vamos continuar através de cada condição que temos. Se tivermos ainda mais quando. E, em seguida, declarações aqui em baixo. E então continuaremos a passar por tudo isso. E se todos esses falharem, então vamos reverter para esta outra declaração, que é quando todos os itens acima falharem, então vamos assumir esse valor. E então vamos salvar ou dar uma coluna. E este pseudônimo, como podemos ver aqui. 27. 25ManipulatumStringsHB: Então, nesta lição, vamos dar uma olhada em como podemos fazer algum corte de texto. Então vamos dar uma olhada em algumas de nossas colunas. E novamente, tipo de padrão de volta para a coluna do compositor, que temos usado muito nesta tabela de faixas aqui. Vamos tentar tirar o A no início de cada registro aqui. Então, para fazer isso, vamos selecionar apenas escrever nosso esqueleto, tudo da pista. E vamos limitar, limitar nossos resultados a cinco por enquanto. Então, novamente, o que nós queremos é que o compositor apenas para comparar, para ter certeza de que tudo está funcionando corretamente. E agora o que queremos fazer é pegar a coluna do compositor, mas queremos remover se houver um, o A no início. Então, como podemos fazer isso? Bem, há um SQL muito legal, há um recurso SQL muito legal que podemos usar chamado L Trump. E então o que podemos fazer aqui é colocar o texto ou recordá-los aqui. E então nós também vamos colocar o valor que queremos cortar longe do lado esquerdo. Então, por exemplo, se quisermos cortar o A, então vamos colocar VA aqui. E então podemos nos dar um alias, por exemplo, coluna aparada. Tudo bem, então vamos fazer isso. E agora podemos ver, ok, temos o nosso compositor. E se tivermos a nossa coluna de guarnição aqui, temos todos os casos em que há um A na frente. Temos o a aparado. Então vamos tirar nossa declaração de limite e olhar para os resultados completos. Então podemos ver quando há, por exemplo, Angus Young, você pode ver que ele é tirado quando há ac-dc, podemos ver que o A é tirado. E outros casos aqui, novamente, o A é tirado. Então podemos ver V L aparar olha para este personagem aqui no lado esquerdo. E se existir lá, vai levá-lo embora. Agora podemos estender isso mais. E se colocarmos aqui, por exemplo, vários caracteres como AC, então é claro que os resultados vão mudar porque Angus Young, por exemplo, não contém um C, mas o A é, podemos ver aqui ainda é aparado longe. Então, há uma quantidade específica de aparar que podemos fazer é que podemos ver do lado esquerdo na coisa importante a notar aqui é que o corte que estamos fazendo é sensível a maiúsculas e minúsculas. Então, se colocarmos aqui em minúsculas a, então nada vai acontecer. Porque, de novo, estamos fazendo coisas sensíveis a maiúsculas e minúsculas. Então precisamos lembrar que, que o que estamos usando aqui vai ser sensível a maiúsculas e minúsculas. Agora também, é claro, tem a opção de fazer uma guarnição de gravação e rtrim. E vamos tirar, por exemplo, o n, para que o n no final de Johnson seja levado embora. E então, se executarmos isso, podemos ver que todos eles agora são tirados. Onde quer que haja um n no final. Agora não tirei. Só rolando por isso, parece que Johnson é o principal. Então você pode ver os resultados aqui. Qualquer caso em que há um n no final, ele não é retirado agora. No caso de não queremos especificar se navio B, a esquerda ou a direita, e nós só queremos remover caracteres extras em ambos os lados. Então podemos fazer isso usando apenas guarnição. O que significa que vai, se encontrar este personagem de ambos os lados, vai levá-lo embora. Então, se executarmos esses resultados ainda serão principalmente o que tínhamos antes, só porque temos resultados sensíveis a maiúsculas e minúsculas. Então, neste caso, é improvável que qualquer um dos nossos compositores. Aqui, vamos começar com um n minúsculo, mas ainda temos a opção de tirá-lo de ambos os lados. E o que nós também podemos realmente fazer é podemos encadear operações. Por exemplo, podemos executar a guarnição primeiro, que procura o N em ambos os lados em termos de distância. E então, se quisermos, podemos então executar um corte L nos resultados. Então, por exemplo, digamos que aparamos o n. E então o que queremos aparar é, digamos v a no lado esquerdo. Então o que nós vamos fazer é primeiro nós vamos executar a declaração aqui. E então nós vamos obter a coluna resultante aqui, que é, por exemplo, o que nós tivemos aqui, Angus Young e então o Johnson não aconteceu n. E então nós vamos executar o corte L no resultado aqui, desta vez olhando para virar a capital a no lado esquerdo. Portanto, ser capaz de encadear essas operações juntos é, naturalmente, muito bom e muito útil. E em alguns casos você vai fazer isso. Por exemplo, se seus valores de data são meio confusos ou em um formato estranho e talvez haja espaços extras ou preenchimento extra é em torno de alguns valores de texto. E você pode simplesmente se livrar de todo esse lixo que não deveria estar lá para se certificar de que seus dados estão em um formato mais padrão. Então, na maioria das vezes você estará usando isso para fazer algum tipo de processamento em sua coluna, caso os dados tenham algum preenchimento estranho em torno dele. Ou você só quer tirar algumas coisas desnecessárias que não deveriam estar lá para que seus valores sejam realmente mais limpos. Agora, duas outras coisas legais que também podemos fazer para processar nossos textos um pouco, é que podemos fazer alguns casting. Podemos convertê-los em maiúsculas ou minúsculas. Isso pode ser muito bom porque desde então muitas vezes estamos lidando com a sensibilidade dos casos. Talvez em alguns pontos, nós realmente não nos importamos se Angus Young é escrito maiúsculas um MGUS ou se está escrito em minúsculas, um MGUS é todo maiúsculo ou todo minúsculo. Às vezes não queremos lidar com essas coisas de sensibilidade de casos. Então, uma boa solução para isso é apenas lançar tudo. Estamos convertendo tudo em maiúsculas ou minúsculas. Então, para fazer isso, podemos usar a palavra-chave opera. E vamos colocar aqui uma coluna de compositor novamente. Vamos dar a isso o alias, e vamos colocar um espaço aqui apenas para torná-lo mais legível como compositor superior. E então vamos também converter para minúsculas, que podemos fazer usando a palavra-chave inferior, novamente usando a coluna compositor. E então isso podemos ter aqui como compositor inferior. Então, executando isso, podemos ver aqui agora que temos a declaração do termo que tínhamos antes, a coluna original, tudo convertido em maiúsculas e tudo convertido em minúsculas. Então aqui podemos, por exemplo, também tentar depois que convertemos tudo para minúsculas. Vamos olhar para cortar qualquer um dos ácidos. Claro, vamos nos certificar de que estamos usando minúsculas S us aqui, já que tudo aqui vai ser minúsculo. Então isso deve tirar o, se nós apenas dar uma olhada aqui, o S está na frente aqui. E então temos também as estradas Taylor. Então, o S no final também deve ser levado daqui. Então vamos em frente e executar isso. E podemos ver, neste caso, ambos os SS foram levados. Novamente, isso pode ser realmente útil quando pode haver algum preenchimento ou algumas outras coisas em torno de seus dados e você quer fazer algum processamento em suas strings, apenas sendo capaz de tirar alguns desses valores. Agora podemos combinar isso, por exemplo, com o que aprendemos com o elenco. E vamos dizer que queremos tirar v dot 99 em cada, no final de cada preço unitário aqui. Então o que podemos fazer é dizer, tudo bem, então vamos pegar nosso preço unitário e vamos converter isso em texto. E então aqui, vamos cortar a partir do MOOC, nossa guarnição do lado direito, o ponto 99, já que agora vai ser valores de texto. E então, se quisermos, não precisamos, mas se quisermos, podemos converter isso de volta para um inteiro. Então lembre-se que podemos usar os dois pontos duplos ou você também pode usar a declaração como. E aqui podemos fazer o elenco. E para mostrar que este é um inteiro, podemos adicionar, por exemplo, mais um. E então este ano podemos economizar como preço unitário aparado. Então podemos fazer isso e dar uma olhada no lado direito aqui. Então o que fizemos foi converter ou um preço unitário para texto, esta coluna aqui para texto. Então nós despojamos no ponto 99 do lado direito, que agora tem todos os valores de texto. Então nós lançamos isso de volta para um inteiro e adicionamos um a ele. Assim, podemos ver, mesmo nos casos em que não estamos lidando com dados de texto, ainda podemos usar as outras partes do SQL que conhecemos e combinar essas operações juntas. Então podemos ver, por exemplo, aqui podemos usar algum bom casting para então fazer esta operação legal, convertendo entre o tipo de texto e, em seguida, de volta para inteiro. E, em seguida, ser capaz de usar também, por exemplo, as adições de inteiro aqui. E, claro, dependendo da sua situação, dependendo de suas necessidades, você pode chegar conosco. Você também pode fazer isso dentro das instruções caso, por exemplo, ou também em outros lugares. Então, novamente, muito disso você pode usar para apenas processar seus dados para ter certeza de que você pode obtê-los no formato certo que você precisava ou para ter certeza de que você pode fazer esse tipo de formatação ou ser capaz de mudar as coisas ao redor com base na sua necessidade. E, claro, porque isso funciona no texto, você ainda pode lançar tudo no texto como vimos aqui, e ser capaz de executar tecnicamente as mesmas operações em valores que não são inerentemente textos e, em seguida, apenas sendo capaz de convertê-los novamente mais tarde, se você quiser. Então, isso pode ser muito bom apenas para processamento de dados geral para garantir que você obtenha os dados e o formato real que você queria tê-los em. 28. 26StringPositionalInformaçãoHB: Agora, em alguns casos, podemos querer saber informações adicionais sobre os tamanhos são componentes de nossas cordas. Então vamos dar uma olhada nestes agora. Agora, existem diferentes maneiras de usá-los, e vamos usá-los agora para fins numéricos de VR. Mas podemos usá-los para o lado analítico para entender que tipos de valores estamos lidando. Mas também podemos usá-los para, por exemplo, transformá-los em instruções de caso para fazer operações condicionais específicas. Então vamos apenas escrever nosso esqueleto primeiro. Selecione tudo da pista, limitando nossos resultados. Cinco aqui. E o que eu quero fazer é entender o quão grande alguns nomes podem receber nosso banco de dados atual. Então, vamos pegar nossos nomes aqui. E eu quero saber quanto tempo os nomes de axônios podem ficar, porque talvez tenhamos atribuído um tamanho e queremos saber se o tamanho do gráfico de barras, por exemplo, atribuímos à nossa coluna de nome aqui é apropriado. Estamos chegando perto de atingir o limite superior desse tamanho var char é muito grande. Ou talvez algum outro propósito analítico que queremos saber o comprimento 4. Então, para fazer isso, podemos usar esta função chamada comprimento. Podemos colocá-lo dentro do valor que estamos procurando. Neste caso, vamos olhar para a coluna de nome. E então vamos nos dar um apelido como comprimento rural, ou talvez possamos chamar esse nome comprimento para torná-lo ainda mais descritivo. Então vamos em frente e executar isso. E agora podemos ver que isso vai nos dar quantos caracteres estão dentro do nosso texto aqui no lado da nossa string? Quantos caracteres individuais, incluindo os espaços, incluindo os parênteses, incluindo qualquer outro caractere especial, quanto tempo é neste caso os textos que temos? Então este é o resultado que podemos fazer isso. Talvez não queiramos mais isso. Mas o que não podemos fazer é talvez queiramos encontrar a maior coisa, então queremos vê-lo em ordem decrescente, pelo menos. Então vamos ordenar pelo comprimento do nome em ordem decrescente. Então, se executarmos isso, podemos ver agora, tudo bem, então o maior nome neste caso tem 123 caracteres nele. E podemos ver que temos três por 100. Temos cerca de 90 e assim por diante. Então você pode ver aqui a escala das coisas que estão acontecendo. Também podemos incluir isso se quisermos fazer uma declaração de caso. Então podemos dizer, lembre-se de colocar vírgulas entre colunas separadas. Caso. Quando o comprimento, basta manter essa maiúscula da coluna de nome é maior do que 50. Então assumimos o valor 50 mais. E, em seguida, a próxima declaração que podemos ter, quando o comprimento da coluna de nome é maior do que 40. Então assumimos 40 mais, ou podemos dizer 41 a 50. E então eu não vou escrever tudo isso. Em vez disso, vou apenas copiá-lo várias vezes e, em seguida, usar algum recuo. Assim por diante. Agora, quando o comprimento é maior que 30 e eu digo 31 a 40, este aqui vai ser 21 a 30, este vai ser 11 a 20. Caso contrário, vamos dizer menor ou igual a 10, terminando nossa declaração de caso. E, em seguida, aqui podemos dizer isso, por exemplo, Como bucket comprimento do nome. Então vamos em frente e executar isso. E agora podemos ver, ok, agora temos uma visão ainda mais rápida de, você sabe, em que categoria, por exemplo, isso se encaixa. Assim, podemos ver que também podemos usar isso em diferentes posições. Então podemos usá-lo diretamente. Mas é claro que também podemos usá-lo dentro declarações caso estão dentro de outras coisas, o que quer que seja que estamos procurando. Agora outra coisa legal que podemos fazer é encontrar posições de caracteres se eles existirem dentro de uma string. E podemos fazer isso usando a declaração de posição. E então aqui, por exemplo, podemos dizer a substring que estamos procurando. Então o que estamos procurando aqui no riacho principal que estamos olhando para ele. Então, por exemplo, vamos olhar para a primeira ocorrência da letra a na coluna compositor. Mas vamos converter isso em maiúsculas porque nós realmente não queremos diferenciar entre minúsculas e maiúsculas a é. Então estamos apenas procurando a primeira posição da letra A na coluna do compositor onde tudo é convertido em reis de cobre. E então podemos salvar isso ou dar um pseudônimo como uma posição. Então, se você está sobre isso, se há algum novo, bom, Se nós também imprimir a coluna compositor no lado para que possamos realmente também comparar os resultados. Então podemos ver se não há um interior, então ele vai nos dar uma posição. Agora esta posição, começamos a contar em um aqui. Então vai ser 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12. Então podemos ver aqui a primeira vez que o AI aparece, ele está na posição 12 em nossa string. No caso de ser 0, podemos ver que não aparece. E então em outros casos aqui, por exemplo, podemos ver que ocorre na posição 1. E assim por diante. Dessa forma, podemos procurar um valor específico ou podemos procurar, por exemplo, substrings. Por exemplo, podemos procurar por Angus. Sempre que isto aparecer completamente. Agora, para todos estes, vai ser 0 até encontrarmos encontrarmos a instância onde é Angus Young. Provavelmente é melhor fazer isso adicionando uma declaração onde, ano, onde compositor. E eu vou fazer, eu gosto, mesmo que nós podemos fazer isso em minúsculas, é melhor ter como maiúsculas para torná-lo mais legível. É parecida. Angus Young estava usando o olho assim, então não precisamos da capitalização aqui. Vou fazer de qualquer maneira, só porque parece natural. Então podemos ver aqui, ok, Agora podemos usar a filtragem só para fazer uma verificação mais rápida. E podemos ver RA. Então, a primeira vez que vemos Angus, a corda completa Angus aqui é uma. Nunca bem, já que fizemos essa filtragem onde você não a vê em nenhum outro lugar. Então também podemos procurar outra coisa. Por exemplo, a primeira vez que fomos ver jovens. E novamente, só para facilitar, vamos filtrar especificamente para todas as linhas onde há jovens contidos dentro. E novamente, estamos usando o olho como então estamos fazendo filtragem insensível a maiúsculas e minúsculas aqui. E aqui podemos ver, por exemplo, ok, Então a primeira posição é sete. Então 1, 2, 3, 4, 5, 6, 7. Então a subcorda jovem começa na posição sete aqui. E assim podemos ver esta função que também podemos usar para identificar posições iniciais específicas, que pode ser realmente bom novamente, como podemos ver aqui, a parte superior também está recebendo seu uso. Assim, podemos ver muitas dessas funções podem ser acorrentadas juntas, cada uma fornecendo uma peça do quebra-cabeça que podemos então usar em conjunto com outras funções para fazer algum processamento de dados ou outros componentes em nossas consultas SQL. 29. 27StringSubsetsAndConcatist: Tudo bem, então nós aprendemos muito sobre strings agora e como podemos usar diferentes funções para obter informações de strings que temos em nossas colunas. Mas flui para ir em frente e dar uma olhada em algumas coisas mais legais que podemos fazer que nos ajudarão especificamente no processamento de nossos dados. Então vamos em frente e olhar para a nossa coluna de pista novamente. E a primeira coisa que eu quero ver é fazer concatenação de string. O que significa que pegamos duas cordas ou podemos pegar mais de duas e podemos juntá-las. Então, por exemplo, vamos começar juntando o nome e o compositor para que possamos obter uma nova coluna que tem o valor que é o nome da música. E depois dizemos o compositor. Então, por exemplo, isso seria parecido com aqueles prestes a rock, nós saudamos você, e depois disso nós teríamos o nome do compositor. Então, para fazer isso, vamos apenas ir em frente e primeiro escrever nosso esqueleto SQL. E vai ser a mesa de atletismo. E vamos também ir em frente e limitar nossos resultados a cinco. Certo, então vamos usar o nome do compositor. Então vamos em frente e apenas extraí-los, apenas para que possamos, claro, comparar nossos resultados. Agora, o que queremos fazer é pegar a coluna de nomes por enquanto. E a ele, queremos adicionar o compositor. Então vamos pegar nossa coluna de nomes. E agora, nós queríamos apenas adicionar na coluna do compositor no final. Então, a maneira que podemos fazer essa concatenação de string é usando apenas essas linhas verticais duplas. Então vamos colocar nossa primeira string aqui, que neste caso vai fazer referência ao nome da coluna. E agora vamos colocar nossa segunda corda aqui, que neste caso vai fazer referência ao compositor da coluna. E então o que vai fazer, vai pegar o que está aqui e, em seguida, no final, ele vai se juntar ao que quer que esteja aqui. Então vamos dar um nome a isto. Vamos cortar isso, chamar essas colunas concat, colunas concat loop para colunas concatenadas. E vamos seguir em frente e ver como é. Certo, então temos nossa coluna inicial de nome aqui. Depois temos o nosso compositor, e agora temos o nosso resultado aqui, que é literalmente apenas o nome. E então você pode ver assim que termina são compositores aqui começar. E também podemos ver que para outras coisas, no caso de não termos valores, o resultado final, como podemos ver aqui, também será um valor conhecido. Agora, é claro, o formato que temos esses dados agora não é particularmente útil. Então vamos em frente e torná-lo um pouco mais agradável de olhar, adicionando um espaço após o nome da coluna. E depois dizemos adeus, e depois dizemos o nome do componente. Então, para fazer isso, vamos apenas colocar aqui o espaço de cordas. E depois vamos ter “Tchau”. E então vamos ter um espaço. E então podemos adicionar linhas verticais de tumor. E, de repente, estamos fazendo várias concatenações diferentes. Primeiro vamos pegar a coluna de nomes. Então, ao fim disso, estamos adicionando espaço por espaço. E então estamos fazendo outra concatenação. Que no final disso, agora estamos adicionando a coluna compositor. Então, se formos em frente e rodar isso, podemos ver agora, ok, os formatos que quanto melhor temos o nome, então temos comprar, e então temos aqui os próprios compositores. Agora podemos fazer ainda mais aqui. Então vamos levar isso todo o caminho e vamos começar com a pista. E então vamos colocar a identificação do caminhão. E então vamos dar o nome da música. E depois vamos dar ao compositor. Então, antes disso, vamos dizer Track. E então agora queremos ter a pista de TI. Então, como podemos fazer isso? Então, para fazer isso, O que é legal sobre isso é que nós podemos realmente, contanto que nós estamos no meio aqui, também colocar em valores inteiros. Então, podemos apenas referenciar diretamente a coluna ID da faixa e a concatenação de string. Na verdade, cuidaremos da conversão para nós. E para tornar esta formatação um pouco mais agradável, vou colocar dois pontos e um espaço aqui. E então, se executarmos isso, podemos ver aqui agora temos faixa e então temos o ID, e agora temos nossa coluna de nome ativada. Então vamos em frente e apenas adicionar outro espaço aqui apenas para alguma formatação e executar isso novamente. E assim podemos ver mesmo que nosso ID de trilha é realmente um inteiro, que nós também podemos ver quando nós apenas olhamos para ele aqui. A concatenação de cordas cuidará da conversão para nós. Mas, claro, se não seria também saber como fazer a conversão nós mesmos usando casting por, por exemplo, apenas lançá-lo para um valor de texto. Então, no caso de não ter sido cuidada para nós, poderíamos executá-lo assim. E claro que cuidaria disso para nós. Ou podemos transmiti-lo para outro tipo de dados que acharmos mais apropriado. Mas como podemos ver, a concatenação de cordas. Na verdade, cuida de tudo isso para nós. Agora, é claro, geralmente isso é na direção oposta de onde gostaríamos de ir. Normalmente podemos ter dados como este e, em seguida, gostaríamos de ir para este formato. Mas, no entanto, apenas vendo a concatenação de cordas é realmente bom porque em algum momento você quer usá-lo e para um bom uso. E neste caso, nossos bancos de dados são muito limpos, é claro, mas em alguns casos você pode ter momentos em que você tem, por exemplo, vamos dar uma olhada na coluna da fatura. Pode haver momentos em que você tem a data e a hora em duas colunas separadas. E você só quer juntá-los e usá-los como um valor de data completa. Então você pode fazer concatenação de string para obter uma data mais hora. E então você pode fazer um casting para um datetime, por exemplo. E, em seguida, a partir daí diretamente tem a data e hora e uma coluna. Então, dependendo de como seus dados são formatados, às vezes as colunas que você estaria usando não estão no formato ideal que você realmente gostaria que eles estivessem em. Ou nenhuma análise adicional na linha ou apenas algum processamento que você quer fazer, ou também apenas para ter uma exportação mais limpa por ter menos colunas. E assim a concatenação de cordas pode ser muito agradável porque, como podemos ver, somos capazes de unir colunas diferentes, bem como adicionar na alfândega. Cordas nossas próprias estão todas unidas. E, claro, observe novamente aqui que os textos personalizados que temos estão entre aspas simples. E qualquer referência a colunas aqui está entre aspas duplas. Agora, novamente, precisamos das aspas duplas porque por criar tabela, os nomes das colunas foram para encontrar com aspas duplas. Quando a nossa tabela não é definida com aspas duplas para usar as colunas, então nós também poderíamos apenas referenciar a coluna diretamente como este. Mas nunca podemos usar aspas duplas para strings. Há apenas reservados para nomes de colunas, como vimos são também nomes de tabela neste caso, como também podemos ver dependendo de como a instrução create table foi escrito. Tudo bem, então agora nós olhamos e juntamos as coisas. Vamos na direção oposta e olhar para reduzir as coisas. Então eu vou tirar isso só para que nós não tenhamos uma saída muito longa aqui em baixo. E a próxima coisa que vamos olhar é usar ou encontrar substrings de uma string que temos. Então vamos dar uma olhada em um, apenas a implementação mais simples primeiro para encontrar a substring. Nós estamos indo para ir e usar este método substring, substring. E então aqui podemos abrir e fechar parênteses. E, em seguida, a primeira coisa que queremos colocar é o texto ou a cadeia de caracteres que queremos tirar a substring. Por exemplo, vamos pegar a coluna compositor. E então queremos colocar aqui onde queremos começar. Então podemos dizer, por exemplo, partir da posição um em SQL, a primeira posição será sempre a posição um no caso de você saber o que outra linguagem de programação você pode estar acostumado. A primeira posição é referida como posição 0. Mas em SQL, a primeira posição é a posição um. E se você não conhece outra linguagem de programação, então é claro que isso é muito intuitivo que a primeira posição seria referenciada como posição um. Então, de qualquer maneira a partir de um e o primeiro personagem aqui vai estar na posição um. E agora você quer dizer quantos nós queremos extrair. Então, para fazer isso, queremos dizer, digamos que queremos extrair os primeiros cinco. Então, vamos dizer a partir de 145. Então o que isso significa é que vamos pegar a subcorda. Então vamos pegar uma parte menor da cadeia de tudo o que é colocado aqui. E vamos começar isto na posição um. E nós vamos para cinco caracteres. E vamos dar um pseudônimo a isto. Então podemos chamar essa subcoluna, e vamos em frente e executar isso. E assim podemos ver aqui, começamos com Angus, por exemplo, e vamos, Começamos na posição 1 de maio ir para 1, 2, 3, 4, 5. Ela pode ver aqui. Vamos ver o próximo. Bola F Tez. Então começamos na posição 112345. E assim você pode ver que isso também é exatamente o que temos aqui. Agora há realmente outra maneira que nós também podemos fazer a sintaxe da qual você realmente não precisa escrever. E quatro também podem usar vírgulas, uma separação em vez disso. Então, por exemplo, você poderia apenas colocar aqui a corda e então nós podemos colocar em uma vírgula. E este vai ser o ponto de partida, e este vai ser quantos valores queremos extrair. Então, se formos em frente e executarmos isso, podemos ver que obtemos exatamente o mesmo resultado. E, na verdade, nem precisamos do valor final dos quatro. Portanto, o valor final dos quatro não é necessário. E nós também podemos tirar isso, em que ponto nós vamos apenas. Comece a tirar toda a string apenas da posição inicial. Então podemos ver aqui, neste caso, começamos na posição 1. Então, levamos tudo. Se começarmos na posição cinco, por exemplo, então só vamos continuar assumindo a posição cinco. Então, 1, 2, 3, 4, 5. Então, a partir deste personagem, vamos levar tudo o que podemos ver aqui. Agora, mesmo neste método, podemos usar os resultados de outros métodos que aprendemos anteriormente. Por exemplo, Vamos tentar extrair os primeiros cinco caracteres depois de encontrar o primeiro espaço. Então, para fazer isso, primeiro de tudo, temos que encontrar a posição do primeiro espaço. E podemos fazer isso usando o método de posição que aprendemos antes. Então aqui vamos encontrar a posição. E em primeiro lugar, vamos colocar aqui o compositor. E queremos encontrar a posição do primeiro espaço. E então vamos extrair os próximos cinco caracteres. Mas como queremos começar após o primeiro espaço, em vez de no primeiro espaço, também precisamos adicionar um ao resultado aqui. Desde a posição do primeiro espaço, vamos começar exatamente no espaço. Mas queremos começar em um depois deste espaço. Então, vamos adicionar um a aqui. Então vamos em frente e executar isso. Agora também esta afirmação podemos tornar mais inteligente usando outras funções que também aprendemos de antemão. Por exemplo, vamos tentar encontrar os primeiros cinco caracteres após o primeiro espaço que o contador encontrar. Então, para fazer isso, antes de tudo, precisamos encontrar a posição do primeiro espaço. Podemos fazer isso usando a função de posição que aprendemos anteriormente. Então podemos dizer posição. E agora você quer encontrar a posição do espaço em nossa coluna compositor e tipo 2. Então lembre-se de usar a função de posição. Então queremos encontrar a substring da coluna compositor. E queremos começar na posição ou melhor, depois da posição. E chegaremos a isso em um segundo após a posição do primeiro espaço. Então, para obter o depois, isso nos dará a posição do primeiro espaço. E isso significaria que começaremos por aí. Mas se quisermos assumir a posição após o primeiro espaço, e precisamos adicionar um ao nosso resultado aqui. E então queremos extrair os primeiros cinco caracteres. E assim, e isso vai ser o cinco aqui. E então agora novamente, o que estamos fazendo é encontrar essas cordas Trump ou refinar uma substring e a cor do compositor. Então, cada linha vai ter novamente um valor diferente. E vamos começar na posição do primeiro espaço mais um. Então vamos começar um após o primeiro espaço, e então vamos extrair cinco caracteres. Então, se executarmos isso, podemos ver aqui estes são os resultados que obtemos. E vamos tirar nossa declaração de limite e ver como fica tudo. Especificamente. Para casos em que não há espaço como um AC, DC aqui. Ou vamos ver se há outro neste caso aqui. Assim, você pode ver nestes casos, estamos apenas começando pelo valor inicial, já que a posição do espaço e do compositor, não há espaço. E assim, portanto, isso vai nos dar 0. Então, se executarmos isso separadamente e salvarmos isso como posição de espaço e estamos no segundo. Então você pode ver a posição do espaço neste compositor chamado, por exemplo, não há espaço, e então isso vai nos dar 0. E então o mais um como apenas vai nos fazer começar no caractere um, e é por isso que, por exemplo, vemos aqui começando assim e y por exemplo, para CDC. Nós também vemos mais apenas tomadas os primeiros cinco aqui, que na verdade vai nos dar o nome completo do compositor por causa da posição do espaço aqui vai ser 0. E então vamos começar na posição um, já que estamos fazendo o mais 1 aqui. Agora podemos tornar isso ainda mais complicado se quisermos novamente, usando os mesmos métodos são as mesmas funções que tivemos antes. E vamos realmente fazer isso, dividir isso em várias linhas para não ter que ir muito longe na horizontal. Então o que vamos fazer é encontrar a primeira palavra depois do primeiro espaço. Então, por exemplo, queremos encontrar tudo entre o primeiro e o segundo espaço. Então, neste caso, vai ser vírgula jovem, ou aqui vai ser parafuso tem vírgula. Então, como podemos fazer isso? Bem, agora temos que tornar este componente inteligente ou você tem que torná-lo dinâmico. Então, primeiro o que queremos fazer é encontrar tudo depois do primeiro espaço. E então só queremos encontrar tudo até o próximo espaço. Então vamos começar encontrando tudo para o primeiro espaço, que já fizemos aqui. Então podemos pegar isso e copiar isso e colocar isso aqui. Mas, em seguida, feche nossos parênteses já que queremos levar tudo após o primeiro espaço. Agora, nós realmente já fizemos isso porque exatamente isso aqui, esta parte da nossa consulta aqui está extraindo, bem, neste caso estamos extraindo os primeiros cinco caracteres, mas poderíamos facilmente remover isso. E agora estamos extraindo tudo depois do primeiro espaço. Então, queremos tomar isso como entrada. Então o que vamos fazer é ao invés de usar nossa coluna compositor aqui, ou melhor, a string correspondente à linha atual da coluna compositor. Em vez disso, vamos usar o resultado disso. E então nós vamos apenas aqui, podemos ver isso. Nós só queremos ter certeza de que todos os nossos parênteses estão fechados corretamente. Então nosso primeiro elemento aqui, e vamos novamente ajustar nosso espaçamento para tornar isso mais legível. Podemos ver que o primeiro elemento ou o primeiro valor, e de lado aqui é o resultado desta afirmação. E isto vai dar-nos tudo depois do primeiro espaço. Então agora, neste caso, por exemplo, vamos ter jovens e assim por diante, porque não estamos limitando os personagens. Agora a próxima coisa que queremos fazer é encontrar tudo para o próximo espaço. Então, como sabemos que estamos começando após o primeiro espaço, nosso personagem inicial aqui pode ser apenas um. Já que estamos começando logo após o primeiro espaço, o que significa que sempre queremos começar pela próxima palavra. Mas agora precisamos encontrar a posição final, que vai mudar com base no comprimento do nome. Por exemplo, jovem tem cinco caracteres no nome Malthus F6. E em cada um desses casos temos uma vírgula atrás. E então o quão longe queremos ir para alcançar o segundo espaço vai mudar novamente. Então o que podemos fazer é dizer, tudo bem, bem, já temos isso aqui. Basicamente, nós só queremos subir para a posição do próximo espaço, mas sim subir para a posição do próximo espaço e compositor, que vai ser a posição do primeiro espaço. Mais uma vez precisamos usar o resultado desta declaração aqui. Então colocar isso aqui e colocar isso de novo em uma nova linha para que tudo seja mais fácil de refazer. Tudo bem, então vamos em frente e dar uma corrida. E vamos dar uma olhada no nosso resultado. Então o que podemos ver é que agora temos exatamente o que queríamos, que é jovem uma vírgula biotas e este teste, é apenas uma AMD. Então vamos passar por isso mais uma vez porque esta estrutura é meio intrincada. Há muitos componentes aninhados aqui. Então nosso primeiro valor, a string da qual estamos pegando a substring, é na verdade o resultado de pegar a substring da coluna do compositor começando após a posição do primeiro espaço, que é o que fizemos Mais cedo. Então, por exemplo, para a nossa primeira fila aqui, seria apenas jovem e tudo mais depois disso, já que não estamos limitando o quão longe vamos. Então a próxima coisa que fazemos, em seguida, usando este resultado é começar na posição 1. Já que agora, com isso, vamos começar depois do primeiro espaço. E queremos ir para a posição do próximo espaço. Então, a posição do próximo espaço será então dois ou melhor, para obter corretamente isso, precisamos novamente usar o resultado aqui. E dessa forma podemos usar os jovens e assim por diante. E agora precisamos encontrar a posição do próximo espaço, porque se usarmos apenas a coluna original do compositor, então ele nos dará a posição do primeiro espaço na coluna completa. Mas não queremos isso porque já estamos usando uma parte substring desta coluna. Então nós queremos ter certeza de que quando estamos usando a função de posição aqui, que estamos usando o mesmo substrato. Então, novamente, nós vamos encontrar a posição da primeira string no resultado da instrução substring que nós escrevemos aqui, que vai ser a mesma que usamos aqui em baixo. Agora, na verdade, há uma sutileza aqui, que é que na verdade temos um espaço à direita , além das vírgulas que temos em alguns casos. E agora nós poderíamos tentar basicamente dizer, ok, nós vamos até a posição menos um para nos livrarmos dos espaços à direita. Mas o problema é, em alguns casos, quando não há mais espaços em nossa substring. Por exemplo, aqui, nosso resultado aqui será 0. Então nós vamos já indo para 0 comprimento, que é por isso que, por exemplo aqui AC, DC, não temos nada mais frio tomado um sem caracteres. E se colocarmos um valor negativo, você pode ver aqui que, neste caso, postgres está reclamando porque não temos permissão para colocar valores negativos. Aqui podemos tirar quantidades negativas de texto ou quantidades negativas de caracteres. Mas já conhecemos a solução ou já conhecemos a função que podemos usar para resolver esse problema. Ou seja, vamos usar o método de corte. E aqui eu vou usar o trunfo certo porque nós especificamente queremos cortar o lado direito. E o que queremos fazer é cortar a vírgula à direita e também o espaço à direita. Vamos terminar nossa função aqui e colocar isso na mesma linha novamente só para ter tudo e sintaxe. E vamos em frente e executar isso. E agora podemos ver que nos livramos da vírgula à direita , bem como do espaço que está realmente escondido. E se tivéssemos apenas uma vírgula aqui, são resultados realmente não mudariam porque temos aquele espaço à direita primeiro que não podemos ver neste caso por causa de como a saída parece. Então, fique ciente disso, que neste caso teríamos um espaço de treinamento e uma vírgula. Agora, como ele pode ver, mesmo que algumas das funções nos Postgres por si só possam parecer um pouco parecidas. Por exemplo, por que razão teríamos de saber a posição de que não deve haver muitos casos de utilização. Mas o legal é que você pode usar todas essas funções juntas. E através disso você pode realmente escrever algumas coisas de processamento muito legal. E você pode ver que nós podemos tipo de aninhar resultados aqui e usar os resultados de uma sub string como o ponto de entrada para outra substring. Então, há um monte de coisas legais que podemos fazer encadeando diferentes funções juntos estão usando os resultados para fazer algum processamento de dados realmente bom. Mesmo neste caso, se a tarefa fosse apenas retirar o primeiro valor após o primeiro espaço e entre, entre o primeiro espaço e o segundo espaço. Então podemos ver aqui, porém, há novamente, algumas coisas realmente legais que podemos fazer usando apenas várias dessas diferentes funções juntas para que possamos obter ino, algum processamento único e personalizado onde tudo é tipo de adaptando-se aos valores de entrada que temos. E não precisamos de codificar especificamente quaisquer comprimentos específicos são pontos de partida ou algo assim. Como podemos ver aqui, esses dois valores que retornamos não são comprimentos muito diferentes. Mas isso é totalmente bom porque nossa consulta cuida de tudo e realmente não se importa quanto tempo cada um deles são, porque ele também tem que cuidar automaticamente dentro. 30. 28StringReplacementHB: E nós já demos uma boa olhada em um monte de coisas que podemos fazer com strings em SQL. Mas há mais uma coisa legal e útil que eu quero mostrar a vocês, que é substituir valores dentro de strings. Então vamos primeiro escrever nosso código esqueleto aqui. Facilidade, temos alguma coisa. E neste caso nós vamos realmente usar a coluna de fatura porque eu quero usar esta coluna de data aqui. Então, vamos selecionar a partir desta coluna de fatura. Vamos limitar nossos resultados a cinco novamente primeiro. E o que eu quero fazer, eu quero substituir este espaço aqui em vez de um T. Agora, existem diferentes maneiras de diferentes programas e tempos de escrita existem maneiras diferentes de pessoas diferentes estarem formatando tópicos? Então, às vezes, algo que você verá é um T aqui, ou você verá alguns cortes aqui. Agora, SQL tem um formato muito específico que ele quer, que você também pode ver aqui, ano, mês, dia com traços entre eles. E você tem o espaço, e então você tem horas, minutos, segundos. E então aqui você tem os componentes de milissegundos. E você pode ver que tudo isso é subcampos são separados por dois pontos. E aqui temos um separado por um ponto. E assim também podemos olhar para a tabela de fatura honra. E podemos ver aqui a data da fatura neste caso é na verdade um carimbo de data/hora. Mas o valor que vemos como os usuários meio que fez amigável para nós. E é, na verdade, a melhor representação deste valor de timestamp. E nós também podemos usar esse resultado diretamente. Mas porque diferentes programas e às vezes até pessoas diferentes formatam datas de forma diferente. E este é o formato SQL que você deseja, mas você pode nem sempre obtê-lo porque às vezes, se os dados são apenas carregados do resultado de uma seqüência de férias de um timestamp, então às vezes a maneira que esse programa coloca esse timestamp ou essa data em uma string e pode não ser o formato real que você precisa. Então vamos dar uma olhada em algumas sequências de colocações. Mesmo que já tenhamos o valor que queremos aqui. Usando as substituições de string, você pode, se o outro formato geral for o mesmo, você já pode obter alguns valores realmente agradáveis. Podemos realmente ir para o formato que você precisa. Então você fez isso? Vamos apenas mudar esta data de fatura aqui para, em vez disso, o capital T no meio daqui, que são a coisa comum que você pode ver em algum momento. Então, para fazer isso, vamos selecionar a data da fatura e vamos selecioná-la para que tenhamos que comparar com. E agora para fazer o posicionamento real, vamos usar a função Substituir. E vamos manter isso em maiúsculas. E a sintaxe que queremos usar aqui é primeiro, queremos colocar a string completa que vamos usar, que neste caso será apenas com o resultado da data da fatura, então queremos ter o valor que queremos substituir. Então, por exemplo, neste caso, e vamos substituir o espaço. E então temos o valor pelo qual queremos substituí-lo. Então, por exemplo, vamos substituí-lo pelo T maiúsculo e, em seguida, vamos dar a este um apelido como data modificada. Agora há realmente mais uma sutileza que precisamos cuidar, que é nossa data de fatura é um carimbo de data/hora internamente. Mas quando estamos olhando para ele, ele é realmente convertido para nós na representação de texto deste carimbo de data/hora, o que, claro, torna muito mais fácil de ler. É muito mais fácil ler a data real com ano, mês, dia, horas, minutos, segundos, em vez de olhar para apenas um monte de números que representam uma hora. Então o que precisamos fazer para fazer isso corretamente é que também precisamos converter este carimbo de data/hora para um formato de texto. E vamos em frente e fazer a conversão aqui. E vamos também ir em frente e fazer a conversão internamente. Na verdade, não vamos fazer isso aqui porque eu quero mostrar a vocês o resultado de seus dois, mas nós precisamos tê-lo aqui porque caso contrário nós estamos olhando para estes, estes são realmente valores timestamped. Portanto, há carimbos de data/hora, mas precisamos convertê-los em uma representação de texto de um carimbo de data/hora, que quando você faz isso em SQL, se parece com isso. Caso contrário, não seremos capazes de usá-lo corretamente. Então, se formos em frente e executar isso, podemos ver aqui que este é o resultado que estamos obtendo quando estamos convertendo para o formato de texto, que é basicamente tudo depois do ponto aqui, que neste caso não é usado apenas porque não está presente. E depois temos o espaço aqui substituído pelo chá. Então podemos ver que este é o SQL ou apresentação que vemos quando temos valores de timestamp, mas não fazemos qualquer outra conversão. É assim que eles são mostrados ao usuário neste caso. E nós realmente, se quisermos converter isso para um texto, podemos ver aqui este é o elenco resultante que temos, que são exatamente o mesmo valor porque não temos nenhum componente extra de milissegundos aqui. Mas ainda é bom estar ciente dessa diferença sutil que você obterá ao converter para uma coluna de carimbo de data/hora para um tipo de dados de texto. Só porque ele muda ligeiramente a aparência da saída, mas isso também afeta como vamos usar esses valores. Então podemos ver às vezes podemos obter datas, data ou valores de data e hora que têm esta equipe entre, que neste caso, podemos realmente encadear. E vamos acorrentar. Porque, na realidade, vamos apenas tratar o exemplo de que estamos recebendo esse valor dentro. Então vamos encadear nossas operações aqui. Mas na realidade, nós apenas meio que tomamos esta coluna de data modificada e, em seguida, vamos remover este básico E, OU este t novamente. Então vamos substituir a partir do resultado desta declaração de substituição aqui, que é o que vemos aqui. Então, se isso fosse uma entrada verdadeira e queremos tirar o chá, já que esse tipo de coloca no formato esco que precisamos usá-lo como um ID, data, hora, ou como um carimbo de data/hora. Então vamos substituir isso e vamos substituir. E vamos colocar isso em uma nova linha por enquanto. Vamos substituir o T e substituí-lo um espaço e o infinito. E também é dar o nome da coluna aqui novamente. Então, se formos em frente e executarmos isso, podemos ver que estamos recebendo o valor exato de volta. Mas novamente, o que fizemos foi substituir o espaço aqui pelo T. E depois substituímos o T. Despertar. E às vezes você vai ver que, você sabe, pode haver casos em que você só tem horários de encontro que se parecem com isso. Agora existem alguns bancos de dados SQL que podem lidar com este formato. Por exemplo, postgres é um deles onde podemos realmente ainda tomar isso e convertê-lo em um tipo de carimbo de data/hora. E podemos ver se executamos isto, correr, tudo isto. Podemos ver aqui que estamos convertendo de volta para carimbo de data/hora. Mas geralmente a fórmula SQL correta que você deseja como um espaço entre aqui, porque nem todo banco de dados SQL pode lidar com esses valores T como este. E assim, em alguns casos, a declaração pode realmente falhar. E então apenas esteja ciente de que há uma espécie de SQL ideal para sempre sem você querer, que é ano, mês, dia, espaço, horas, dois pontos minutos, dois pontos segundos. E a razão pela qual você está tendo isso assim é porque mesmo que esses valores sejam strings, se você classificá-los, eles ainda serão classificados na ordem certa. E é por isso que é importante que tenhamos esse formato de ano, mês, dia e dia NADH, mês, ano ou mês dia, ano ou algo assim. Ter este formato muito específico torna tudo muito padrão. Então, neste caso, podemos ver em Postgres, o T maiúsculo não é um problema, mas isso não é verdade para todos os bancos de dados. E SQL é uma espécie de muito variável. E, claro, se você acabar tendo que usar, talvez você use vários bancos de dados SQL diferentes. A declaração pode fazer mais do que um deles e pode falhar e o outro porque novamente, eles se aproximaram que era um pouco diferente. Portanto, apenas esteja ciente disso. Idealmente, você quer ir para este formato limpo. E, claro, você pode usar todas as substituições e peças fundidas. E isso eram substrings e tudo o mais que aprendemos, todas as coisas de processamento para modificar todas as colunas e colocá-las no formato apropriado para que você possa fazer a conversão de tipo. Mas apenas esteja ciente de que você pode encontrar às vezes tendo colunas de data e formatos impróprios. E outro que é comumente visto é, por exemplo, ter traços, barras em vez de traços. Então outro não tão comumente visto é, hum, começar a converter isso em um carimbo de data/hora para que possamos realmente ver o resultado. Mas outro que é comumente visto como cantarolando como traços aqui ou algo assim. Portanto, apenas esteja ciente de que estas são coisas que você pode encontrar. E este caso, como podemos ver, porque o carimbo de data/hora funcionou novamente, mas outros bancos de dados SQL podem não ser tão bons em se adaptar a esses diferentes formatos. Portanto, apenas esteja ciente de que podemos usar os métodos de substituição simples, bem como outros métodos de string que usamos para processar ou manipular dados de antemão para obter nossos dados no formato adequado. 31. 29DateAndTimeHB: Agora, uma informação de data e hora como nós também temos aqui na coluna de data da fatura provavelmente surgirá uma forma ou de outra muito frequentemente em suas tabelas SQL porque é realmente bom manter o controle de quando as coisas ocorreram. Então vamos dar uma olhada em datas e horários e como podemos usá-los para extrair algumas informações deles. Só porque vai ser um campo tão comum de se ver. Agora, o que é realmente bom é que SQL é realmente bom em lidar com datas e informações de hora. E isso é ótimo porque nos dá muita flexibilidade. Então vamos apenas ir em frente e primeiro escrever uma declaração de seleção de esqueleto de nossa tabela de fatura, limitando nossos resultados 25. E novamente, nós já vimos isso antes, mas vamos apenas ir em frente e selecionar a coluna de data da fatura. E nós vamos em frente e executar isso. E podemos ver aqui este é o tipo de textos ou apresentação que não podemos retornar para nós em nossa tabela porque o valor em si tem um carimbo de data/hora. E nós também vimos que se nós convertemos isso para um valor de texto, nós podemos apenas obtê-lo sem o componente de milissegundo neste caso porque ele realmente não está incluído. Mas digamos que só estamos interessados em usar a data, por exemplo, não estamos particularmente interessados em usar o tempo. Digamos que queremos fazer uma análise onde queremos ver, ok, eu preciso entender quando as coisas acontecem dia a dia sozinho, ou talvez nem mesmo desse tamanho. Mas eu não estou super interessado no componente de tempo aqui. Então, o que podemos fazer é usar nossa data de fatura. Podemos lançar isto para um encontro. Então vamos em frente e talvez vamos dar a isso um pseudônimo de data. Então podemos executar isso e podemos ver aqui, isso vai ser apenas o nosso tipo de saída inicial. E se tirarmos o componente de data, podemos ver que facilmente cortamos a data e podemos fazer coisas com a data. E também podemos, por exemplo, tirar o tempo. Porque talvez, digamos, talvez digamos que só estamos interessados em fazer uma análise olhando para a hora específica dos dias. E nós não estamos super interessados nos dias e na data aqui, mas sim estamos mais interessados em olhar para a hora do dia porque queríamos entender as flutuações com a hora do dia ou algo assim. Então, podemos ver aqui assim que o temos no formato de carimbo de data/hora apropriado ou no formato de data e hora apropriado. Podemos, então, muito facilmente, apenas extrair a informação que precisamos dela. E também podemos usar isso para filtrar. Então, por exemplo, vamos tirar nossa declaração de limite primeiro para que nós tipo de obter o resultado completo. Digamos que estamos interessados em analisar algum comportamento baseado na hora do dia da semana. Isso é entre, que começa a partir do primeiro da primeira linha 2000 e vai até o sexto do primeiro. Então podemos fazer é em nossa cláusula where, podemos dizer onde data da fatura é entre. E aqui podemos dizer, vamos pegar a corda 2019, uh, 11. Isso podemos lançar para uma data e fim. Não preciso desses parênteses aqui entre isso. E então também aqui, o que vamos ter este 2000 e que eu queria escrever nove aqui agora 192 mil linhas e, em seguida, um 1 e 0, 6. E novamente, vamos converter isso para um encontro. Então, se formos em frente e executarmos isso, podemos ver aqui muito facilmente, podemos fazer filtragem de data e também podemos fazer o tempo específico durante o dia. Porque SQL entende inerentemente formatos de data e hora, o que, claro, é realmente útil porque os valores de data e hora surgem com tanta frequência. E mais recentemente, ou mais geralmente, você se preocupa com o que aconteceu mais recentemente, não tanto quanto com o que aconteceu cinco anos no passado, é claro, você pode querer acessar essa informação. Mas, na maioria das vezes, quando você está tentando acessar informações ou fazer uma análise, você está mais interessado nos dados mais recentes. E assim, com SQL, podemos facilmente fazer isso usando apenas os valores de data inerentes, os valores de tempo inerentes, bem como o valor de timestamp, uma vez que eles são todos compatíveis entre si. Agora, há também outra coisa legal, que é essa função chamada agora. Agora o que isso faz é basicamente dar o valor de data e hora atual. Então vamos em frente e executar isso. E podemos ver aqui o resultado aqui vai ser o mesmo porque ele retorna apenas um valor, mas ele dá a data e hora atuais no horário UTC. Assim, podemos ver que ele dá o valor exato de data e hora em hora UTC. E nós também podemos usar isso novamente aqui para extrair valores a partir dele. Por exemplo, para obter a data atual, podemos apenas fazer agora e depois usar o resultado. E daqui apenas extraia a data. E podemos salvar isso como data atual. E assim nossa coluna de data atual aqui, por exemplo, será apenas o que vemos aqui, a data atual. Agora também podemos usar isso para filtro. Por exemplo, podemos dizer, tudo bem, vamos encontrar todos os lugares onde a data da fatura é maior que ou igual a ou rinque. Neste caso, fará mais sentido. Mas digamos que o componente devs da data da fatura seja igual à data de hoje, o que podemos fazer isso. Neste caso, não vamos ter nenhum valor devolvido para nós, é claro, porque os dados aqui são antigos e não há nada que se aproxime da data de hoje, como podemos ver. Mas ainda podemos usar filtragem dinâmica como esta. Interesse tipo de ter nossas consultas adaptadas com base na data e como as coisas mudam, nossos dados ainda vão ficar atualizados porque estamos usando essa função interna NOW, que apenas nos dá a data e hora atuais. E então podemos extrair, por exemplo, a data e, você sabe, obter informações de data a partir daí. E, claro, porque o SQL entende e faz uso adequado dos valores de data e hora, podemos fazer todos os tipos de comparações e olhar para intervalos e todos os tipos de coisas legais. 32. 30DataTimeIntervalsHB: Além de apenas ser capaz de extrair valores de data e hora e ser capaz de fazer comparações e outras coisas. Sql também tem uma opção muito legal de nós ser capazes de usar intervalos de tempo. Então vamos dar uma olhada nisso. Vamos apenas executar nossa declaração de seleção esqueleto aqui, selecionar em nossa tabela de fatura, limitando nossos resultados a cinco. Vá em frente e execute isso. Agora, vamos tentar selecionar ou melhor, vamos tentar encontrar primeiro a diferença de horário entre a data atual de hoje e a data da fatura aqui. Então vamos extrair a data da fatura para que tenhamos valor de comparação. E então vamos usar o nosso agora para nos dar a corrente na data e hora. E agora para obter um intervalo, tudo o que temos que fazer é subtrair a data da fatura, que tem um carimbo de data/hora. Então, como ambos são compatíveis com carimbo de data/hora, agora podemos pegar nosso valor nulo, que nos dá também um carimbo de data/hora e subtrair a partir da data da fatura. E aqui podemos chamar isso, por exemplo, como tempo desde a fatura. E se executarmos isso, podemos ver aqui esta é a data da nossa fatura e este ano é a diferença de tempo desde a voz. Então, por exemplo, nós vimos aqui, estamos vendo neste caso, cerca de 4.200 dias desde que essas faturas passaram metade dependendo da data exata. Agora também podemos converter esses valores, por exemplo, para valores de data, porque atualmente estamos recebendo informações sobre horas, minutos e segundos. Também podemos convertê-los para a data. Então, se quisermos e em que caso vamos apenas obter datas diretamente, escuro di, diferenças, como podemos ver aqui. Então esta é uma maneira que esse tipo de intervalo aparece. Podemos obter diferenças de intervalo entre diferentes tempos. Mas é claro que não pára por aí. Também podemos usar intervalos. Então vamos dar uma olhada nisso. Vamos primeiro pegar nossa coluna de fatura e nossa coluna de data de fatura, e vamos apenas adicionar algum tempo a ela. Então baby, nós não queremos ter ou nós não queremos mostrar os dados em UTC. Não armazenamos internamente no UTC, mas quando o tiramos, queremos mudar para um fuso horário separado. Por exemplo, vamos para UTC mais 1. Então, como podemos adicionar uma hora na data da fatura da turnê aqui? Bem, na verdade é muito fácil porque tudo o que temos que fazer é fazer mais aqui. E agora temos essa opção de intervalo e SQL. E o intervalo. Agora só colocamos aqui uma série de tempo que queremos adicionar. Por exemplo, queremos adicionar em uma hora. E aqui podemos salvar isso como, por exemplo, adicionar uma hora. Então, se fizermos isso e levarmos isso embora por enquanto, vem meio que atrapalhando. Então, se executarmos isso, podemos ver que este é o nosso estado de entrada original e esta é a nossa data de fatura com uma nossa auditoria sobre ele. Então o que é bom é que se tivermos nossos valores de data e hora internamente, como você pode ver, ainda podemos fazer todos os tipos de conversões de linha do tempo. E uma vez que tirá-lo e torná-lo apropriado para o que queremos mostrar, é claro que são opcionais muito apenas para adicionar em uma hora, mas nós realmente não podemos fazer tudo o que gostaríamos, por exemplo, em vez disso, vamos renomear nossa coluna primeiro. Então aqui podemos dizer adicionar tempo. Vamos adicionar 1. Em segundo lugar, tendência. Faça assim. Você pode fazer isso e pensar por um minuto. Podemos adicionar em um mês, podemos adicionar em um ano, ou podemos igualar em vários anos. Se você quiser adicionar vários anos, você pode fazer dois anos ou você também pode colocar um S aqui como podemos ver, seus resultados em si não mudam. Mas é bom porque podemos usar esse valor de intervalo agora para ter um intervalo de tempo que especificamos através da string aqui. Agora, o que também podemos fazer, por exemplo, digamos que queremos adicioná-los dois anos e um mês. Executa isto. E podemos ver que tudo adota a dois. Então a declaração de intervalo aqui é legal. E é legal poder usá-lo na instrução select, mas é ainda mais legal poder usá-lo dentro de nossa filtragem. Então vamos dar uma olhada nisso e vamos selecionar ou vamos tirar ou declarar. E vamos nos livrar do nosso limite por enquanto. E também apenas se livrar do isso aqui e torná-lo o que vamos filtrar por. Então eu quero adicionar 15 anos à nossa data de fatura. E agora eu quero filtrar por onde nossa data de fatura mais o intervalo de todos. Vamos fazer todos nós capital apenas para tipo de indicar novamente, que é instrução SQL. Além disso, o intervalo de 15 Anos é maior do que a data e hora atuais. Então, se executarmos isso, podemos ver neste caso que vamos obter todos os valores retornados porque se adicionarmos 15 anos na data da fatura que estaremos em 2024. E assim podemos ver, é claro, neste caso, tudo vai passar da data e hora atuais. Essa é uma maneira de fazer isso. Outra maneira de fazer isso, ou fazer filtragem é, digamos que queríamos encontrar todas as faturas na última semana. Então o que podemos fazer aqui é que também podemos usar intervalos do outro lado. Então vamos dizer que o nosso primeiro de tudo, vamos tomar este caminho apenas para meio que usar as colunas como nós iria encontrá-los em tabelas regulares. Então, digamos que nossa tabela de datas de fatura ainda está sendo atualizada e queremos encontrar todas as faturas dentro da última semana para que possamos ouvir dizer tudo bem. Vamos pegar a data e hora atuais e subtrair o intervalo de sete dias. Então estamos procurando por tudo nos últimos sete dias. E assim podemos executar isso. Neste caso, não vamos receber nada devolvido porque isto aconteceu há muito tempo. Assim, podemos fazer aqui, por exemplo, como podemos novamente. Neste caso, nossos resultados são, naturalmente, não vai mudar de roteamento tem tantos anos. Mas você pode ver aqui apenas imaginando que nossa data de fatura meio que foi atualizado continuamente. Podemos ter nossas consultas adaptando-se aos intervalos de tempo atuais, ou podemos encontrar intervalos de tempo específicos tomando a data e hora atuais, tirando sete dias. Podemos marcar isso para uma data para garantir que a informação do horário não chegue e depois decolar sete dias. E dessa forma, podemos fazer uma filtragem muito agradável para ver, por exemplo, as coisas aconteceram nos últimos sete dias e as coisas que aconteceram nos últimos 10 dias, que as coisas que aconteceram nas últimas 24 horas, as coisas que aconteceram nos últimos 24 horas aconteceu nas últimas cinco horas. Podemos ter intervalos de tempo realmente personalizados para usar para filtrar. E isso é muito bom porque na maioria das vezes quando estamos usando dados que têm algum tipo de carimbo de data/hora anexado a ele. Não vamos usar todos os dados em todos os tempos. Na maior parte, na maioria das vezes só estamos interessados em olhar para regiões específicas do tempo. E assim podemos ver ter essa opção para ser capaz de usar intervalos para fazer comparações com a data e hora atuais ou com a data atual, ou definir intervalos de tempo usando esta instrução de intervalo aqui, podemos fazer realmente declarações de seleção personalizadas que apenas nos dão dados para exatamente os prazos em que estamos interessados. 33. 31ComesHB: Agora outra coisa muito importante sobre escrever consultas, ou também sobre escrever código em geral é deixar comentários. Porque quando você está lendo algo e se ele se torna complexo, é realmente bom ter comentários ou anotações que explicam o que você está fazendo ou o que você está pensando ou o que esta parte é quatro, modo que quando você voltar a ele mais tarde ou quando outras pessoas tentaram lê-lo, eles entendem o processo de pensamento e o que está acontecendo aqui. Porque às vezes, se você escrever uma consulta mais complexa ou um código mais complexo, e então você simplesmente deixá-lo por alguns meses e então você tenta voltar quando você está tentando descobrir o que exatamente você fez em cada ponto e por que isso aqui em Ohio, ele tem este formato e por que você talvez fez o truque especial. Ter deixado um comentário é uma maneira muito agradável de guiar as pessoas através dele para que eles possam entender o seu processo de pensamento, a maneira de pensar e por que, por exemplo, específico que foi feito ou qualquer outra coisa que você pode querer escrever dentro. Então vamos dar uma olhada em como podemos escrever comentários. E nós estamos indo apenas para usar uma declaração de consulta simples aqui da nossa tabela de faturas. E limitando nossos resultados a cinco, só porque é uma declaração de esqueleto facial. Então vamos em frente e deixar alguns comentários. Deixe alguns comentários muito básicos torna-se o, no entanto. Então, a primeira maneira que podemos deixar comentários é usando um traço duplo. E então tudo o que escrevermos depois deste traço aqui será comum. Bom. Coloque um espaço aqui para que ele se torne mais legível. Por exemplo, aqui podemos dizer selecionando colunas. E se fizermos isso , você pode ver que conseguimos tudo de volta. E mesmo se removermos o espaço aqui, ainda funciona. Os comentários não fazem parte da execução, mas podemos deixá-los aqui. Podemos ver que estes não se estendem para as próximas linhas como podemos ver porque esta parte da instrução SQL ainda está sendo escrita. No entanto, se não tivéssemos separado ou instrução SQL sobre várias linhas, então tudo depois disso na mesma linha vai ser comentado, caso em que vamos agora ter um problema. Então isso também é bom ter todas as coisas divididas em várias linhas. Agora, neste caso, como você deve ter visto, Databricks realmente faz alguns comentários inteligentes, onde se você tem um comentário e você adicionar uma nova linha em algum lugar, ele automaticamente adiciona este traço número na frente, que na maioria dos casos realmente muito bom neste caso quando estávamos tentando voltar para a nossa consulta e, claro, não era o que estávamos tentando fazer. Isso é uma coisa que é específica para a aderência de dados e não específica para Postgres. De qualquer forma, podemos usar declarações comuns como esta. E vamos fazer isso de novo para nos livrarmos do aviso. Então, podemos usar instruções KMS como esta para anotar nosso código ou nossas consultas. Então, podemos sentar aqui, por exemplo, selecionando a partir da tabela de fatura. É claro que, neste caso, nossos comentários são meio triviais e não particularmente úteis. Mas à medida que o processo de pensamento é girado, talvez você deixe um comentário no início de uma parte mais complexa da consulta. E então você pode ver que esta parte faz isso. Você não precisa anotar cada linha única, mas apenas dizendo como este bloco seguinte é responsável por isso ou quando você tem uma lógica específica em algum lugar lá, estamos usando, por exemplo, declarações de posição para encontrar intervalos. Você pode dizer que o formato de dados R é assim, é por isso que podemos usar a suposição para encontrar a posição deste, para encontrar este próximo valor. Você sabe, apenas explicando seu processo de pensamento de que quando as pessoas vêm para vê-lo ou renovar, voltar a ele alguns meses depois porque talvez você não tenha precisado mudar em que você ainda pode entender o e você não precisa tentar quebrar as consultas e entender e tipo de recapitular o processo de pensamento que você veio até um par de meses passado. Então sim, nós podemos escrever uma única linha vem até isso, nós também podemos escrevê-los em linhas separadas. Por exemplo, comentário de nova linha. Então este vai ser um comentário que está ocorrendo em uma nova linha. E novamente, todos esses comentários que começam com S duplo traço abrangem apenas linhas simples. Também podemos ter continentes multi-linha. Agora, uma maneira que nós meio que vimos que podemos fazer é simplesmente estender e comum em várias linhas e ter mais linhas aqui. Mas isso não é muito eficiente. Porque se você quiser escrever sobre várias linhas, você não quer ter todos esses traços lá dentro. Então o que podemos fazer em vez disso é que podemos usar um formato que se parece com estrela barra. E então isso começa o comentário multi-linha. E podemos terminar o comentário com estrela para frente barra novamente. E, em seguida, apenas tirando as declarações aqui porque não é mais do que o necessário. E agora podemos ver agora que temos um comentário multi-linha. Então, tudo entre esta estrela barra para a frente e estrela barra para a frente, tudo isso vai ser comentado e pedir comentários ir. Podemos ver que, se fizermos isto, os nossos resultados não vão mudar. Agora com isso, bem, podemos até fazer é incomum entre as declarações. Por exemplo, podemos dizer aqui prestes a dizer a tabela e, em seguida, terminando ou comum novamente. E nós podemos executar isso, e isso ainda vai funcionar porque nada disso vai ser parte da consulta final real que vai ser executada. Todos os comentários que aliviando aqui são apenas para fazer nossas consultas ou se você está usando em outro lugar. E código é os comentários em geral estão lá para tornar o código mais legível, para explicar seu processo de pensamento, para explicar a lógica. Novamente, o ponto de comentários não é comentar cada linha, especialmente como o comum trivial que se comprometeu aqui selecionando nossas colunas, selecionando a partir da tabela de faturas. Mas, em vez disso, é se você está entrando em uma parte que não é óbvia e auto-explicativa que pode causar alguma confusão. É bom apenas deixar um comentário para explicar neste comum pode ser mais curto, pode ser longo dependendo de quanta explicação é necessário apenas para explicar o que está acontecendo aqui. Então isso é alguém que pode ser novo para ele, que vê a consulta pela primeira vez. Você está voltando um mês, dois meses, seis meses, um ano depois para a mesma consulta ainda pode entender muito rapidamente e tipo de entender a essência da consulta. Entenda o que está acontecendo em cada parte e que eles não estão passando por isso ou perdidos pelo que está acontecendo em uma parte específica. E então eles têm que gastar tempo tentando descobrir, ok, então o que exatamente essa parte da consulta está fazendo aqui e por que é assim e por que há todas essas condições especiais? Assim, Mino, ter comentários pode tornar a vida de todos muito mais fácil. 34. 32AgregaçãoFunctions 3: Agora, o que é realmente legal sobre SQL é que as consultas podem ir muito além de apenas selecionar colunas e linhas específicas e fazer operações em linhas, o que já é muito legal. Mas também temos opções para fazer todo tipo de agregações. Então vamos dar uma olhada em um pouco disso agora. Vamos para a nossa mesa de pista de novo. E vamos olhar especificamente para esta coluna de milissegundos e apenas olhar para eles, tentar obter algumas informações agregadas sobre isso. Por exemplo, e se quisermos encontrar o tempo médio de um sólido ou o tempo mais longo ou o tempo mais curto. Ou se quisermos apenas algumas informações como quantos valores estão nesta coluna? Então vamos dar uma olhada em alguns desses. Nós vamos escrever a nossa declaração de seleção esqueleto primeiro, selecionando a partir da mesa de caminhão e limitando nossos resultados para 5 mais apenas meio que vê-lo, esta é a tabela para eu gosto de selecionar. Certo, então vamos primeiro tentar encontrar a média de milissegundos para o paciente. Então, para fazer isso, podemos usar uma função chamada ou denotada AVG para média. E se aqui nós apenas colocar dentro da coluna de milissegundos, então nós vamos obter um valor retornado, que vai ser a duração média. Sabemos que é a duração porque é isso que a coluna de milissegundos doa. Mas é apenas a média da coluna de milissegundos. Então podemos nos dar uma melhor média de mili segundos. E assim este vai ser o valor médio da nossa coluna de milissegundos. Também podemos fazer outras coisas. Por exemplo, podemos encontrar o tempo mais longo. Então podemos encontrar o máximo da coluna de milissegundos, que podemos ver aqui. Este aqui vai ser o tempo mais longo que temos nesta coluna de milissegundos aqui. E este é o nosso valor aqui. Também podemos encontrar o menor tempo, tomando o mínimo. Sum, atualizando nosso nome novamente aqui vamos ter o mínimo. E aqui podemos ver que este é o menor tempo que temos em nossos valores de caminhão para o tempo em milissegundos. Nós também pode usar um, outra função de agregação onde podemos resumir todos os valores em uma coluna, por exemplo. Então podemos resumir tudo em milissegundos, que será o tempo total de todas as faixas. Então resumindo todos os valores nesta coluna de milissegundos aqui vai nos dar este resultado aqui como podemos ver, agora, há outra função legal que temos, que é a contagem. Agora a contagem aqui, vamos colocar uma coluna e vai contar o número de ocorrências que temos. Então, ele só vai nos dar uma contagem do número de valores que temos. Então, por exemplo, podemos colocar aqui a coluna de milissegundos. E ele vai nos dizer o número de instâncias em milissegundos. E se executarmos isso, podemos ver neste caso que temos 3.503 instâncias diferentes. Então, 3.503 valores aqui. Estes não são valores únicos. Estes são apenas instâncias diferentes neste caso, ou tabela foi meio cortado em 500 apenas porque ele não quer mostrar muito. Mas nós podemos realmente, nós podemos realmente ver aqui para você em eles filtrando por exemplo, temos mais valores disponíveis. Na verdade, temos 3.503 linhas onde esses valores para encontrar. Agora, a razão pela qual eu digo especificamente o número de instâncias em milissegundos e porque quando há valores nulos, isso afeta a contagem. Então vamos dar uma olhada em algum valor é onde sabemos que não há valores, que é a coluna compositor. Então vamos contar o número de instâncias que temos e a esperança e a coluna compositor como número de instâncias e compositor e executar isso e olhando para os resultados aqui vemos que temos 2525 linhas que não contêm valores nulos. Considerando que para os milissegundos, temos 3.503 linhas que não contêm valores nulos. E se queremos apenas obter o número total de linhas sem ter que se preocupar se uma coluna pode ou não acontecer, nenhum valor dentro. Bem. E duas maneiras comuns de fazer isso. Um deles está colocando uma estrela aqui dentro. Este vai ser o número total de linhas e o começo é apenas vai basicamente apenas nos deixar contar tudo. Então podemos ver aqui, se olharmos para ele, temos 3.503 linhas sem valores antigos. Nós também poderíamos colocar o inteiro um aqui, e ele vai apenas contar um para cada linha que ele tem. E assim podemos ver que vamos obter o mesmo resultado retornado aqui. Então podemos usar a função de contagem em colunas, caso em que vamos contar o número de linhas onde temos valores desconhecidos, que podemos ver são diferentes dependendo das diferentes colunas. Por exemplo, no compositor, onde temos valores nulos, esse número é menor. Ou podemos colocar uma estrela ou o número de um aqui dentro. E isso vai apenas contar para nós o número total de linhas que temos, como podemos ver aqui. Agora podemos, é claro, ainda fazer um monte de outras coisas legais também, ou colunas. Por exemplo, vamos primeiro usar algumas aritméticas simples e girar ou milissegundos em dois minutos, minutos fracionários. Então a primeira coisa que vamos fazer é dividir ou milissegundos por mil. Isso vai nos dar o Sung de segundos. E então nós vamos dividi-lo por 60, o que vai nos dar a duração da música em minutos. Então vamos em frente e executar isso. E se rolarmos para a esquerda, podemos ver aqui o comprimento médio da música em azul. Este caso vai demorar minutos, é apenas um pouco mais de seis minutos. Então 6.05, que é 606, que agora não é seis minutos e segundos. Mas esse valor aqui vai entre 01. Então é 0,6 de um. Então isso vai ser uma fração que está aqui. Então podemos ver, ainda podemos fazer coisas para nossas colunas dentro e, em seguida, usar as agregações nele. E é claro que vamos chamar a função no resultado final que temos aqui dentro. 35. 33Grouping E filtragem: Então acabamos de ver agregações e agregações são legais. Mas o que é ainda mais legal como agregações por diferentes grupos. Então o que isso significa é, digamos que queremos descobrir o número de músicas que cada um dos compositores que escreveu. Atualmente, o que teríamos que fazer é usar a função de contagem, que podemos contar o número de linhas que temos. E então teremos que filtrar para cada compositor, para cada compositor diferente. Mas SQL pode realmente ir muito além disso. E o que podemos fazer é criar agrupamentos por cada entrada diferente que temos aqui. E então podemos obter agregações para cada uma dessas entradas diferentes que temos. Agora isso vai ser específico para usar agregações e há alguns requisitos específicos, mas vamos dar uma olhada nisso. Vamos fazer a primeira tarefa que não pode ser falado, que é selecionar para encontrar o número de faixas que temos para cada compositor diferente aqui. Então, começando com nossa declaração esqueleto, selecionando todas as colunas da mesa do caminhão e limitando nossos resultados para Phi de ter um ponto-e-vírgula no final aqui para boas práticas. E podemos ver direito. Estes são os primeiros cinco resultados na nossa mesa. Ok? Então agora o que queremos ter é, antes de tudo, vamos contar o número de linhas que temos. E então este será apenas o nosso número de linhas, que você pode ver aqui é 3.503. Está bem, mas como podemos agrupar isto pelos diferentes compositores que temos? Bem, podemos fazer é que há uma declaração legal que podemos usar chamado e grupo BY. E aqui podemos colocar a coluna ou colunas que queremos agrupar. Por exemplo, vamos agrupar pela coluna compositor. E agora, se executarmos isso, podemos ver aqui que estamos recebendo diferentes valores de contagem. Na verdade, neste momento não sabemos a que se refere isto. Isso está tudo bem. Podemos tirar a coluna 2 do nosso compositor. E podemos mostrar nossa coluna de compositor. E podemos mostrar o resultado da conta. E nós podemos ver aqui, ok, Então quando o compositor é John Dolan, você vê que nós temos CONTÍF um e executar o compositor é isso, você tem uma contagem de um, e assim por diante. Então você pode ver aqui nós temos os diferentes valores para as diferentes entradas que temos compositores. E se quisermos, podemos remover a declaração feminina e ver o resultado completo para todos os diferentes compositores. Então você pode ver aqui alguns compositores para os quais temos mais entradas. A maioria deles são muitos deles que só temos uma entrada. Então, neste caso, é realmente dependendo do compositor é que podemos ver aqui. Agora, é claro, também podemos usar nossa instrução ordem BY e menos ordem e também nos dar um alias como número de faixas. E vamos ordenar por um número de faixas, por um número de faixas em ordem decrescente, para que tenhamos que a contagem mais alta primeiro. Então, reexecutar isso, rolando de volta para cima, ok, então a contagem mais alta é na verdade aqueles em que você não tem valores. Depois disso temos Steve Harris, U2, corredor, barra Richards, e assim por diante. Então você pode ver aqui agora para cada compositor que temos, nós também sabemos quantas faixas neste caso temos para eles em nossa mesa. Agora também podemos adicionar alguma filtragem para isso, e existem dois tipos diferentes de filtragem. Vamos primeiro com um básico 1 e apenas tirar todos os casos em que o compositor é nulo. Então, onde vamos colocar isso? Porque nos lembramos de mais cedo que a ordem em que temos instruções, e é realmente importante para uma consulta SQL. E precisamos ter certeza de que tudo está na ordem certa. Agora o lugar que este foi ir é entre a declaração de de e o grupo BY. Então vamos dizer onde o compositor não é nulo. E agora vamos executar isso e podemos ver aqui agora que o caso nulo desapareceu, mas nenhum dos outros valores aqui foi alterado porque estamos agrupando compositores compradores aqui. Agora é importante novamente que tenhamos o pedido correto. Porque, por exemplo, se pegarmos isso e o colocarmos aqui, então não vai funcionar. Portanto, precisamos ter certeza de que nossa ordem das instruções que estamos usando em nossa consulta SQL estão corretas. Tudo bem, então nós agrupamos por ou compositores e filtramos os casos em que o compositor não é nulo. E agora temos o resultado para cada compositor. Temos o número de faixas que temos para eles em nosso banco de dados. Então, o que acontece se tentarmos selecionar uma coluna aqui que não tenhamos agrupado. Por exemplo, o que acontece se também tentarmos selecionar a coluna de nome, que contém o nome de cada faixa. Então, se rodarmos isso, então teremos um erro. Porque assim que usarmos esse grupo por instrução, estamos usando essas agregações. Não podemos ter colunas aqui que não são uma agregação ou estão usando o grupo por declaração aqui. Então, para ser capaz de mostrar a coluna de nome, nós realmente teríamos que agrupar por compositor e nome. Agora, se rodarmos isso, veremos que isso não é particularmente útil porque deve ser que nós temos apenas um registro. E você pode ver em alguns casos aqui temos mais. Mas realmente o que estamos esperando aqui é que, você sabe, os números aqui serão pequenos e não há, realmente não há muita praticidade para agrupar, mas compositores em nomes. Podemos ver que realmente funciona. E assim, a maneira que este agrupamento faz o seu primeiro, nós agrupámos por compositor. E, em seguida, dentro de cada compositor, nós agrupamos pelo nome da música. Assim, se tivermos dois compositores que escreveram uma canção com o mesmo nome, não será que os dois compositores sejam agrupados, mas antes, primeiro, agruparemos por compositores, e depois dentro de cada compositor grupo, agrupamos por nome. E então temos nossa agregação, agrupamento de compradores aqui. Se trocássemos a ordem, em seguida, loop, então, nos casos em que dois compositores escreveram o mesmo nome da música, então veríamos esse tipo de refletido aqui. Neste caso, temos algumas dessas instâncias novamente porque lembramos que temos vários registros onde o compositor é de Paris e onde o nome real é Rothschild. Mas também obteríamos resultados adicionais porque podemos ter apenas, se tirarmos esta coluna de compositor aqui, se duas canções têm o mesmo nome, então elas seriam. E agora temos que levar o compositor a partir daqui, então eles seriam agrupados no mesmo segmento. Então isso é uma coisa importante para estar ciente, que a ordem, e vamos pegar isso, vamos tirar isso de novo. A ordem do agrupamento que estamos fazendo tem um efeito no resultado final. E assim o agrupamento funciona tomando a primeira declaração, que vai ser o primeiro grupo dentro deste grupo. Em seguida, temos o próximo agrupamento. Então isso vai fazer o segundo grupo, e então por diante. Então, por exemplo, vamos tentar fazer uso disso de uma maneira mais prática. E vamos tentar encontrar o número de faixas que temos para cada compositor, para cada álbum. Então vemos aqui que temos uma coluna de ID de álbum. Então vamos primeiro grupo por compositor, e então vamos agrupar por ID de álbum. E então vamos também mostrar o ID do álbum aqui. E então o que podemos ter é agora que temos os resultados, que são para cada compositor, hum, e para este álbum específico, este é o número de faixas que temos para este compositor e este álbum. E podemos ficar diferentes. Podemos ver aqui que temos o mesmo compositor, mas temos dois álbuns diferentes. E estes casos, estes são IDs de álbum que podemos encontrar, por exemplo, na coluna ascendente temos aqui o mapa do ID do álbum para o nome real do álbum em si porque é uma boa prática usar inteiros e outros lugares para que se o título muda ou algo assim, você não precisa atualizar todos os bancos de dados, mas apenas as informações onde ele está armazenado. Então podemos ver aqui, temos os IDs do álbum que representam um álbum específico. Então, neste caso temos um compositor que temos dois álbuns para e para o álbum 55 deste compositor, temos 20 faixas e o álbum 54 deste compositor, temos 17 faixas. Agora, é claro, não precisamos apenas fazer a agregação de contagem aqui. Também podemos fazer outros. Por exemplo, podemos chamá-lo, podemos fazer todos os que vimos anteriormente. Por exemplo, tem a média de milissegundos aqui. Então, como comprimento da música, e então nós vamos ter outra coluna que nos dá o comprimento médio da música de cada álbum para cada compositor. Então vamos agrupar por compositor primeiro. Então vamos agrupar meu ID de álbum para cada combinação de álbum compositor. Vamos então ter o número de caminhões, bem como a duração média da música. E removemos este erro de digitação aqui. E assim podemos ver isso é o que temos para quando o compositor é JC Fogarty. E então a identificação do álbum aqui é 55. Aqui temos 20 faixas para ele em nosso banco de dados com um comprimento médio de música de 224 mil milissegundos neste caso. Então, podemos ver aqui neste caso, também não precisamos adicionar a coluna de milissegundos no grupo por instrução porque é parte da agregação. Então, desde que tenhamos agregações aqui, então tudo bem. Mas as únicas colunas que temos permissão para selecionar, ou as colunas que estão incluídas no grupo por instrução, ou se os resultados de agregações de outra forma, como também vimos anteriormente, vamos receber um erro. Então, o que acontece agora se você quiser fazer alguma filtragem extra? Por exemplo, digamos, ok, queremos obter todos os resultados, mas só queremos ver os resultados onde temos pelo menos 15 faixas. Se tentarmos adicionar isso à sua causa e dizer, e onde o número de faixas é maior ou igual a 15, teremos um problema porque a agregação não foi realizada. E assim não podemos fazer a filtragem dele ainda. Na verdade, há uma maneira diferente de filtrar por resultados de agregação. E a maneira que podemos fazer isso é depois do grupo por declaração e antes da ordem BY, podemos colocar tendo e nós aqui podemos colocar a agregação que queremos filtrar por. Por exemplo, podemos dizer Ter uma contagem maior ou igual a 15. E então isso significa ter a contagem deste resultado agregação aqui sendo pelo menos 15. Agora o importante é, e vamos executar isso para ver se o resultado. Então você pode ver se nós rolamos para baixo agora, não temos resultados que estão abaixo de 15 e o número de faixas. Assim, podemos ver que a instrução where aqui nos permite fazer filtragem em uma linha por passos de linha. Nós nos daríamos ao luxo de fazer agregação em nossa consulta. Então temos que usar a declaração tendo. Se quisermos fazer a filtragem por agregação resulta no mesmo tempo em que estamos fazendo a própria agregação. E não podemos colocar isso na declaração do vencedor. Temos que colocar isso nesta nova declaração chamada ter. Agora, aqui novamente, nós também podemos encadear filtros. Por exemplo, podemos dizer ter uma contagem maior ou igual a 15 e uma duração média de milissegundos maior ou igual a 200 mil. E então, se você executar isso, e antes tínhamos 13 linhas. E se fizermos isso agora, agora temos nove filas. E podemos ver aqui em todos esses casos, o número de faixas é pelo menos 15 e a duração média da música será de pelo menos 200 mil milissegundos. Então, ainda podemos fazer a filtragem adicional também usando as mesmas regras que vimos na instrução camada. É só porque estamos fazendo agregação, a filtragem para esses resultados de agregação de tudo o que estamos fazendo na consulta tem que ser colocado nesta instrução especial tendo e não pode ser colocado na instrução where aqui. 36. 34JoinsHB: Então, anteriormente, aprendemos sobre como fazer algumas agregações mais legais, também usando as instruções de pizza de grupo, bem como usar ter para filtragem de agregação. Mas um dos problemas um pouco irritantes que vimos é que o D otimizado aqui é representado como um inteiro em vez de como um valor de nome, por exemplo, ou um título aqui. E isso é claro, devido à natureza de como bancos de dados relacionais são construídos. E também é muito boa prática porque não faz sentido repetir o mesmo nome. Centenas ou mesmo milhares de vezes, dependendo quão grande a tabela que fica neste valor ID álbum aqui, É muito melhor ter um inteiro que representa o título do álbum. Dessa forma, se o título do álbum for alterado, por exemplo, a capitalização é alterada ou algo assim. Não precisamos executar a atualização em todo o resto. Mas também usar inteiros é mais eficiente em espaço do que ter os valores de texto completo aqui. Então você verá isso muitas vezes que temos tabelas diferentes. E novamente, também aprendemos sobre isso em uma estrutura relacional. Mas teremos mesas diferentes para coisas diferentes. Por exemplo, em, por exemplo, cada álbum será apenas mantido o controle por si só e tem um ID específico. Cada artista aqui é referenciado por seu ID, mas cada ID realmente representa um artista específico como podemos ver aqui. E então essa é uma maneira muito legal de dividir dados para garantir que nenhuma tabela cresce muito ou que temos grandes informações de repetição desnecessárias em uma tabela que pode ser mais eficiente. Por exemplo, se mantivermos o registro do nome do artista e do título do álbum em vez do ID do álbum. Neste caso, não temos a identificação do artista. Mas você entende meu ponto de vista que se mantivermos o controle do nome em vez do id, não é tão eficiente porque é muito mais eficiente para manter o controle de valores inteiros aqui porque eles vão ser menores ocupados um espaço em vez de repetindo, por exemplo, o título para aqueles que estão prestes a Iraque, nós saudamos você centenas ou milhares de vezes dependendo de quantas entradas não temos são tabelas diferentes. E novamente, também é uma boa prática porque então se quisermos fazer uma mudança em um título, porque por alguma razão percebemos que fizemos um erro de digitação ou algo assim quando colocamos, em vez de ter que fazer todas essas mudanças e cada única tabela diferente que tem este valor título, podemos apenas alterá-lo no, neste caso, por exemplo, tabela Álbum. E então qualquer álbum que é referenciado por este ID apenas vai encontrar o título certo, em vez de termos que passar por cada tabela de células, ver se há um título lá e se há atualizá-lo. Desta forma, tudo é uma espécie de estrutura agradável que ainda está conectado, mas estamos fazendo a conexão e uma maneira muito mais inteligente que torna tudo muito menos propenso a erros e também é mais eficiente. Então você duplica lá dentro. Mas é claro que agora encontramos esses problemas como vemos aqui, onde temos o ID do álbum. Mas realmente, é claro que neste momento gostaríamos de ver o nome do álbum. Então, como podemos fazer isso? Então, primeiro de tudo, o que eu vou fazer é eu vou comentar isso porque eu gostaria de voltar a isso mais tarde para que possamos implementar a solução aqui. Mas primeiro, eu gostaria de apenas olhar para o caso de uso mais simples para isso. E o que vamos fazer é escrever uma declaração de união onde podemos juntar duas mesas juntas. E nós vamos usar nossa mesa de artista, bem como aqui faz a tabela do álbum. Então vamos pegar a mesa ABO aqui. E para cada álbum, vamos juntar-nos à mesa do artista. Agora sabemos que o valor do artista aqui se refere à chave do artista aqui, modo que sabemos, por exemplo, quando vemos artistas id e um aqui, nós, isto corresponde ao nome ac-dc. Então, a maneira que podemos juntar essas tabelas juntos é usando uma instrução SQL chamada join. Então vamos dar uma olhada, Vamos primeiro escrever são apenas um tipo de instruções SQL esqueleto. Vamos selecionar tudo a partir de. E vamos começar apenas com a mesa do álbum, que temos aqui. Lembre-se, neste caso, não precisamos das aspas em torno dele porque fizemos essa mudança de volta onde realmente mudamos o nome. E vamos limitar nossos resultados a cinco. Por agora. Vá em frente e execute isso. Certo, agora temos nossa mesa de álbuns aqui, mas vamos nos juntar aos artistas. Então, para fazer isso, vamos ter a nossa instrução select e para definir também as colunas aqui que vamos ter a instrução from. E agora vamos ter depois uma declaração de união. Então esta vai ser a mesa, e esta vai ser a segunda tabela que vamos juntar-nos a ela. Então queríamos juntar-nos a esta mesa, aqui, a mesa do artista. Mas agora precisamos especificar o que a norma conjunta, porque agora não há como saber qual coluna deve corresponder a isso? Agora, é claro, você sabe, você pode dizer, ok, bem, o título aqui é ID de artista. E se entrarmos na coluna do artista aqui também se chama ID do Artista. Mas lembre-se que, em alguns casos, podemos chamar esse ID porque é o ID e está implícito que é o ID do artista. Mas em outra tabela, pode ser chamado de ID do artista para tornar mais explícito que isso está se referindo ao ID dos artistas porque podemos ter outras idéias, por exemplo, o ID do álbum. Então agora precisamos especificar o que essas coisas com essas duas tabelas precisam ser unidas. E fazemos isso usando a declaração honesta dizendo onde. E agora nós dizemos, ok, onde o álbum oh, bem, que foi auto completado por aderência de dados. Mas vamos fazer isso corretamente. Onde o álbum e agora na coluna do álbum, vamos encontrar o ID do artista. Então, onde o ID do artista do álbum, que temos aqui é igual a. E agora queremos juntá-la à mesa do artista. Então, queremos dizer onde o ID do artista do álbum é igual ao ID do artista que encontramos dentro da tabela do artista. Agora, esta é a afirmação. Nós também acabamos de obter autocomplete para comprar de dados crescidos. E se olharmos para os nossos formatos de tabela, podemos ver aqui. E a razão pela qual ele sabe disso é porque podemos olhar para o álbum e o ID do artista aqui tem uma chave estrangeira que liga para o ID do artista na tabela do artista. Então está bem aqui. Assim, podemos ver que existem esses links de chave estrangeira que são realmente bons porque especifica como essas colunas estão relacionadas com as diferentes tabelas. Mas nós podemos realmente usá-lo uma declaração honesta aqui e nós vamos dizer, OK. Então vamos apenas executar isso para que possamos realmente ver os resultados. Para que possamos ver arte. Temos o ID do álbum e o título. Estes vêm da mesa do álbum aqui. Então temos o nosso álbum aqui, que tem o ID do álbum e o título. Mas agora temos mais duas colunas, cartão, a ID do artista e outra ID do artista. E isso é porque temos dois artistas nisso, um da coluna ID do álbum e outro da coluna do artista. Então, neste caso, nós realmente estamos, Ele está nos mostrando que este é o ID do artista da coluna do álbum, e este é o ID do artista da coluna do artista. E podemos ver aqui, é claro que eles vão combinar porque nós juntamos nessas tabelas com a condição de que o ID do artista e tabela do álbum é igual ao ID do artista na tabela do artista. Então podemos ver aqui que se junta. Agora, esses valores aqui coincidem. E agora temos a coluna de nome, que vem da tabela do artista aqui. Então podemos ver que tomamos dois bancos de dados ou duas tabelas, em vez disso, a tabela de esboço e a tabela de artista. E nós apenas colamos ou nós meio que colamos eles juntos no lado que eles estão presos juntos onde esta coluna ID artista é igual, o que podemos ver aqui. Agora, neste ponto, seria muito bom começar a usar aliases de tabela. Então, por exemplo, vamos pegar esta mesa sim arte. E aqui podemos nos dar, por exemplo, ALP. E então podemos especificar agora em vez de dizer o ID do artista do ponto do álbum, porque estamos usando aliases de tabela, vamos dizer L dot ID do artista. E aqui vamos dizer arte. Então esta é a primeira maneira que podemos especificar, mas também provavelmente não queremos selecionar todas as colunas. Nós provavelmente, talvez nós queremos o ID do álbum, mas o ID do álbum vem da tabela do álbum. Portanto, é bom especificar que queremos o ID do álbum da tabela do álbum. Digamos que queremos o título da tabela do álbum. Você vai dizer da mesa do álbum, que queremos o título. E digamos que queremos uma das identidades dos artistas, mas não queremos as duas. E podemos escolher se queremos o do álbum. Aqui, o ID do artista, ou se queremos o da mesa do artista, não faz diferença porque eles vão ser os mesmos porque nós nos juntamos a eles. Mas é bom escolher um para que não tenhamos valores duplicados aqui. E também queremos o nome do artista em si, que vem da mesa do artista. Então vamos da mesa do artista, queremos usar o nome. E assim podemos executar isso. E podemos ver agora tudo é muito mais limpo especificamente porque não temos duplicatas de artistas, mas é bom usar os apelidos de tabela para que estejamos nos referindo às tabelas apropriadas aqui. E é claro que não precisamos usar uma mesa ASUS. Também podemos usar os nomes completos da tabela, mas é melhor usar aliases porque torna mais curto. Mas é bom especificar exatamente quais colunas você deseja selecionar. Porque muitas vezes, especialmente quando as tabelas ficam maiores, elas serão muitas colunas que você provavelmente não quer usar. E então é melhor especificar quais colunas exatamente você deseja usar. Você não tem só por se juntar. Por exemplo, vamos dar uma olhada. Nosso transporte de caminhão aqui tem um monte de colunas. Então, por se juntar a nós em outra mesa que é quase tão grande, então é claro que vamos ter um monte de colunas. Não vamos usar muitos deles. Portanto, você sabe, é uma boa prática apenas ter certeza disso e vamos começar a fechar alguns desses porque eles também estão ocupando muito espaço. Portanto, é uma boa prática apenas selecionar as colunas que você realmente deseja, a menos que você queira usar todas elas. Mas mesmo assim é bom saber que você não quer ter colunas duplicadas tendo o artista que eu preciso duas vezes, isso é apenas um desperdício de espaço. Portanto, é uma boa prática especificar quais você deseja escolher. Então podemos ver aqui, esta é a declaração que usamos para juntar o álbum e a mesa do artista juntos. E essa junção foi feita na coluna onde a ID do artista e a tabela do álbum é igual à ID do artista e à tabela do artista. E é claro que podemos tirar ou uma declaração de limite aqui. E isso nos dará a resposta completa para todos esses casos. E agora algo que é importante saber é que o que está acontecendo aqui é chamado de união interna. E podemos especificar a junção interna se quisermos. Embora se nós apenas usamos a declaração join em si, não é, ele vai implicar a junção interna, mas com a junção interna significa que quando qualquer um desses valores são nulos, ele não vai juntar-se neles. Então, por exemplo, se tivéssemos um caso aqui onde o ID do artista é nulo, então essa linha será descartada. Ou se houver um ID de artista aqui, que não está representado na tabela do artista, então esses valores não serão incluídos. Então, o que uma união interna significa é que estamos apenas olhando ou estamos apenas obtendo os resultados onde esta tabela ou esses valores têm uma correspondência aqui. E esses valores têm uma correspondência aqui? Agora há outras alegrias que podemos fazer quando se não tivermos uma ID de artista, por exemplo, aqui, ou se tivermos uma ID de artista, mas não é representado aqui que guardamos essa informação. Mas neste caso, se estamos usando a junção interna, que está implícito quando usamos a declaração conjunta, apenas a declaração conjunta simples. Então só procuramos o cruzamento destes dois. Estamos apenas procurando onde esse valor e esse valor, eles existem em ambos os lados. E então, se um dos valores não existe em ambos os lados, que nós não vamos ter essa sala. Isso é importante saber porque se um valor estiver presente em algum lugar, mas não estiver presente em outro lugar, essas linhas serão removidas. Portanto, apenas esteja ciente disso. Isto aqui é o que é chamado de união interna. Muito bem, agora que sabemos como funciona a união, vamos usar isto. Todos eles. Nossa declaração anterior que comentamos, espere mais cedo aqui. Então vamos reexecutar isso. E o que queremos fazer é substituir esta coluna de identificação do álbum pelo nome do álbum. Então, como podemos modificar nossa declaração aqui para tirar o nome externo? Então o que vamos fazer é nos juntar e vamos fazer uma junção interna. Mas isso está implícito quando escrevemos a declaração conjunta aqui. Vamos juntar-nos a esta mesa de música aqui, a mesa do álbum, esta aqui. Então vamos juntar-nos aqui, a mesa do álbum. Vou usar a abreviação aqui. E aqui eu vou usar, bem, apenas a abreviação TR. E eu estou realmente especificar cada uma das colunas agora para ter certeza de que não há confusões ou erros no caso. Por exemplo, o álbum também tem uma coluna chamada compositor, porque então haverá um conflito de dois. Escolho um compositor da faixa ou da tabela do álbum. Então agora eu vou me certificar de especificar cada uma das referências de coluna que eu tenho para ter certeza de que não há confusão ou erros que acontecem. Então todos esses casos quando estamos usando na mesa de faixas, porque agora estamos trazendo a tabela do álbum. Então, na mesa do caminhão novamente, vamos fazer uma junção interna com a mesa do álbum. E nós vamos juntar-se em onde o, usando a abreviação para atrair tabela, onde o ID do álbum é igual ao ID do álbum V da tabela do álbum. E agora, em vez de selecionar o ID do álbum aqui, eu quero selecionar estender o título do álbum a partir da tabela do álbum. Então, se rodarmos isto e ainda tivermos a referência do ID do álbum aqui em baixo. Então, neste caso, podemos realmente fazer o agrupamento pelo título do álbum porque estamos realizando a junção e então vamos executar a operação de agregação. Então você pode ver aqui primeiro estamos realizando a junção, então estamos realizando a operação de agregação de agrupamento. Então, em vez de nos juntarmos ao ID do álbum, AGORA vamos juntar-nos ao título do álbum. Vai dar-nos o mesmo resultado, claro, porque a identificação só se refere a um título. Então vamos fazer isso mais uma vez. E agora podemos ver que nosso ID foi substituído pelo título que veio da tabela do álbum aqui. E nós temos isso porque cada raciocínio, a tabela de faixas, cada ID de álbum aqui, nós nos juntamos no ID do álbum aqui, e nós atualizamos nossa declaração de seleção para, em vez disso, extrair o título da tabela do álbum, onde nossa faixa e nossa tabela de álbum foram unidos em. Então podemos lembrar aqui que juntamos nossas duas tabelas também nas colunas de identificação do álbum. Neste caso, o ID do álbum foi chamado e meu D em ambos os casos, e em alguns casos, por exemplo, na coluna do álbum, faria sentido chamar apenas este DID porque estaria implicitamente implícito que o ID representaria o ID do álbum. Então, no caso de eu só dizer ID aqui. E então nós apenas referenciamos a coluna ID da tabela do álbum. Neste caso, não acontece. Mas só estou dizendo que esses dois não precisam ser sempre iguais. Neste caso, acontece que eles são iguais, mas também há muitos casos em que eles não serão iguais porque a chave primária seria apenas chamada de ID, em vez de ter o nome da tabela ou algo que também especifica qual ID exatamente é. Assim, podemos ver junções são muito úteis por causa da forma como os bancos de dados relacionais são construídos, que é realmente útil e eficiente porque nos permite separar informações e apenas manter o controle de diferentes coisas separadamente para garantir que nem tudo está afetando tudo o resto que nossos armazenamentos são eficientes. E então, quando fazemos atualizações, essas atualizações apenas para, uh, ser aplicadas em um só lugar. E então quando usamos junções que basicamente se propagaram em todos os lugares porque estamos usando IDs em todos os outros lugares. Então, muito disso é uma prática muito boa, o que leva a um bom desempenho, bom armazenamento e também leva a uma atualização muito mais fácil. E então podemos usar as declarações conjuntas porque temos todas essas relações entre nossas diferentes tabelas para então preencher as informações adequadas. Por exemplo, substituindo o ID do álbum aqui pelo título do álbum. E nós podemos ver aqui nenhuma de nossas outras declarações realmente mudou, exceto porque agora não estamos mais usando V ou tirando o ID do álbum. Em vez disso, temos que substituir a agregação, o título do álbum em vez do ID do álbum, porque o ID do álbum não está mais na instrução select aqui. E então a outra coisa que fizemos como adicionar os pseudônimos para nossa tabela para garantir que não haja confusão. Por exemplo, quando temos nomes de coluna duplicados para garantir que estamos nos referindo à coluna correta de uma tabela específica. Então, por exemplo, aqui referindo-se à coluna do compositor da tabela do caminhão, porque pode ser que a coluna do compositor também possa existir na tabela do álbum. Então, para ter certeza de que não entendemos isso, nós especificamos qual tabela, mas eu quero escolher apenas no caso de você estar confuso com o que acabou de acontecer, se você clicar duas vezes sobre ela, tira este painel de navegação à esquerda e, em seguida, clique duas vezes sobre ele novamente e ele trazê-lo de volta apenas como uma nota lateral. Mas sim, como você pode ver, as junções são realmente legais porque nos permite juntar todas essas informações que são intencionalmente divididas por causa da estrutura de bancos de dados relacionais. 37. 35leftRightJoysHB: Tudo bem, então agora nós aprendemos sobre uma junção, especificamente junções internas onde nós olhamos para a interseção entre duas tabelas. Mas neste caso, estamos limitados apenas ao cruzamento. E pode haver alguns casos em que temos dados em algum lugar e pode não haver um valor correspondente em outro lugar. Por exemplo, vamos dar uma olhada nesta tabela de linha de fatura. A linha da fatura só tem informações de compra sobre quem ou o que foi comprado, qual foi a fatura, qual faixa foi comprada para o preço, bem como a quantidade comprada. E podemos ver que temos uma referência de identificação de pista aqui. E se olharmos para isso, embora você provavelmente já saiba onde o nome, podemos ver aqui, o ID do caminhão é uma referência de chave estrangeira para o ID do caminhão na mesa do caminhão. Então, se abrirmos a mesa de pista, podemos ver aqui que temos os diferentes IDs de pista. Então vamos contar quantas faixas temos na mesa do caminhão primeiro. Então vamos em frente e selecionar e vamos apenas contar um da nossa mesa de caminhão. E não vamos fazer mais nada. E assim podemos ver aqui temos 3500 e três linhas diferentes. E uma vez que cada linha tem um ID de Track exclusivo porque o ID do caminhão é a chave primária, também podemos deduzir que temos 3500 e três faixas exclusivas. Mas só porque temos tantas faixas, isso não significa que todas as faixas que foram compradas, talvez fosse talvez não fosse. Vamos descobrir. Então, se olharmos para a linha da fatura, como podemos contar quantas faixas diferentes foram compradas? Atualmente, temos nossos métodos de agregação, mas no momento ainda não temos uma ferramenta específica para entender exatamente quantas faixas únicas foram compradas aqui. Uma vez que algumas faixas podem ser compradas mais de uma vez, uma vez que pessoas diferentes podem comprar a mesma faixa. Muitas vezes descobrimos isso. Bem, o que podemos fazer é fazer uma pequena modificação na nossa declaração de contagens aqui, que está dentro. Você pode colocar a palavra-chave distinta, que vai procurar ocorrências distintas. Mas, neste caso, não podemos mais usar o número 1. Você tem que fazer uma referência específica a uma coluna. Então, vamos fazer referência à coluna ID da faixa dentro da linha da fatura. Então vamos fazer referência aqui a faixa do D e vamos atualizar nossa tabela da faixa para a tabela de linha de fatura. Então vamos cobrir esta declaração. Em tempo de guerra aqui estamos fazendo a agregação de contagem. Mas, em vez de apenas contar todas as ocorrências, queremos saber o número de ocorrências únicas e ID da faixa. Então, queremos saber quantos IDs de faixa diferentes e presente dentro desta coluna ID de faixa. E isso é o que o distinto nos permite fazer aqui dentro, nos permite contar ocorrências únicas. Ele nos permite contar ocorrências distintas de itens separados dentro daqui. Então, novamente, é importante que realmente referenciemos a coluna onde queremos encontrar o número de ocorrências únicas dentro. Então, se executarmos isso, podemos ver na tabela de linha de fatura e na coluna de identificação de caminhão, temos cento, dez e novecentos e oitenta quatro faixas diferentes ou bastante únicas. Isso não significa que cada camião só aparece quando é possível que tenha aparecido mais de uma vez. Essa não é a informação que estamos tentando obter. Só sabemos que 1984 IDs de pista exclusivos aparecem nesta coluna de identificação de caminhão dentro da tabela de linha de fatura. Então, o que isso significa e por que isso é importante? Bem, se quisermos talvez juntar a nossa faixa e nossa tabela de linha de fatura, isso significa que algumas de nossas faixas na verdade sobre um 1000 ou mesmo mais de 1500 faixas não têm nenhuma fatura para loop, que significa que os dados não serão usados porque estamos olhando para o cruzamento. Mas às vezes não queremos perdê-la. Às vezes, se não houver fatura, só queremos mantê-la como você sabe, queremos mantê-la lá, mas só queremos ter uma palavra a dizer que não há dados para este. E assim não podemos fazer isso com uma junção interna porque a junção interna procura a interseção. Então vamos escrever uma consulta onde tomamos nossa tabela de controle aqui. E para cada faixa, nós também anexamos basicamente as informações que temos aqui da nossa tabela de linha de fatura. Agora, para cada faixa, então teremos pelo menos uma fatura. Agora podemos ter várias faturas, o que significa que vamos obter algumas linhas duplicadas onde as informações sobre a pista em si como uma duplicata. Mas então as informações sobre a fatura serão separadas. Então, para fazer isso, ou vamos fazer é dizer “selecione”. E vamos começar com selecionar tudo da mesa de controle. A menos que dê um TR abreviado. E agora vamos fazer uma junção à esquerda. E nós vamos juntar-nos a ele na tabela de linha de fatura. E vamos apenas dar isso também abreviação I L. E então vamos nos juntar onde a identificação do caminhão do caminhão. E já podemos ver que grupo de dados está sugerindo isso para nós por causa da referência chave estrangeira. Mas onde o ID do caminhão da pista é igual ao ID do caminhão da tabela de linha da fatura. Então, novamente, queremos combinar onde este ID de caminhão aqui é igual ao ID de caminhão que temos aqui. E se tivermos mais de uma ocorrência, por exemplo, para a nossa primeira pista aqui, então teremos os dados da tabela de caminhões duplicados. Então nós vamos ter duas linhas aqui, mas os dados da fatura em que vai ser anexado a ele vai ser uma linha para basicamente cada fatura, cada fatura separada que temos para ele. Então não vamos ter linhas duplicadas completas. Poderia ser as partes dele, por exemplo, da nossa tabela de controle aqui, pode ser duplicado, mas então as faturas correspondentes se houver mais de uma fatura, por exemplo, se houver três faturas pela primeira vez aqui, para aqueles prestes a balançar, nós saudamos você e nós vamos ter três filas para isso. Rastrear, as informações vão permanecer as mesmas, mas cada linha vai ter informações sobre uma fatura separada. Mas tudo isso estará disponível para nós para cada linha, para cada registro que temos em nossa agora a mesa de junção. Então vamos em frente e executar isso para ver o resultado. E assim como podemos ver aqui, agora temos novamente a informação quando há colunas duplicadas sobre qual tabela a coluna vem. Temos informações da mesa de atletismo. E então, se rolarmos para a direita, também temos as informações da tabela de linha de fatura, que podemos ver aqui. E então, sim, isso vai ser nossas mesas que agora estão unidas. Mas o importante é, e vamos dar uma olhada no número de idéias de faixa de nossa coluna de pista que aparecem aqui. Então vamos contar a contagem distinta, e vamos nos concentrar no ID do caminhão da coluna da pista, já que nem todas as faixas aparecem em nossa tabela de linha de fatura aqui, mas todas as faixas são mantidas em nossa tabela de trilhos aqui. Então vamos olhar para o número exclusivo de IDs de pista que temos nesta tabela de junção, com foco no ID de caminhão de coluna que veio da tabela de pista. Então, executando isso, podemos ver que temos 3500 e três faixas únicas, que é exatamente o que esperaríamos. Mas para essas faixas, não para todas elas, nós realmente temos dados de fatura. Então vamos selecionar tudo novamente aqui. Mas vamos nos concentrar em encontrar os casos em que não temos dados de fatura para ver como eles se parecem. Então, vamos dizer onde a identificação do caminhão da linha da fatura. E agora, nos casos em que não temos dados, esses valores serão nulos. Então vamos procurar onde uma das colunas da nossa linha de fatura é nula. Podemos usar a identificação do caminhão. Também podemos usar qualquer outra coluna da linha da fatura. Porque se tivermos uma faixa que não tem dados correspondentes e a tabela em que estamos juntando-o, então as linhas resultantes para essa junção serão apenas nulas. Então, se executarmos isso, vocês podem ver aqui que temos, por exemplo, a identificação do caminhão 7. E se olharmos, não temos dados de fatura que correspondam a ele. E então isso é o que nossa junção esquerda faz com uma junção esquerda faz, é pegar essa coluna inteira e leva o primeiro, desculpe, ele leva a primeira tabela inteira, esta tabela inteira aqui. E junta-se a ele em, ou junta-se em outra tabela e um junta-se nesta condição. Mas se não há instância correspondente em nossa segunda tabela, então nós ainda vamos manter as informações desta primeira tabela ou desta uma tabela esquerda é tipo do que você pode pensar sobre isso. Mas porque não temos nenhuma informação correspondente da outra tabela, os valores que temos aqui serão nulos porque não há nenhuma informação correspondente para adicionar a isso. Então, como isso difere da união interna que tínhamos antes? Bem, se tirarmos a esquerda aqui, e se fizermos isso de novo, podemos ver aqui que nossos resultados não serão nada. Não há pia, nenhuma linha onde há um valor nulo dentro desta linha de fatura. E isso é porque quando estamos fazendo uma junção interna, estamos olhando para o cruzamento. Enquanto que se estamos fazendo uma junção à esquerda, estamos mantendo todas as informações da primeira tabela. E se a informação da segunda tabela existir, vamos adicionar isso em. Mas para os casos em que esta informação não existe, por exemplo, nos casos em que o tracto não tem uma fatura e a tabela de linha da fatura. Então, porque ainda temos as colunas e a tabela de junção resultante, esses vales aqui só vão ser nulos porque não há nada para ele. E assim podemos ver que é o que a junção esquerda faz, é que não lançamos as linhas que não têm dados correspondentes na outra tabela. O que às vezes pode ser bom. Às vezes também não é bom porque isso também significa que suas tabelas resultantes serão muito maiores. Porque se não houver, não há dados correspondentes, então, na interseção, isso seria jogado fora e a tabela resultante seria menor, enquanto que agora estamos segurando isso. Então, dependendo do que você precisa, se você ainda quiser manter informações que podem não ter informações correspondentes na outra tabela, então você deseja usar uma junção esquerda. Outra alternativa é uma junção direita, que veremos em um segundo, ou uma junção completa ou junção externa completa. Mas se você só quer se concentrar na interseção, então você quer ter certeza de que você usa uma junção interna, que você também pode abreviar apenas tendo a junção aqui. Então eu mencionei dois outros tipos de junções. Então nós temos a junção esquerda, que vai executar a coisa toda. Então temos a esquerda juntar-se. Agora a junção esquerda novamente se concentra em manter cada valor único a partir daqui e juntando os dados desta tabela aqui. E nos casos em que não há correspondência da segunda tabela, nós apenas manter os dados da primeira tabela que os valores correspondentes da segunda tabela nós apenas vamos ser não. Agora há também algo chamado junção direita e junção direita. A diferença é que, em vez de ter esta tabela tipo de manter toda a forma a base e manter os valores nulos. Por exemplo, vou ter esta mesa. E assim a junção direita e esquerda junção ou apenas uma questão de perspectiva, porque uma junção direita, o que uma junção direita é, é basicamente uma junção esquerda. Mas nós viramos a ordem da mesa assim. Então é isso que é uma união certa. E assim, você sabe, é mais fácil apenas ir com uma junção esquerda e apenas ter sua tabela ordem de acordo. E que você está sempre usando a primeira tabela como base para se juntar. Porque em uma junção à esquerda, se houver alguns valores aqui, por exemplo, na coluna da faixa. E se executarmos isso, podemos ver que não há instâncias em nossa linha de fatura onde temos um ID de caminhão que está presente na linha de fatura, que não está presente na tabela de controle. Não há instâncias. Então, se estamos fazendo uma junção à esquerda na linha da fatura, então este resultado aqui vai ser nulo. Mas se fizermos uma junção certa agora, usando nossa sintaxe atual que vamos obter o resultado que temos antes. Porque agora também estamos mantendo as informações da tabela de caminhão e haverá algumas faixas que são mantidos controle de uma tabela de caminhão antigo que não têm uma fatura correspondente na tabela de linha de fatura. Então podemos ver uma esquerda e uma direita se juntarem ou simplesmente, eles são basicamente a mesma coisa. É que a ordem em que estamos mencionando essas tabelas é diferente. Então você pode usar uma junção esquerda em vez de uma junção direita e apenas inverter a ordem das tabelas. E isso geralmente é uma maneira melhor de fazer isso só para ter certeza de que você tipo de manter uma maneira consistente de pensar. Mas é claro que você sempre tem a opção de fazer isso. Agora, há também outro tipo de união, que é se quisermos manter todas as informações de ambas as tabelas? E se tivermos alguns dados e nossa tabela de linha de fatura que não tem valores correspondentes na tabela de controle. E temos alguns dados na tabela de controle que não tem valores correspondentes na tabela de linha de fatura. E queremos ficar com tudo isso. E nos casos em que temos dados na tabela de linha de fatura, mas não na pista. Queremos que os valores do, para as colunas que vêm da tabela de controle para ser nulo. E nos casos em que temos informações sobre a faixa, mas não sobre a linha da fatura ou nenhum valor correspondente na linha da fatura. Queremos que os valores nas colunas que correspondem à linha da fatura sejam não e os valores para o caminhão ainda estejam lá para que tenhamos a interseção bem como as informações de cada fita. E então isso é chamado de uma junção completa, ou também é chamado de uma junção externa completa. Ali, a mesma coisa. Então, novamente, o grupo o que isso faz é que você está olhando para a interseção bem como todos os valores em ambas as tabelas que não têm valores correspondentes na outra. Considerando que com a junção esquerda, você está olhando para a interseção mais todos os nossos valores na primeira tabela que não aparecem na segunda tabela. Uma junção direita, você está olhando para a interseção mais todos os valores na segunda tabela que não aparecem na primeira tabela. Desculpe, sim, estes são os diferentes tipos de junções que estão disponíveis para nós. Lembre-se, eu sei, se você está aumentando ou juntando tamanhos basicamente indo do interior para a esquerda ou direita para uma junção externa completa. Você vai manter mais dados e você também manter os dados que podem não ser correspondidos na outra tabela. Mas isso também significa que suas tabelas resultantes serão maiores. Agora, geralmente quando estamos fazendo junções, os tamanhos de nossas tabelas só vão aumentar porque podemos ter, por exemplo, uma única instância na tabela de controle pode ter várias faturas correspondentes na tabela de luz de fatura. Então, se tivermos 100 faixas e cada faixa tiver três faturas, nossa mesa vai crescer porque precisamos manter o controle de cada uma dessas vozes internas também. Então pense nisso. Mesmo que você comece com uma pequena mesa, seus tamanhos de mesa podem crescer porque você está procurando por todas essas interseções. Então, novamente, você sabe, usá-lo com base em suas necessidades, mas não use apenas junções externas esquerda ou direita ou completa se você não estiver indo para usar os dados porque a tabela correspondente que vai ser grande. E é melhor olhar apenas para a interseção se você estiver realmente interessado apenas em todos os casos em que as colunas que vêm de cada tabela ou ambos NÃO nulos. Basicamente você quer ter certeza de que você tem todas as informações da tabela de controle que tem informações correspondentes na tabela de linha de fatura. Então, apenas focando na interseção e esses casos apenas certifique-se de usar apenas a junção para reduzir o tamanho da tabela, o que será mais eficiente. E isso também vai levar a um melhor desempenho. Mas outro no último, se você tiver instâncias em que você quer ter certeza de que você pode observar essa informação, mesmo que não haja valores correspondentes na outra tabela, você sempre tem a opção de usar o junções, bem como junções completas são junções externas completas como seu nome completo é chamado. 38. 36AutojoinsHB: Agora vimos que diferentes tipos de junções, interno esquerdo frito junções externas, onde podemos juntar as informações de uma tabela para a informação que temos em outra tabela. Mas, na verdade, não há nada sobre as declarações conjuntas que dizem que você não pode juntar uma mesa em si mesmo. Na verdade, podemos fazer isso. Podemos fazer uma auto-junção onde pegamos a informação de uma tabela e juntamos ela em si mesma. Então é isso que vamos olhar agora. E também vamos analisar como podemos usar, ou melhor, como podemos nos unir em várias condições. Desde antes, estávamos sempre combinando. Por exemplo, o ID do caminhão e a linha da fatura devem ser iguais ao ID do caminhão na tabela de caminhão. Mas também podemos usar várias condições como fizemos na filtragem, por exemplo. Então vamos dar uma olhada nisso. Vamos primeiro de tudo, basta selecionar tudo da nossa tabela de linha de fatura, dá-nos a abreviação IL. E então vamos nos juntar novamente na fatura, na tabela de linha de fatura. E vamos dar a isso uma abreviação ILA, apenas linha de fatura e depois um para condicional. E então vamos juntar-nos, antes de tudo, queremos juntar-nos onde a linha da fatura e o ID da fatura são os mesmos. Então, neste caso, eu quero procurar uma fatura e eu quero ver o que outras compras ou talvez feito nessa fatura. E então vamos ver o porquê exatamente. Faremos isso mais tarde neste vídeo. Então vamos nos juntar onde os IDs de fatura aqui são os mesmos. Então podemos ver que podemos ter diferentes IDs de linha de fatura, mas todos esses itens diferentes são parte neste caso da mesma fatura. Então, por exemplo, nesta fatura, a pessoa comprou duas faixas diferentes. E assim podemos ver que temos duas faixas diferentes representadas aqui. Então vamos juntar onde a linha da fatura, o da fatura é igual ao ID da fatura da nossa segunda tabela de linha da fatura aqui, ou a mesma tabela de linha da fatura. Mas vamos também adicionar outra condição aqui onde dizemos que queremos que o ID da pista aqui seja maior do que o ID do caminhão em nossa primeira tabela. Dessa forma, podemos nos certificar de que não temos um monte de partidas cruzadas, mas que temos pelo menos algum tipo de ordem. Novamente, veremos o aplicativo aqui em um segundo. Vou pegar a nossa identificação do camião da linha da fatura e queremos fazer isto. Queremos que o ID do caminhão do conto tradicional seja maior do que o ID do caminhão da tabela inicial. Agora, a ordem aqui não importa muito porque tudo é meio simétrico. Mas ajuda a visualizar isso na sua cabeça. O segundo é o tipo que você quer ver como a referência. E este aqui você pode pensar em nós, a base. E você pode ver aqui a simplicidade de adicionar em adicional condicional em nossas declarações de união é apenas colocando um fim aqui. Então nós estamos dizendo sobre esta condição, e então nós podemos apenas usar as mãos para acorrentar em condições adicionais. Nós também podemos usar uma guerra é se quisermos. Então, assim como vimos nos casos em que, o mesmo tipo de lógica se aplica se você quiser fazer lógica mais condicional aqui para como exatamente queremos juntar essas tabelas. Então, novamente, isso vai ser basicamente o mesmo que vimos no filtro em casos. Exceto agora aqui estamos fazendo isso na declaração que faz referência à declaração conjunta que temos acima. Então vamos colocar nosso ponto e vírgula aqui e vamos executar isso. Então, os resultados que obtemos a partir disso, podemos ver aqui que temos, temos todas as mesmas colunas, uma para cada tabela. Temos o ID da linha inversa das primeiras tabelas aqui e todos os outros valores correspondentes. E então temos as mesmas colunas da segunda tabela, a linha da fatura a, como chamamos. E novamente aqui do MOS no ID, o ID da fatura, o ID do caminhão e o preço unitário. Mas também podemos ver que aqui temos a identificação do caminhão da segunda tabela que juntamos neste quatro. E o ID do caminhão do primeiro é, acordo com nossa segunda condição aqui, a idéia do caminhão da segunda tabela tem que ser maior do que o ID do caminhão da primeira tabela. Então, por que iríamos querer fazer isso? Para que podemos usar isto? Bem, há certas alturas em que esta informação deve ser divulgada. Bem, por exemplo, digamos que queremos descobrir quais faixas são muitas vezes compradas juntas ou se alguém compra um caminhão, quais são o giz talvez também como alguns. O que podemos fazer é dar alguns desses nomes de tabela, um alias para que possamos referenciá-lo melhor. E também não precisamos de todos os dados aqui. Então, o que queríamos selecionar como queremos pegar o ID do caminhão de nossa tabela de linha de fatura. O primeiro aqui podemos chamar isso de pista base, talvez o tipo de faixa de linha de base que é comprado. E também queremos as informações de identificação do caminhão da segunda tabela. E este pode ser o caminhão adicional, e também precisamos da palavra-chave como aqui. Então, se olharmos para isto, agora, temos este camião, foi comprado e esta pista também foi comprada. Temos esta faixa foi comprada e este caminhão também foi comprado com ele. E este caminhão foi comprado e esta pista também foi comprada com ele. Então agora temos informações sobre. Uma faixa que foi Bob, bem como outra faixa que foi comprada com a mesma faixa. Então digamos que queremos descobrir quais trilhas são frequentemente compradas com a identificação de caminhão seis. Então, se formos para a mesa de controle aqui, apenas tipo de fazer essa pesquisa manualmente. Está bem. identificação do caminhão 6 corresponde a colocar o dedo em você, aquele caminhão. Então vamos dizer que queremos descobrir onde queremos saber se alguém compra esta faixa, quais são outras faixas que eles podem gostar? Ou apenas mais geralmente, quais são outras faixas que foram compradas no mesmo tipo de fatura porque se alguém compra este caminhão e eles também comprar outro caminhão, é provável que eles vão ser não como o outro faixas para. Então, se alguém quer comprar este caminhão, talvez como uma primeira coisa que podemos pensar é o que outros caminhões para pessoas que já compraram esta pista, que outros caminhões que eles também compram. Porque talvez alguém que compra este caminhão também possa estar interessado nas coisas que outras pessoas compraram. E assim podemos usar este resultado aqui para obter rapidamente essa informação usando um grupo por declaração. Porque podemos dizer, tudo bem, vamos agrupar pela nossa faixa de baixo. E nós também queremos agrupar por depois são faixa adicional. E agora também queremos usar uma agregação e queremos contar o número de ocorrências como. E podemos chamar isso de compras emparelhadas, talvez. E então vamos encomendar tudo pelas compras emparelhadas em ordem decrescente para apenas obter uma saída de mesa aqui de um caminhão que foi comprado. E quando outro caminhão foi comprado com ele, quantas vezes esses trilhos foram comprados juntos? Então vamos em frente e executar isso. E podemos ver aqui, por exemplo, quando o caminhão 1412 foi comprado do que eram duas vezes em que o caminhão 1424 também foi comprado com ele. E podemos ver, neste caso, o tipo de compras emparelhadas são, são muito baixas. Mas isso também é uma espécie de limitação de apenas quantas faixas temos disponíveis, bem como quantas faturas temos em nossos dados e como o número de faturas em nossa tabela de linhas de fatura aqui cresce. Isso significa que teremos mais compras, mais informações sobre compras e obteremos mais informações sobre faixas que geralmente são compradas juntas. E assim podemos esperar que esses números aqui também cresçam. Claro, nós também podemos classificar na outra ordem para ver, ok, bem, já que nosso valor máximo é dois, a única outra opção que temos é ter um valor de um. Mas você pode ver que a abordagem que podemos tomar com isso é que podemos juntar uma mesa em si mesmo. E geralmente queremos usar condições adicionais nos trabalhos. Agora não precisamos apenas usar condições adicionais em auto-junções. Nós também, é claro, temos a opção de usar condições adicionais quando estamos fazendo outros tipos de junções. É apenas quando estamos fazendo auto-junções, provavelmente queremos usar condições adicionais ou apenas fazer alguma filtragem extra. Porque se você estiver juntando todas as informações sobre a tabela em si mesmo, novamente, o tamanho da sua tabela vai crescer muito. Então, para ter certeza de que você está reduzindo isso e realmente apenas escolhendo as informações que você precisa. Você provavelmente quer colocar em condições adicionais a esta declaração aqui sobre a junção que está acontecendo acima. E assim, neste caso, por exemplo, fomos capazes de usar a auto-junção para obter rapidamente pelo menos algumas informações superficiais sobre, você sabe, se um caminhão foi comprado, quais outras faixas também foram compradas e Com que frequência essas faixas foram compradas juntas? 39. 37UnionsHB: Então vimos junções agora, mas também há outros casos em que podemos querer juntar informações sobre tabelas juntas, mas na verdade não queremos juntá-las horizontalmente, mas sim queremos empilhá-las verticalmente. E estes podem aparecer, por exemplo, se você tiver várias tabelas que tipo de manter o controle da mesma coisa, mas a informação é dividida em várias tabelas apenas para manter qualquer tabela individual de talvez crescer muito grande. Ou você tem tabelas diferentes, cada uma delas representando dados de um dia individual. E você deseja unir todas essas informações em uma tabela para que você possa realmente executar uma consulta na tabela completa. Então, como você pode fazer isso? Bem, vamos primeiro de tudo criar nossos dois subconjuntos de tabelas para que possamos juntá-los. E nós vamos usar a instrução criar tabela. E vamos chamar esta mesa de faixa de parte um. E nós vamos criar isso como o resultado da seguinte consulta. Vamos selecionar tudo a partir da mesa de pista, mas apenas onde a identificação do caminhão é menor ou igual a 2000. Vamos colocar um ponto-e-vírgula aqui para uma boa prática. E vamos em frente e executar isso e vamos dar uma olhada no nosso banco de dados agora. Então, entrando em nossos esquemas em uma tabela aqui. Então nós temos nossa mesa, aquele caminhão, um, que contém todas as informações do nosso tratável, mas apenas os dois primeiros mil caminhões. E, em seguida, vamos criar um segundo caminhão de mesa Parte 2, onde todas as informações e onde o caminhão ID MOOC da tabela de caminhão é maior do que 2000. Então estamos basicamente dividindo nossa mesa de pista aqui, que nos lembramos de mais cedo, contém cerca de 3.500 linhas em duas mesas menores, caminhão Parte 1 e caminhão estacionado também. Como podemos ver, se abrirmos este aqui, podemos ver que começamos a identificação do caminhão 2001. Então, como podemos juntar essas informações? Porque talvez queiramos usar o resultado de todos os nossos rastros porque precisamos dele para alguma coisa. Talvez, você sabe, se quisermos fazer uma junção em todos os nossos giz, nós primeiro precisamos ser capazes de juntar tabelas ou diferentes juntos para que nós realmente tenhamos todas as informações sobre todas as conversas que temos, em vez do que usar uma tabela menor que contém apenas um subconjunto de todos os dados que temos. Então, para fazer isso, nós podemos apenas, primeiro de tudo, apenas um esqueleto do escritor a declaração select aqui, nós vamos selecionar tudo. Vamos começar com o caminhão Parte um e aqui agora queremos adicionar as informações do caminhão Parte 2. Então, para fazer isso, vamos usar uma declaração do sindicato aqui. E, em seguida, vamos ter outra instrução select onde estamos novamente apenas indo para selecionar tudo a partir. Agora vamos dizer selecionar tudo a partir da faixa Parte 2. Então, se executarmos isso, agora estamos executando a coisa toda e colocando um ponto-e-vírgula aqui também para uma boa prática. Então vamos ter todas as nossas informações das duas faixas. Estamos selecionando tudo do caminhão Parte 1. Estamos selecionando tudo da parte 2 da pista. E esta declaração da união aqui significa que esta informação, ou que estes dois resultados serão unidos verticalmente empilhados. Então, em vez de ter o tipo de junções horizontais que vimos quando usamos as declarações conjuntas. E, em vez disso, o sindicato é, vamos usar os resultados daqui. E nós vamos apenas adicionar ao fundo também os resultados que temos a partir daqui. E assim, desta forma, podemos usar as declarações de união para, em seguida, juntar várias tabelas. E podemos até estender isso. Neste caso, só temos duas mesas, mas vamos fingir que temos outra mesa para podermos fazer outro sindicato. E vamos dizer que queremos selecionar tudo novamente a partir de Luke faixa parte 2. E podemos executar isso de novo. E podemos ver que ainda funciona. Então, se tivéssemos várias tabelas aqui, poderíamos apenas fazer várias declarações de união onde estamos selecionando as informações que queremos da tabela apropriada. E, em seguida, usando a declaração sindical aqui para tipo de colocá-lo em, em cima um do outro para que o resultado final, vai ser a tabela final que realmente queremos que contém todos os dados tipo de unidos. Então, novamente, nos casos em que em seus dados e talvez divididos em várias tabelas diferentes, você pode usar as declarações de união para unir essas informações de todas as tabelas juntas para que você tenha tudo em um só lugar para que quando você estiver executando sua consulta, você pode executá-la em todas as tabelas. São todos os dados das tabelas separadas unidas, empilhadas verticalmente umas sobre as outras. Em vez de ter que consultar cada subtabela individualmente e, em seguida, tentar juntar os resultados mais tarde. Agora, se quisermos nos livrar das duas mesas novamente, lembre-se de tudo o que temos que fazer, você só tem que dizer “mesa de largada”. E vamos largar o nosso camião Parte 1 e gerir isto. E então nós também vamos soltar nosso tronco parte dois e executar isso novamente agora tem um tipo de banco de dados limpo porque nós não precisamos dividir nossa tabela de rastreamento em duas faixas separadas. Por conseguinte, podemos utilizá-los ou utilizá-los para o exemplo da União. Mas também é bom limpar de volta contra isso. Não temos um monte de desordem em nosso banco de dados aqui. 40. Subqueries: Tudo bem. Nesta lição, abordaremos algo muito interessante que realmente oferece muita flexibilidade em termos das consultas que você escreve, pois permite basicamente agrupar resultados diferentes O que aprenderemos nesta lição é algo chamado subconsultas Agora, as ideias, e vamos, por exemplo, voltar para nossa tabela de linhas de fatura Agora podemos escrever uma consulta SQL em que, por exemplo, agrupamos pelo ID da fatura e, em seguida, podemos contar o número de Podemos obter um resultado que nos diz quantas compras foram feitas com cada fatura Vamos continuar e escrever essa consulta bem rápido. teremos nosso Primeiro, teremos nosso esqueleto de instrução SQL Vamos selecionar a partir da tabela de linhas da fatura e vamos limitar os resultados a cinco por enquanto até que tenhamos certeza de nossa consulta A partir daqui, selecionaremos o ID da fatura. Agora, também queremos executar uma agregação e só queremos contar o número de itens que temos no ID da fatura. Para fazer isso, também precisamos de um grupo por extrato e precisamos agrupar pelo ID da fatura Se executarmos isso, vamos dar a isso um alias como número de itens Se você estiver nisso, podemos ver aqui ID da fatura um, por exemplo, contém dois itens comprados O ID da fatura dois tem quatro itens. ID da fatura três tem seis itens e pode removê-lo e dar uma olhada Aqui podemos ver que nossos dados se parecem aqui. Obviamente, também podemos solicitá-lo, por exemplo, pelo número de pedidos, pelo número de itens, talvez em um pedido de envio. Podemos ver aqui todas essas faturas de compra de um item e, se avançarmos mais abaixo, agora temos as duas colunas de itens e assim por diante Temos esses resultados agora. Mas e se agora quisermos saber quantas faturas tiveram duas compras de itens Basicamente, executamos essa agregação e agora queremos usar o resultado dessa agregação ou talvez tenhamos executado outra consulta e queremos usar o resultado dessa consulta como nosso ponto de partida para a próxima O problema é que, nesse caso, não podemos realmente usar que há um erro de digitação aqui, a propósito, não podemos realmente usar essa coluna porque essa coluna só existe após a conclusão da consulta Nós realmente não podemos fazer mais nada com isso. Não podemos executar nenhuma agregação extra pelo número de itens porque a coluna em si ainda não existe Ela só existe depois de executarmos essa consulta. Então, como podemos usar os resultados disso e basicamente continuar? Porque às vezes as consultas ficam mais complicadas e você quer executar uma parte do processamento e, nesse resultado, continuar fazendo outra coisa Talvez você queira fazer algum processamento. No resultado, você deseja fazer então alguma agregação. Nesse resultado, você deseja fazer alguma agregação adicional, mas agora com base em um quadro de referência diferente, porque agora você tem colunas diferentes que talvez representem resultados agregados Agora, para fazer isso, podemos usar algo chamado subconsultas. O que é uma subconsulta é basicamente uma forma de dizermos: vamos usar o resultado de uma consulta em vez de uma tabela específica A aparência de uma subconsulta é que temos uma instrução select e, em seguida, temos uma declaração firme, exatamente como antes, mas em vez de ter uma tabela aqui, temos uma consulta Então, ao final disso, também precisamos adicionar um nome para uma subconsulta Por exemplo, podemos simplesmente chamar esse sub para subconsulta. Podemos reconhecer o mesmo formato. Temos uma instrução select e, em seguida, temos o F. Mas em vez de termos um nome de tabela aqui, temos uma consulta completa O que estamos selecionando aqui é o resultado de toda essa consulta aqui. Então, também estamos dando a isso um alias e, na verdade, temos que dar um alias às nossas subconsultas. Caso contrário, teremos problemas. Estamos dando a ele um alias, chamando-o de sub para que possamos referenciá-lo mais tarde Se executarmos isso, obteremos o mesmo resultado porque tudo o que estamos fazendo agora é apenas selecionar os resultados, selecionar todas as colunas do resultado das subconsultas Mas é claro que agora podemos fazer coisas extras. Agora, por exemplo, podemos acessar o número de itens. Também podemos acessar o ID da fatura porque ambos foram retornados de nossa consulta aqui, de nossa subconsulta Agora, vamos agrupar pelo número de itens e contar quantas faturas basicamente se enquadram em cada uma dessas categorias Então, agora vamos mostrar o número de itens e não precisamos fazer isso se tivermos apenas uma subconsulta, mas é uma boa prática fazer referência com a subconsulta da qual estamos tirando isso porque se tivermos várias subconsultas , podemos ter , podemos ter Assim como quando fazemos junções ou algo assim e precisamos referenciar ou preferimos referenciar a tabela apropriada para garantir que não haja confusão Da mesma forma, quando usamos subconsultas ou geral, quando temos aliases, por exemplo, também apenas para tabelas, é bom usar esses nomes para garantir estamos referenciando Estamos selecionando o número de linhas da nossa subconsulta. Agora, também queremos executar uma agregação novamente. Podemos apenas fazer a contagem um, aqui embaixo, agora vamos agrupar pelo número de itens. E vamos pedir aqui novamente. E aqui queremos fazer o pedido, e talvez devêssemos dar esses pregos primeiro. Isso aqui, podemos dizer, número de faturas. Agora vamos ordenar pelo número de faturas em um pedido de envio Realmente não faz sentido ter a declaração de ordem por aqui porque, nesse caso, não estamos usando o resultado da ordem por. Só para tornar as coisas mais eficientes, podemos simplesmente retirar o pedido por extrato , porque não o estamos usando de forma alguma e vamos alterar o pedido posteriormente. Podemos retirá-lo aqui porque não o estamos usando em alguns casos. Na verdade, você pode estar usando o pedido. Caso contrário, você pode mantê-lo na subconsulta. Mas, nesse caso, não estamos usando o pedido, então vamos retirá-lo. Também vou adicionar alguns recuos aqui apenas para mostrar que tudo isso faz parte da mesma subconsulta para facilitar a visualização Se executarmos isso agora, vamos continuar e rolar para cima, que possamos ver, temos 59 faturas em que havia nove itens comprados cada 59 faturas em que havia quatro itens comprados cada. Na verdade, temos muitos 59 casos provavelmente porque esse é o conjunto de dados da prática. Então, temos 117 faturas, onde havia dois itens comprados cada Agora podemos ver que podemos usar subconsultas para usar o resultado de uma consulta como ponto de partida para a próxima subconsultas são muito boas porque nos permitem superar esses Onde temos apenas alguns resultados e queremos continuar usando-os, mas não podemos acessar as colunas porque elas ainda não existem porque só são criadas após a execução da consulta. Portanto, você encontrará muitos casos em que desejará usar uma subconsulta para poder continuar usando os resultados da consulta anterior Agora, nesse caso, embora retornemos o ID da fatura em nossa declaração aqui, na verdade não o usamos aqui Só para manter as coisas limpas, podemos até mesmo removê-lo porque verdade não o estamos usando para nada. Nesse caso, podemos simplesmente remover o ID da fatura para manter nossa subconsulta limpa porque, novamente, não precisamos fazer uso dela, então não adianta devolvê-la porque ela não agregará muito valor Porque tudo o que estamos usando é o número de itens. E agora que temos o número de itens, que é o resultado de uma agregação, agora podemos usar essa coluna resultante e, por exemplo, executar uma agregação novamente nela, agora agrupando pelos valores dessa 41. 39WindowFuntions E 39WindowFunctionsAndAliasesHB: Agora já vimos que podemos fazer muito com SQL, mas há algumas coisas que ainda estão em Inserir. E uma dessas coisas, por exemplo, é levar as agregações um passo adiante. Porque atualmente, quando estamos executando agregações, nos concentramos principalmente em obter agregados os resultados em toda a tabela. Mas, às vezes, não queremos resultados agregados em toda a tabela, mas sim gostaríamos de manter todas as linhas e ainda assim ser capaz de ter resultados agregados intermediários ou resultados agregados que estão executando médias ou algo assim. Então vamos em frente e dar uma olhada em como podemos resolver alguns desses problemas. Então, primeiro de tudo, vamos apenas escrever nossa instrução SQL esqueleto aqui. E nós vamos usar a mesa de pista aqui. Então vamos em frente e selecione tudo da mesa do caminhão agora. E antes de tudo, basta limitar nossos resultados. Se fizermos isso, podemos ver aqui, tudo bem, exatamente o que esperamos. Então, e se, por exemplo, quisermos ver uma agregação em execução sobre os diferentes álbuns que temos aqui. E queremos saber qual é o tempo de execução para cada faixa que passa pelo álbum. Ou se quisermos manter as informações sobre as linhas, mas ainda temos acesso ao valor agregado. Como podemos fazer isso? Atualmente não podemos. Então vamos responder a segunda pergunta primeiro, que é queremos manter informações sobre todas as linhas, mas também queremos ter acesso ao valor agregado. Então o que vamos fazer é selecionar tudo para que possamos ter essa informação. Mas agora também queremos ser capazes de acessar essa soma em execução. Então, basicamente, o que queremos fazer é que nós queremos somar ao longo dos milissegundos aqui para que nós estamos mantendo o controle do tempo de cada música enquanto estamos passando pelo álbum. Então queremos somar sobre a tabela de milissegundos aqui, ou sobre a coluna de milissegundos em vez disso. Mas se fizermos isso, então teremos que usar um grupo por declaração. Mas há outra maneira que podemos realmente expandir sobre a declaração, ou seja, usando funções de janela. Então o que podemos fazer é ouvir direito sobre e, em seguida, espaço e abrir e fechar parênteses. E dentro da declaração, podemos então criar partições fazendo particionadas por. E vamos apenas terminar a declaração primeiro e depois tipo de voltar e olhar para ela. E vamos particionar pela ideia do álbum. Então, o que isso significa é que estamos selecionando todas as colunas ainda, e vamos fazer uma soma sobre a coluna de milissegundos, mas não estamos usando o grupo por instrução em vez disso, há outra opção que temos disponível que tem este Exageração aqui. E assim dentro deste exagero, podemos então criar partições, que é semelhante ao que faríamos no grupo BY cláusula. Mas aqui estamos apenas definindo como queremos dividir nossos dados. E ao invés de obter resultados agregados retornados para cada coluna e ter incluir aqueles como tipo a saída com base no que temos no grupo BY, nós ainda podemos pegar todas as nossas colunas e tipo de manter todos os nossos registros. Mas podemos ter uma coluna extra que ou tem uma agregação em execução também são apenas uma agregação baseada no grupo. Agora, a forma como esta agregação funciona depende do que cresce vai ser selecionado. Então, neste caso, se estamos usando a partição BY o que vai acontecer é que vamos dividir todos os nossos dados em diferentes partições com base em cada ID de álbum aqui. E para cada partição onde Lincoln a executar esta agregação, vamos executá-lo neste caso sobre cada partição. Então, se nos dermos apenas um pseudônimo, podemos chamar este álbum de duração, duração do álbum ou o que você quiser. E vamos apenas, vamos apenas executar isso e dar uma olhada na saída. E vamos também tirar ou limitar declaração aqui. Então, executando isso e, em seguida, descendo para a nossa saída aqui em baixo, movendo-se todo o caminho para a direita, nós temos aqui o comprimento do nosso álbum. E podemos ver se rolamos para baixo, isso vai diferir com base no ID do álbum que temos. Portanto, temos um comprimento de álbum exclusivo para cada ID de álbum. Mas a coisa interessante na maneira que isso difere do grupo por declaração é que ainda mantemos em todas as linhas individuais. Ainda temos todas as informações sobre as linhas individuais. Também temos acesso ao valor agregado. E podemos ver que eles diferem entre as diferentes partições aqui. Então nós temos nosso álbum ID um, e você pode ver, neste caso, todos esses valores são os mesmos. Temos aqui o nosso álbum ID 2. Só temos esse valor. Temos uma mente aberta E3 aqui novamente, os valores serão os mesmos e para quatro e assim por diante. Então agora temos o agregado, ou melhor, a soma sobre esta coluna de milissegundos para cada ID de álbum. Então dividindo tudo pelos diferentes IDs de álbuns e somando os milissegundos. Mas porque estamos usando esse exagero e estamos usando partições aqui em cima. Em vez de usar o grupo por declaração, agora temos acesso aos robôs individuais também. Então, é claro, isso é ótimo quando você também precisa ter acesso a esses outros dados. Mas outras vezes o grupo por declaração pode ser melhor porque você vai obter uma tabela muito menor e você vai principalmente estar recebendo os resultados que você precisa se você não precisa ter acesso aos outros dados aqui. Então, novamente, isso depende do seu caso de uso e do que exatamente você precisa desses resultados de agregação. Agora atualmente são agregados valor aqui é o mesmo em todas as colunas, mas mesmo que não precisa ficar assim. Agora, a maneira como essa agregação funciona, novamente, depende de como estamos dividindo nossos dados aqui. Se estamos apenas usando a instrução partição BY, então o que acontece é para cada partição, todas as linhas são incluídas. Mas nós também podemos adicionar outra cláusula aqui, ou seja, a ordem por. E esta é a mesma ordem que vimos antes, mas internamente para cada divisão que estamos fazendo, neste caso pelo ID do álbum, também podemos ordenar os resultados dentro de cada divisão. E vamos ordenar, por exemplo, pela coluna de nome. E então o que acontece neste caso se executá-lo, nós realmente vamos obter valores diferentes aqui, mesmo dentro do mesmo ID de álbum. E então o que você pode ver daqui, nós estamos realmente obtendo um total de execução. Então, neste caso, estamos recebendo um total de até esta música. Isto é quanto tempo, ambas as músicas, e então aqui em cima são todos os três sons juntos. Aqui estão as quatro músicas. E quando chegarmos a um novo álbum, o contador será reiniciado. E a razão pela qual isso é diferente é porque quando estamos usando a cláusula ordem por em vez de todas as linhas para cada partição sendo consideradas juntas, consideramos apenas as linhas que vão até e incluindo o valor pelo qual estamos ordenando. Agora, se houver duplicatas, todas essas duplicatas serão consideradas. Então, se tivermos, por exemplo, o nome da segunda aqui e a terceira canção sendo a mesma. Então o valor agregado que vamos obter aqui vai ser o mesmo entre os dois porque estamos ordenando por e há uma duplicata no nome, então vai ser o mesmo. E também vai ser igual aos três primeiros basicamente porque o primeiro não será único no segundo ou terceiro seria uma duplicata. E então o valor que temos aqui seria o único para todos os três. Então apenas algumas coisas para observar sobre como esse comportamento ou como isso se comporta. Então, sim, como podemos ver agora, podemos ter uma maneira diferente de abordar a agregação. E um deles é o GroupBy e o outro está usando esse exagero. E então podemos particionar por colunas diferentes aqui. E se estamos usando apenas a partição BY, então os valores agregados que vamos obter serão basicamente dentro de cada partição. Mas se nós, se adicionarmos uma ordem por cláusula dois, então nossa agregação não será mais uma dentro de cada partição, mas sim uma agregação em execução baseada na ordem que definimos aqui. Agora, e se quisermos fazer algumas agregações adicionais? Então, por exemplo, temos a soma, mas talvez também queiramos fazer como uma contagem de execução porque é uma agregação adicional e que podemos fazer. Por isso, também podemos fazer, por exemplo, apenas para contabilizar um aqui. E talvez também queiramos apenas manter o controle do comprimento médio da música dois. Então também queremos fazer uma média da coluna de milissegundos, talvez. Então aqui temos a contagem de músicas do nosso álbum, e aqui temos a duração média do álbum. Então, se formos em frente e executarmos isso novamente, e agora podemos rolar um pouco mais e olhar para os resultados. Então, novamente aqui para cada um desses, vamos ter uma agregação em execução porque estamos usando a cláusula ordem por. Aqui. Nós vamos ter um total de execução, ou você está executando alguns dos milissegundos. Aqui vamos ter uma contagem corrente. E aqui vamos ter uma média corrente em todos os milissegundos. Então, neste caso, podemos ver que só consideramos um valor, é por isso que temos aqui. Neste caso, vai ser a média dos dois primeiros, que é este resultado aqui. Aqui vai ser a média dos três primeiros e assim por diante. Então você pode ver que podemos usar as diferentes funções de agregação e ainda usá-las sobre essas janelas diferentes. Mas, neste caso, não é ideal repetir sempre as declarações aqui. Idealmente, poderíamos ter uma abreviação para isso, de modo que não estamos apenas repetindo isso porque torna mais difícil de ler. Mas também se você quer mudar algo você tem que passar e você tem que mudá-lo e todos os lugares. E nós também podemos criar aliases para essas janelas aqui. Então, para fazer isso, vamos descer aqui e vamos definir janela. Então vamos dar-lhe um apelido ou vamos apenas dar-lhe um nome para que possamos ouvir dizer álbum, nome, dividir, por exemplo. E então vamos usar a declaração. E então podemos tomar a definição desta janela aqui. E vamos colocá-lo aqui em baixo. E então, em vez disso, podemos usar este alias que agora criamos para esta janela aqui em vez disso. E assim com o uso disso, nós vamos fazer referência a isso. E então podemos colocá-lo aqui também. E também podemos colocá-lo aqui. Agora, novamente, isso tem a vantagem de que, por um lado, isso se torna mais fácil de ler. Mas, por outro lado, isso também é muito mais limpo para escrever porque se quisermos fazer uma mudança em nossa janela aqui, então podemos apenas fazer a mudança de um e ela é propagada para todos os diferentes. Agregação é que estamos fazendo aqui são todos os usos diferentes. Enquanto que se copiarmos colar tudo que cada vez que fazemos uma mudança, temos que fazer essa mudança e cada coluna diferente, que é claro que não é tão bom. Então vamos executar isso e podemos ver que obviamente vamos obter os mesmos resultados porque nada mais mudou. Acabamos de introduzir um pseudónimo. Mas agora se fizermos outra coisa, por exemplo, vamos tentar particionar por ID de álbum, mas também particionar talvez pelo ID de gênero como uma segunda camada de partição. Agora é muito provável que cada álbum tenha o mesmo ID de gênero. Mas talvez haja alguns casos em que um álbum tem faixas diferentes que têm gêneros diferentes. É possível. Não é muito provável em muitos casos, mas é possível. Então, naqueles casos em que há mais de um gênero, então nós vamos ter uma divisão acontecendo lá. E se há apenas um gênero dentro, então mesmo que estejamos dividindo pelo ID do gênero, porque há apenas um gênero ou resultados, não vamos mudar. Então, assim como temos no grupo por declaração, nós também podemos adicionar mais aqui. Então não é apenas, não tem que ser apenas uma coluna que estamos particionando cinco, nós poderíamos realmente particionados por vários. O importante a ter em mente com isso é que primeiro fazemos essa partição, então fazemos essa partição. E se tivermos mais do que, faríamos isso depois. Assim, o ID de gênero só seria dividido dentro de cada grupo de ID de álbum. Então, é só uma coisa importante a ter em mente. Mas agora podemos reexecutar isso e você pode ver que, como não estamos usando um alias, todas essas alterações são aplicadas automaticamente a todas as maneiras em que usamos o alias. Considerando que se usássemos apenas o valor copiado colado, teríamos que fazer essa mudança três vezes, o que, por um lado, é irritante. Mas, por outro lado, você também pode esquecer de fazer a mudança em algum lugar. E então seus resultados estarão errados, principalmente porque você não aplicou a mudança em todos os lugares e são principalmente porque você não aplicou erros comuns que acontecem. Dessa forma, você pode acelerar as coisas, tornar as coisas mais fáceis de ler e se preocupar menos em ter esses tipos de erros. Agora, em termos de onde essa definição iria em nosso formato SQL completo. Então isso vai acontecer se tivermos uma declaração onde e vamos ter a janela depois, mas também vai acontecer antes da ordem BY, então vamos dizer que queremos dizer qualquer coisa e não vamos fazer nenhuma outra filtragem. Vamos apenas dizer que estamos rastreando ID é maior ou igual a um. E então aqui em baixo nós vamos ter o nosso OrderBy. E vamos apenas encomendar tudo pelo ID do álbum, o que provavelmente já é. Mas podemos ir em frente e fazer de novo e apenas dizer uma ordem ascendente aqui. E é aqui que a definição de apelido da janela precisa ir. Pegamos isso e movemos para cá e executamos isso. Então podemos ver aqui que vamos obter um erro de sintaxe porque novamente, precisamos ter as coisas em uma ordem específica e por isso não pertence lá. Por isso, temos de o levar de volta aqui. E então, se rodarmos de novo, tudo ficará bem. Agora, podemos ver que usamos o ascendente aqui. Claro, se estamos usando a cláusula ordem por e aqui estão a mesma coisa ainda se aplica. Também podemos definir um domingo aqui, ou também podemos usar o decrescente. E assim como nós poderíamos adicionar várias coisas aqui na partição, nós também podemos adicionar várias coisas aqui no OrderBy para potencialmente resolver laços. Assim, por exemplo, podemos primeiro ordenar pelo nome e então talvez queiramos ordenar por outra coisa, por exemplo, os bytes. E assim, nesses casos, e novamente, aqui nós não vamos estar fazendo nome ascendente e branco descendente desde que precisamos fornecer o formulário de pedido para cada coluna que estamos usando. Caso contrário, ele vai ser apenas assumido ascendente. Assim, podemos ver que temos muita flexibilidade com isso também. Mas agora se houver um empate na coluna de nome, vez de ser usado na agregação para como basicamente um valor duplicado. Em vez de Skinner olhar para a segunda ordem que vai estar na coluna bytes e só terá uma contagem duplicada e a agregação em algum lugar se o nome e os bytes são ambos os mesmos. Caso contrário, teremos ordens apropriadas acontecendo. Então podemos ver, podemos executar isso de novo e de novo. Podemos ver nossos resultados aqui. E a tabela abaixo. 42. 40RowNumberAndRanksHB: Agora acabamos de ver como podemos usar funções de janela para fazer agregações em partes individuais de partições que definimos. Mas com 10 funções, não só podemos fazer agregações, mas podemos fazer outras coisas, como contar números de linha. E isso também pode ser realmente útil. Então vamos dar uma olhada em como fazer isso agora. E para isso, vamos usar a tabela de linha de fatura. E o que vamos fazer é fazer um “Eu sou boba “, meio que dividir e dividir tudo pelo preço unitário, ou melhor, dividir tudo pelo preço unitário para que nós vamos obter alguns valores duplicados. E então podemos ver como essas coisas diferentes afetam tudo isso. Vamos em frente e escrever são apenas selecionar esqueleto. Nós vamos escrever selecionar tudo a partir da tabela de linha de fatura, apenas colocando um ponto-e-vírgula aqui. Tudo bem, então nós vamos selecionar tudo e agora nós vamos ter nossas funções de janela aqui. Então a primeira coisa que podemos ver é o número da linha. Então, apenas acompanhando, você sabe, o número da linha que estavam em cada partição. Então, para fazer isso, em vez de colocar uma função de agregação aqui, podemos colocar na função de número de linha, que não leva uma entrada. E então vamos ter o nosso formato de função de janela padrão que também vimos antes, onde fazemos um over. E agora aqui nós definimos o que queremos particionar BY. Então vamos dividir pelo preço unitário. E vamos também fazer algumas encomendas. Vamos pedir pela identificação do caminhão. E isso aqui podemos apenas colocar como o número da linha. Agora, para isso, definitivamente vamos obter alguns valores duplicados porque é claro, provavelmente haverá algumas compras de TI de rastreamento duplicado. Então podemos ver que estamos agrupando ou melhor, estamos particionando pelo preço unitário aqui e aqui. Pedido de pássaro pelo ID do caminhão dentro de cada partição. Neste caso, é provável que tudo tenha um preço unitário de US $0,99. E então nós temos apenas uma partição grande que tem esta ordem. E neste caso, podemos ver apenas olhando para os números de linha, ainda temos número de linha incremental é mesmo que temos valores duplicados aqui. Agora, se definimos ainda estão ordenando por não apenas ID de caminhão, mas também por ID de fatura, então nossos resultados aqui não vão realmente mudar apenas porque não muito mais mudou. Então, ainda podemos manter o controle de indivíduo surgiu aqui, e ainda podemos fazer mais pedidos. Mas também há maneiras diferentes de contar números de linha. Então, neste caso, estamos dando um número de linha para cada linha que temos , independentemente de haver um valor duplicado ou não. Vamos levar esta ordem por aqui de novo. Mas às vezes não queremos isso. Às vezes queremos que valores duplicados tenham o mesmo número de linha. E para fazer isso, podemos usar uma função aqui chamada rank. Novamente, ele não leva nenhuma entrada. E apenas para cada, dentro de cada partição, vamos então dar uma classificação para cada ordem por indústria que temos um pouco por cada entrada que temos. Mas a classificação é diferente em que os valores duplicados, como podemos ver aqui, são atribuídos o mesmo número de linha. Provavelmente é melhor atualizarmos isso para a classificação. Mas a classificação é novamente apenas uma forma de número de linha. Mas para valores duplicados, eles terão a mesma classificação. Então você pode ver aqui isso é 1, 2, e isso seria três, mas é uma duplicata porque quando estamos solicitando pelo ID do caminhão, esses são os mesmos valores. Portanto, dentro desta partição de um preço unitário de 0,99, os valores de ID de caminhão aqui são as duas linhas aqui são duplicadas porque novamente, eles têm o mesmo ID de caminhão. Então, neste caso, eles são do mesmo posto. E podemos ver uma vez que seguimos em frente, então vamos para 45678 e assim por diante até chegarmos a outra duplicata. E então eles vão ter o mesmo posto. Mas então continuamos contando e basicamente apenas mantendo o controle do número de duplicatas aqui e, em seguida, continuar contando onde teríamos se estivéssemos usando os números de linha em vez disso. Agora isso pode ser muito bom porque às vezes você não quer atribuir números de linha são números de linha diferentes quando há instâncias duplicadas. E assim a classificação também pode ser uma coisa muito útil para usar. Mas há também outros casos em que você não quer estar pulando números e você não tem tanto interesse em número de linha absoluta em vez da ordem completa que as coisas entram e você só quer ter tipo de consistente ordenação consecutiva. E o que você faz você pode usar para isso é algo chamado uma classificação densa ou a função de classificação densa. E então, se executarmos isso, a mudança que temos é em vez de neste caso, por exemplo, ter um quatro porque temos dois dois aqui, vamos continuar contando com o próximo número consecutivo. Então já não importa quantas duplicatas temos. Nós não vamos basicamente pular tantos números, mas sim vamos continuar contando a partir do próximo número. Agora, novamente, isso é específico para cada partição que temos. Neste caso, usar o preço unitário nos permitiu criar uma partição onde podemos ter certeza de que existem algumas duplicatas para os IDs de caminhão aqui. Mas é claro, se você tem, você sabe, várias partições do que seu posto, ou neste caso, ele vai realmente ser o posto denso ou também os números de linha. Eles serão específicos para cada partição. Eles não vão passar por cima da mesa toda. Eles serão específicos para cada partição. Então isso é apenas uma coisa importante a ter em mente, que sua classificação, sua classificação densa, ou mesmo seu número de linha vão ser redefinidos e eles só vão ser definidos dentro de cada partição é dividido que você tem aqui. Agora, se você quiser encontrá-lo sobre o banco de dados, o que você pode fazer é em vez de partição dividir por qualquer coisa, e talvez você nem tenha uma coluna que tipo de tem o mesmo valor em todos os lugares. Você pode apenas tirar esta declaração de partição longe e apenas deixar a ordem BY declaração. E, dessa forma, nossa função de janela ainda será executada, mas agora não estamos particionando por mais nada. E assim, dessa forma, passamos de ter a classificação ou a classificação densa ou o número de linha específico para cada partição. Mas, em vez disso, temos para todo o conjunto porque agora não estamos mais criando uma partição. 43. 41Usandode 41UsingOtherRowsWithWindowFunctionsHB instruçõesde 4: Tudo bem, então demos uma olhada nas funções da janela e vimos algumas coisas legais que poderíamos fazer com ele fazendo especificamente agregações em execução são agregações baseadas nas partições sem sacrificar qualquer dos informações que temos nas linhas individuais. Agora, em algum momento, porém, é provável que você provavelmente queira acessar informações de outras linhas. Por exemplo, talvez você queira saber sobre duas compras consecutivas ou 11 compras aconteceu quando a próxima compra vai acontecer ou, ou algo assim. Atualmente, a forma como estamos usando dados é que cada linha é tratada individualmente. E agora não há como acessar informações de outras estradas. Então vamos dar uma olhada nisso agora. E vamos usar a tabela de faturas para isso. E vamos apenas ir em frente e escrever nossas instruções de esqueleto SQL. Nós vamos dizer selecionar tudo da tabela de fatura. E vamos apenas ir em frente e limitar nossos resultados a cinco por enquanto. Vá em frente e execute isso. Então este vai ser o nosso resultado aqui. E agora vamos tentar criar uma linha ou linha modificador para que com cada linha que temos, temos a coluna de data da fatura e também temos algo chamado o próximo estado, que agora vai ser apenas a voz da data da próxima fatura, independentemente de ser do mesmo cliente ou algo assim. Vamos apenas ter uma nova coluna que nos dá a data da próxima fatura. Então, como podemos fazer isso? Bem, a maneira que podemos fazer isso é novamente, usando nossas funções de janela. Mas o que vamos fazer aqui é usar algo chamado Read. Agora, o que fazemos com chumbo como colocamos em dois parâmetros, o primeiro vai ser uma coluna que queremos a próxima informação. Então, neste caso, queremos usar a data da fatura. E no outro parâmetro que temos é o quão longe queremos ir? Então, por exemplo, queremos pegar o valor da próxima linha. Então vamos usar o lead na data da fatura e vamos avançar. Então, por exemplo, para nesta linha atual e o que o lead vai fazer é que ele vai nos permitir acessar o valor de uma linha mais adiante na data da fatura. Se fizermos dois, se fôssemos esta linha, estaríamos olhando para linhas mais adiante. Então é assim que podemos definir isso aqui. Quantas filas queremos ir na frente? Então vamos ficar com um. Agora, para completar isso, também precisamos definir novamente a partição que queremos passar especificamente usando as funções de janela. Mas como também vimos anteriormente, não precisamos definir a partição se não quisermos. Então, se você só quiser usar a mesa completa, o que nós vamos fazer por agora. Nós estamos indo apenas para usar a cláusula ordem BY e vamos apenas encomendar por data da fatura. Então tudo vai ser encomendado pela data da fatura. E para cada linha vamos ter apenas a próxima data da fatura. E vamos em frente e dar esse alias de coluna, chamando a próxima data da fatura. E se formos em frente e executarmos isso, e vamos dar uma olhada. Nossa saída. Aqui temos a próxima data da fatura, e aqui temos a data da fatura atual. E podemos ver que esse valor é apenas igual ao que temos para esse valor aqui. Então você pode ver que estamos sempre pegando o próximo valor da coluna de data da fatura e tê-lo em nossa linha atual. Agora, é claro que também podemos fazer mais com isso. Podemos fazer um pouco da aritmética. Então também aprendemos sobre antes. Por exemplo, se queremos obter a diferença de horário para a próxima fatura, então vamos apenas pegar nossa declaração aqui, e vamos apenas copiar tudo isso. Coloque-o aqui e atualize o alias da coluna para dizer hora para a próxima fatura. E o que vamos fazer é pegar a data da fatura e vamos dar uma olhada nisso. Vamos usar esta função principal aqui para obter o próximo valor. E a partir dele, podemos subtrair a data atual da fatura. Então, se formos em frente e executarmos isso e conseguirmos uma coluna extra aqui. E agora podemos ver, ok, qual é a diferença de horário para a próxima data da fatura? Então, neste caso, temos uma diferença de tempo de um dia, que também podemos ver aqui. E vamos apenas selecionar a coluna de data da fatura aqui para que possamos comparar tudo lado a lado. Então rodando isso de novo. Então aqui temos a data da fatura atual, a próxima data da fatura, que vem do uso dessa função lead na coluna de data da fatura. Então, estamos tomando o próximo valor, uma vez que é o da coluna de data da fatura que está aqui. Podemos ver que aqui as diferenças de tempo um dia entre este valor e este valor. Aqui novamente, a diferença de tempo é um dia entre este e este. Aqui a diferença de tempo é de três dias entre este e este. E assim podemos ver, estamos apenas usando o valor da próxima linha. E, claro, podemos continuar a usar a nossa aritmética aqui. É importante observar a ordem em que estamos usando a aritmética em que estamos fazendo isso depois que definimos nossa janela aqui. Porque quando estamos usando funções de janela, como o chumbo aqui, por exemplo, precisamos ter certeza de que o ovário. E palavra-chave vem depois. Então temos que ter tudo isso como uma declaração de grupo. E então, depois, podemos fazer, por exemplo, o menos como temos aqui. Agora, novamente, não precisamos apenas selecionar a partir da próxima coluna. Nós também podemos ir, ou melhor, a partir da próxima linha, nós também podemos ir para linhas para a frente ou apenas mudar isso para ser um dois. E se formos em frente e executarmos isso, vocês podem ver aqui agora que estamos basicamente pulando dois chapéu rho. Então este valor aqui é para esta linha, duas linhas mais adiante. Então podemos ver este vem aqui, este 12 filas mais adiante, este que vai aqui. Então você pode ver que não se limita apenas a uma linha. Podemos definir o salto que queremos dar. Agora, e se quisermos ir para trás? E se em vez de olhar para a próxima fila ou para o próximo profissional depois disso ou depois disso ou, você sabe, qualquer outra coisa. E se quisermos ir para trás em vez disso, queremos olhar para a linha anterior. Então o que podemos fazer aqui é em vez de usar o lead, a função que queremos usar aqui é chamada de lag. E aqui podemos então atualizar nosso nome e dizer equipe de fatura anterior. E podemos fazer a mesma coisa aqui usando o LOG em vez do lead. E vamos ter o mesmo. Vamos fazer apenas a linha anterior em vez de duas linhas anteriores. E nós vamos ter a mesma coisa, exceto que neste caso, nós temos, nós estamos olhando para a cabeça da linha em vez da próxima fila. Aqui. Também precisamos atualizar este tempo desde a fatura anterior. Agora vai haver algo interessante aqui e não consideramos onde não encontramos o outro caso que eu vim da liderança, mas veremos quando executarmos isso, o primeiro valor aqui será nulo. E isso porque não há nada antes da primeira fila. E a mesma coisa acontece com a liderança quando chegamos à fila final. Ou se você tem aqui talvez dois ou três. Se alcançarmos a segunda perda para o terceiro último ou qualquer número que temos aqui, linha e cada linha depois disso, vamos ter valores nulos nessas colunas. Só porque esses valores não existem, certo? Não há, é se esta é a nossa primeira linha, não há nenhuma linha anterior para a primeira linha, então esses valores serão nulos. Da mesma forma, quando chegamos à nossa linha final, não há fila após a fila final. E então esses valores precisam ser nulos. Então isso é apenas algo que meio que vem da TI e algo para estar ciente. Mas novamente, aqui podemos usar a função de bloqueio junto com esta janela que definimos aqui para obter acesso a valores nas linhas anteriores. E, claro, não precisamos apenas usar a data da fatura. Podemos usar qualquer outra coluna em 1D. Podemos apenas definir qual coluna queremos acessar o valor anterior de. Quantas linhas queremos ir para trás ou para frente dependendo se você estiver usando o lag ou o lead. E então também a janela que queremos usar. E este caso porque não definimos uma partição, estamos apenas usando todo o conjunto de dados, mas também podemos fazer isso em uma base de partição. Assim, por exemplo, poderíamos tentar particionar por ID do cliente. Então você pode configurar isso. Podemos dizer partição BY, e então vamos usar o ID do cliente. E então podemos fazer a mesma coisa aqui. E neste ponto, porque já estamos usando dois e tivemos que fazer a cópia colando e provavelmente bom para definir um alias. Vamos dizer rapidamente janela aqui e vamos definir nossa janela ou provavelmente não usar para fora. Então vamos dizer “w “como e colocar isso aqui. E, em vez disso, passar por W, onde não temos que lidar com esses problemas de copiar e colar. Então vamos em frente e executar isso mais uma vez. Então você pode ver que nós acabamos de criar um alias que nós aprendemos mais cedo. Então vamos voltar para a fila anterior. Mas, neste caso, criamos uma partição por ID do cliente. Então, vamos em frente e olhar para o nosso ID de cliente. E também podemos ver essa informação para você. Vá em frente e execute isso, ok, então aqui temos todas as faturas para o ID do cliente um. E também é mudar a ordem das colunas aqui apenas para ter coisas mais fáceis de comparar. Então, primeiro traje idéias, a primeira coluna que podemos sempre inverter estado, bem como a data da fatura anterior e o tempo desde então. Então você tem o ID do cliente um, suas compras e basicamente todos os pontos aqui, o tempo para a compra anterior e qual era a diferença de tempo para isso. E se removermos nossa declaração de limite , podemos, naturalmente, obter a informação. E também para as outras partições de clientes que tampam. Você pode ver em algum momento dependendo, você sabe, quantos clientes ou quantas compras um cliente tem. Às vezes, um cliente tem apenas uma compra, então todos eles nós veríamos, por exemplo, seria apenas um nulo. Nesse caso, todos esses clientes têm várias compras. Mas, claro, se estamos criando partições, não é improvável que algumas de nossas partições possam conter apenas um valor de uma. Mas o importante aqui também é que quando estamos usando as partições, novamente, por causa da maneira como as funções da janela funcionam, estamos calculando isso em todas as janelas. E assim podemos ver que, mesmo que aqui haja provavelmente uma data que aconteceu antes disso, porque isso é específico para o grupo de identificação de cliente oito. Não temos valores aqui, uma vez que esta foi a data da primeira compra do ID do cliente oito. Então, novamente, tipo do mesmo princípio com partição que também vimos na agregação quando aprendemos sobre funções de janela primeiro, que aqui nossa função de janela, ou melhor, a função que estamos aplicando sobre esta janela, novamente será específico para cada partição. E também vai ser limitado pela declaração que temos aqui. 44. 42NTilesHB: Agora, em alguns casos, podemos querer dividir nossos dados em diferentes buckets e igualmente, ou melhor, ter dados em buckets de tamanhos iguais. Então isso talvez possamos fazer algum tipo de análise de bloco ou bucket ou qualquer outro aplicativo para o qual estamos tentando usá-lo. Então, como poderíamos ser capazes de usar SQL para talvez já crie alguns buckets para nós que podemos usar ou melhor colocar números para cada uma de nossas linhas e basicamente dividi-los em buckets. Então, novamente, podemos fazer isso usando funções de janela, e vamos novamente usar a tabela de fatura aqui e uma escrita nossa instrução SQL esqueleto, apenas selecionando tudo a partir da coluna de fatura. E basta ir em frente e limitar os resultados a cinco no início. Vá em frente e execute isso apenas para que já tenhamos um resultado. Certo, então vamos dividir nosso balde e dois grupos de tamanho igual. Então, novamente, vamos usar uma função de janela aqui. O que vamos fazer é que a função é chamada n-type, que nos permite definir quantos baldes de tamanho igual queremos dividir nossos dados em R queremos atribuir nossos dados. Então, por exemplo, se dissermos e cinco, isso significa que vamos colocá-lo em cinco baldes iguais ou tão iguais quanto possível. Então vamos dar uma olhada nessa saída e vamos realmente fazer isso. Na verdade, ele vai fazer a janela, por partição sobre ID do cliente para se certificar de que podemos realmente ver as diferenças. Então, já que estamos usando uma função de janela aqui, vamos ter que ir usar a palavra-chave. Agora vamos particionar pelo ID do cliente. E vamos também, mais uma vez, encomendar por data. E vamos ter uma data de fatura. E vamos dar um pseudônimo ou dizemos número do balde. E vamos também tirar a nossa declaração de limite aqui. E, uh, vá em frente e execute isso. Tudo bem, então rolando todo o caminho para a direita onde nossa última coluna vai estar. Temos aqui o número do balde. E vamos pegar um número reduzido de colunas aqui, já que não vamos usá-las de qualquer maneira. Então vamos pegar o ID do cliente, vamos pegar a data da fatura porque é por isso que estamos particionando , bem como o que estamos solicitando e executar isso mais uma vez. Então temos a identificação de cliente um aqui. E podemos ver que nossas compras aqui foram basicamente divididas em baldes tão iguais quanto possível. Não somos capazes de entrar em tudo. Mas podemos ver aqui o primeiro ano que eu fui agrupado no balde 1, segundo 2, ou número 3, e 4 de balde congruente para o próximo 1345. Então, tentando obter o mais igual possível, mas não há distribuição perfeitamente equilíbrio. Então podemos chegar aqui. E, em seguida, indo para o próximo bucket para ID do cliente 2. Mais uma vez, temos os separadores nos diferentes baldes. E neste caso nós realmente temos o mesmo número de compras para cliente com id1 e cliente com id2. Então, neste caso, só porque estamos usando um conjunto de dados de prática, parece que todos os clientes realmente têm um número muito igual de compras. Então, todas as distribuições de bucket que estamos recebendo aqui, você será o mesmo entre os diferentes IDs de clientes. Novamente, só porque cada cliente realmente tem um número muito semelhante de compras, se não idêntico número de compras. Mas nós podemos novamente apenas brincar com nossos tamanhos de balde aqui. Por exemplo, se usarmos sete, que é o número de compras que cada cliente aqui realmente tem. Podemos ver que nossos baldes aqui vamos ser agora iguais a um e cada um para usar três. Vamos esperar três dos primeiros 12 dos outros. Então, podemos usar o bloco n aqui para definir quantos baldes de, idealmente são aproximadamente igual tamanho que queremos dividir nossos dados. E ele vai apenas colocá-los dentro E novamente com o primeiro tipo de obter o maior número de valores que a criança não pode preencher. A parte inferior é que eles terão um a menos. Mas tentando dividir nossos dados em dois baldes iguais com base na partição que definimos aqui, e também com base na ordem que também definimos dentro de nossa janela aqui. 45. 43de 43UnderstandingQueryPerformanceHB: Agora, se você está realmente entrando em SQL, talvez seja alguns pontos. Você também deseja entender mais sobre como suas consultas são planejadas ou estruturadas ou qual a abordagem é adotada para execução e talvez alguma outra otimização de etapas que você pode fazer. Então, para fazer isso, vamos executar uma pequena consulta de exemplo na tabela de controle. E vamos apenas executar uma agregação para contar o número de faixas em cada álbum. Então vamos executar a seleção e vamos selecionar o ID do álbum. E o que também queremos fazer é contar um como caminhões de madeira. E vamos apenas ter este capital apenas para tornar mais fácil de ler a partir da tabela de controle. E então ainda precisamos agrupar pelo ID do álbum. Então, novamente, estamos selecionando a partir da mesa do caminhão e estamos agrupando pelo ID do álbum e estamos apenas contando o número de caminhões que cada álbum tem. Então, se formos em frente e executarmos isto, estes são os resultados que vamos conseguir. Este é o ID do álbum e este é o número de faixas que ele tem. Mas agora, se quisermos entender seu desempenho, vai ser um pouco difícil. Então SQL realmente tem uma declaração disponível para nós chamada Explicar. E se fizermos isso, podemos dar uma olhada. Ele, em vez de nos dar a saída como ele é, em vez de nos dar o plano da consulta. Agora eu não vou entrar em realmente nenhum detalhe, mas o plano de consulta, porque o plano de consulta em si é, pode tornar-se bastante complexo. E se você realmente quiser trabalhar nessas otimizações, então você provavelmente terá que fazer alguma pesquisa extra especificamente para entender como a agregação diferente funciona, mas também sobre como seu banco de dados que você está usando é configurado porque diferentes bancos de dados realmente executam. Agregações também são apenas consultas em geral de forma diferente. Porque quando estamos escrevendo consultas, estamos apenas dizendo ao banco de dados o que queremos fazer. E o próprio banco de dados realmente executa e encontra a maneira mais ideal de obter esses valores. E então isso pode diferir de banco de dados para banco baseado em apenas como o banco de dados funciona e como ele respira e direitos e como ele planeja e como é como os valores são indexados e todas essas coisas. Então, novamente, isso é meio que vai estar se aprofundando em como o próprio banco de dados como configurado. É por isso que não vamos mergulhar nele. Mas, no entanto, é importante saber que esta opção está disponível para você. E assim você pode usar a instrução de explicação para obter uma compreensão sobre o plano, que o plano de consulta, como o banco de dados planeja executar a consulta para obter os resultados que você está procurando. E então você também pode entender, você sabe, quantas linhas estão sendo processadas ou quantas colunas estão sendo usadas e em cada componente. Ou você também pode fazer algo como Explicar, Analisar, que também indicam o tempo de cálculo, o tempo de execução em vez de quanto tempo a execução realmente levou. Para que você possa aprofundar compreensão de cada um desses componentes para que, você sabe, talvez você possa descobrir onde a consulta leva mais tempo e trabalhar para otimizar isso. Ou talvez você entenda que o, ou talvez você ache que a abordagem que você está tomando é ideal em um banco de dados, mas é na verdade falta de um por causa da maneira que ele foi configurado. E assim você é capaz de se aprofundar muito em suas consultas e executar algumas grandes otimizações, entendendo a estrutura e a abordagem que seu banco de dados definiu como você Howard quer abordar executando este para obter os resultados que você pediu.