As consultas SQL são rápidas. Parte 1

1. Introdução


A linguagem SQL é fortemente integrada à vida dos analistas de negócios e aos requisitos dos candidatos devido à sua simplicidade, conveniência e prevalência. Pela minha própria experiência, posso dizer que, na maioria das vezes, o SQL é usado para formar downloads, fachadas de lojas (com subsequente construção de relatórios baseados nessas fachadas) e administração de banco de dados. E como o trabalho diário do analista está inevitavelmente associado a uploads de dados e fachadas de lojas, a capacidade de escrever consultas SQL pode se tornar um fator pelo qual o candidato obterá uma vantagem ou será eliminado. A triste notícia é que nem todos podem esperar colocá-lo em um banco de estudantes. A boa notícia é que aprender SQL não é nada complicado, é rápido e a sintaxe da consulta é simples e direta. Isto é especialmente verdade para aqueles que já encontraram idiomas mais complexos.

Dividi o treinamento em SQL em três partes. Esta parte é dedicada à sintaxe básica, usada em 80-90% dos casos. As próximas duas partes serão dedicadas a subconsultas, Join'am e operadores especiais. O objetivo dos guias é praticar de forma rápida e prática a sintaxe SQL para adicioná-la ao arsenal de habilidades.

Prática


Uma introdução à sintaxe será examinada usando um banco de dados aberto projetado especificamente para a prática de SQL. Para que seu treinamento seja o mais eficaz possível, abra o link abaixo em uma nova guia e execute imediatamente os exemplos acima. Isso permitirá que você consolide melhor o material e trabalhe com a sintaxe.

Clique aqui

Depois de clicar no link, você pode ver o próprio editor de consultas e os dados gerados na parte central da tela, a lista de tabelas do banco de dados está na parte correta.

Estrutura de consulta SQL


A estrutura geral da solicitação é a seguinte:

SELECT ('  *    ; ') FROM ('; ') WHERE ('/, , city = 'Moscow'; ') GROUP BY (',     ; ') HAVING ('/    ; ') ORDER BY (',     ; ') 

Vamos analisar a estrutura. Por conveniência, o item de aprendizado atual na solicitação é destacado pelo CAPS.

SELECIONAR, DE


SELECT, FROM - elementos necessários da consulta que definem as colunas selecionadas, sua ordem e fonte de dados.

Selecione tudo (indicado como *) na tabela Clientes:

 SELECT * FROM Customers 

Selecione as colunas CustomerID, CustomerName na tabela Customers:

 SELECT CustomerID, CustomerName FROM Customers 


ONDE


WHERE é um elemento de consulta opcional usado quando você precisa filtrar os dados pela condição desejada. Muitas vezes, dentro do elemento where, IN / NOT IN é usado para filtrar uma coluna por vários valores, AND / OR para filtrar uma tabela por várias colunas.

Filtrando por uma condição e um valor:

 select * from Customers WHERE City = 'London' 

Filtrando por uma condição e vários valores usando IN (inclusão) ou NOT IN (exceção):

 select * from Customers where City IN ('London', 'Berlin') 

 select * from Customers where City NOT IN ('Madrid', 'Berlin','Bern') 

Filtrando por várias condições usando AND (todas as condições são atendidas) ou OR (pelo menos uma condição é atendida) e vários valores:

 select * from Customers where Country = 'Germany' AND City not in ('Berlin', 'Aachen') AND CustomerID > 15 

 select * from Customers where City in ('London', 'Berlin') OR CustomerID > 4 

GRUPO POR


GROUP BY é um elemento de consulta opcional com o qual você pode especificar a agregação pela coluna desejada (por exemplo, se precisar descobrir quantos clientes vivem em cada cidade).

Ao usar GROUP BY é obrigatório:

  1. a lista de colunas usada para o corte era a mesma dentro de SELECT e dentro de GROUP BY,
  2. funções agregadas (SUM, AVG, COUNT, MAX, MIN) também devem ser especificadas dentro de SELECT com a coluna à qual essa função é aplicada.

Agrupando o número de clientes por cidade:

 select City, count(CustomerID) from Customers GROUP BY City 

Agrupando o número de clientes por país e cidade:

 select Country, City, count(CustomerID) from Customers GROUP BY Country, City 

Agrupando vendas por ID do produto com diferentes funções agregadas: o número de pedidos deste produto e o número de peças vendidas:

 select ProductID, COUNT(OrderID), SUM(Quantity) from OrderDetails GROUP BY ProductID 

Agrupamento de vendas com filtragem da tabela de origem. Nesse caso, a saída será uma tabela com o número de clientes nas cidades alemãs:

 select City, count(CustomerID) from Customers WHERE Country = 'Germany' GROUP BY City 

Renomeie uma coluna agregada usando o operador AS. Por padrão, o nome da coluna agregada é igual à função agregada aplicada, o que pode não ser muito conveniente para a percepção.

 select City, count(CustomerID) AS Number_of_clients from Customers group by City 

TENDO


HAVING é um elemento de consulta opcional que é responsável pela filtragem no nível dos dados agrupados (de fato, WHERE, mas apenas um nível acima).

Filtrando a tabela agregada com o número de clientes por cidade, neste caso, deixamos descarregar apenas as cidades nas quais há pelo menos 5 clientes:

 select City, count(CustomerID) from Customers group by City HAVING count(CustomerID) >= 5 


No caso de uma coluna renomeada dentro de HAVING, é possível especificar a contagem de construção de agregação (CódigoDoCliente) e o novo nome da coluna número_de_clientes:

 select City, count(CustomerID) as number_of_clients from Customers group by City HAVING number_of_clients >= 5 

Uma consulta de exemplo contendo WHERE e HAVING. Nesta consulta, a tabela inicial por usuários é filtrada primeiro, o número de clientes por cidade é calculado e apenas essas cidades permanecem onde o número de clientes é pelo menos 5:

 select City, count(CustomerID) as number_of_clients from Customers WHERE CustomerName not in ('Around the Horn','Drachenblut Delikatessend') group by City HAVING number_of_clients >= 5 

ENCOMENDAR POR


ORDER BY é um elemento de consulta opcional responsável pela classificação da tabela.

Um exemplo simples de classificação por uma coluna. Nesta solicitação, a classificação por cidade especificada pelo cliente é realizada:

 select * from Customers ORDER BY City 

Você pode classificar por várias colunas; nesse caso, a classificação ocorre na ordem das colunas especificadas:

 select * from Customers ORDER BY Country, City 

Por padrão, a classificação é crescente para números e em ordem alfabética para valores de texto. Se a classificação reversa for necessária, na cláusula ORDER BY, após o nome da coluna, adicione DESC:

 select * from Customers order by CustomerID DESC 

Classificação reversa por uma coluna e classificação padrão pela segunda:

 select * from Customers order by Country DESC, City 

Aderir


JOIN - um elemento opcional usado para unir tabelas pela chave que está presente nas duas tabelas. A chave é precedida por uma instrução ON.

Uma consulta na qual juntamos as tabelas Order e Customer pela chave CustomerID e o nome da tabela é adicionado antes dos nomes das colunas da coluna por meio de um ponto:

 select * from Orders JOIN Customers ON Orders.CustomerID = Customers.CustomerID 

Muitas vezes, uma situação pode surgir quando você precisa mapear uma tabela com valores de outra. Dependendo da tarefa, diferentes tipos de conexões podem ser usados. INNER JOIN - interseção, DIREITA / ESQUERDA para mapear uma tabela com conhecimento de outra,

 select * from Orders join Customers on Orders.CustomerID = Customers.CustomerID where Customers.CustomerID >10 

Dentro de toda a solicitação JOIN, ela é incorporada após o elemento from ao elemento where, uma solicitação de exemplo:

Outros tipos de JOINs podem ser vistos na figura maravilhosa abaixo:


Na próxima parte, falaremos mais sobre tipos JOIN e consultas aninhadas.

Se você tiver alguma dúvida / sugestão, peça sempre que entre em contato!

Source: https://habr.com/ru/post/pt480838/


All Articles