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 aquiDepois 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:
- a lista de colunas usada para o corte era a mesma dentro de SELECT e dentro de GROUP BY,
- 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!