Transcrições
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.
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.
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.
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.