SQL: Comandos Essenciais

Banco de dados

Certo, nesse artigo vamos ver os conceitos básicos necessários para você escrever as suas primeiras queries em SQL.

Se você tem duvidas ainda do que é SQL eu recomendo você ler esse artigo primeiro.

SQL SELECT

Vamos começar pelo mais básico e simples, SQL SELECT.

Essa comando é utilizado para selecionar dados de um banco de dados. Olha o exemplo abaixo.

SELECT coluna1, coluna2, ...
FROM nome_tabela;

Nós podemos traduzir isso como: “Selecione as colunas ‘coluna1’ e ‘coluna2’ da tabela ‘nome_tabela’;

Aqui, coluna1, coluna2, devem ser os nomes dos campos da tabela da qual você deseja selecionar os dados. Se você quiser selecionar todos os campos disponíveis na tabela, use a seguinte sintaxe:

SELECT * FROM nome_tabela;

Assim que você executa esse comando, os dados retornados são armazenados em uma tabela de resultados, chamada de conjunto de resultados.

Eu acho que da para mostrar melhor com um exemplo. Vamos então criar uma tabela para praticar.

A tabela que vamos usar será essa. Tabela “clientes”

idnomeenderecocidadepais
1
Rodrigo NascimentoBerguvsvägen 8BerlinAlemanha
2Marcio MorenoAv. Brasil 222Rio de JaneiroBrasil
3Antonio PereiraAv. Paulista 321São PauloBrasil
4
Clovis OliveiraP. Sherman 42, Wallaby WaySydneyAustralia
5Helder Santos120 Hanover Sq.BrisbaneAustralia
Tabela: clientes

A seguinte instrução SQL seleciona as colunas “nome” e “cidade” da tabela “clientes”:

SELECT nome, cidade FROM clientes;

E o seu conjunto de resultados deve ser parecido com esse:

idnomecidade
1Rodrigo NascimentoBerlin
2Marcio MorenoRio de Janeiro
3Antonio PereiraSão Paulo
4Clovis OliveiraSydney
5Helder SantosBrisbane
Conjunto de resultados

SQL WHERE

Como acabamos de ver, com o SELECT você consegue filtrar as colunas, certo? Agora digamos que você queira filtrar alguns dos elementos em cada linha.

Por exemplo, você quer saber quais são os clientes que moram no Brasil ou na Australia. Usando apenas SELECT isso não é possível.

Para isso nós precisamos do WHERE.

A cláusula SQL WHERE é usada para especificar uma condição quando se vai buscar os dados de uma única tabela ou unindo com várias tabelas.

Se a condição dada for satisfeita, ela retorna todos os registros que batem com essa condição.

O objetivo é usar a cláusula WHERE para filtrar os registros e buscar somente os registros necessários.

Para o exemplo acima, poderíamos escrever uma query assim:

SELECT nome, cidade FROM clientes WHERE pais = 'Brasil';
idnomecidade
2Marcio MorenoRio de Janeiro
3Antonio PereiraSão Paulo
Conjunto de resultados

Ok, um coisa que você precisa ter em mente, SQL requer aspas simples em torno de valores de texto como no ‘Brasil’ aí em cima (a maioria dos SGBD também vão aceitar aspas duplas).

Entretanto, para campos numéricos não se deve colocar entre aspas:

// Errado
SELECT nome, cidade FROM clientes WHERE id = '1';

//Correto
SELECT nome, cidade FROM clientes WHERE id = 1;

SQL LIKE

Nada mais conveniente que dar continuidade a essa lista com o operador LIKE, pois ele é usado em uma cláusula WHERE para procurar um padrão especificado em uma coluna.

Já sei, melhor com exemplo né?

Digamos que precisamos atualizar o endereço dos clientes no nosso banco de dados.

Precisamos trocar todo Cliente que tem no endereço a abreviação “Av” para “Avenida”, para ajudar na logística de entregas.

Mais antes dessa atualização o gerente precisa ver quantos clientes serão afetados com esse alteração.

Como “Avenida” ou “Av” não são colunas da nossa tabela, não temos como usar apenas o WHERE.

Para isso precisamos usar o LIKE, a query fica assim:

SELECT nome, endereco FROM clientes
WHERE endereco LIKE 'Av%';
idnomeendereco
2Marcio MorenoAv. Brasil 222
3Antonio PereiraAv. Paulista 321
Conjunto de resultados

Você deve estar se perguntando o que diabos esse “%” ta fazendo ali, ou que eu cometi algum erro de digitação, mas não, ta tudo certinho.

Existem dois wildcards (coringas) frequentemente usados em conjunto com o operador LIKE:

  • O sinal de porcentagem (%), que pode representar zero, um, ou múltiplos caracteres.
  • O sinal de sublinhado (_), que representa um único caracter.

Existem muitas possíveis combinações, mas vou listar aquelas que considero as mais importantes.

Operador LIKEDescrição
WHERE coluna LIKE ‘a%’Encontre quaisquer valores que comecem com “a”.
WHERE coluna LIKE ‘%a’Encontre quaisquer valores que terminam com “a”.
WHERE coluna LIKE ‘%or%’Encontre quaisquer valores que tenham “ou” em qualquer posição
WHERE coluna LIKE ‘_r%’Encontre quaisquer valores que tenham “r” na segunda posição
WHERE coluna LIKE ‘a_%’Encontre quaisquer valores que comecem com “a” e tenham pelo menos 2 caracteres de comprimento
WHERE coluna LIKE ‘a__%’Encontre quaisquer valores que comecem com “a” e tenham pelo menos 3 caracteres de comprimento
WHERE coluna LIKE ‘a%o’Encontra quaisquer valores que começam com “a” e terminam com “o”.
Operador LIKE

Então no nosso exemplo, estou usando o primeiro comando dessa tabela. E ele deve me retornar os clientes com id = 2 e id = 3.

Mas se quiser, você pode ser bem especifico, e usar o LIKE sem nenhum coringa. Assim:

SELECT * FROM clientes
WHERE endereco LIKE 'Av. Brazil 222'; 

SELECT * FROM clientes
WHERE endereco LIKE 'Av. Paulista 321';

Ainda podemos dar um upgrade nessa query, ao invés de executar duas, podemos executar apenas um query que vai resolver nosso problemas. Os nossos próximos operadores estão aqui pra isso.

Operadores AND, OR e NOT

Agora podemos combinar cláusula WHERE com os operadores AND, OR, e NOT, e dar uma simplificada na querry.

E para deixar claro, o AND e OR são usados para filtrar registros com base em mais de uma condição, exatamente como nosso exemplo acima.

E o NOT para negar uma condição, ou seja, qualquer coisa que NÃO seja igual a condição.

Usando esses operadores, você vai escrever suas queries usando essa sintaxe:

//AND
SELECT coluna1, coluna2, ...
FROM nome_tabela
WHERE condicao1 AND condicao2 AND condicao3 ...;

//OR
SELECT coluna1, coluna2, ...
FROM nome_tabela
WHERE condicao1 OR condicao2 OR condicao3 ...;

//NOT
SELECT coluna1, coluna2, ...
FROM nome_tabela
WHERE NOT condicao;

Na tabela abaixo tem uma breve descrição do que cada operador faz.

OperadorDescrição
ANDExibe um registro se todas as condições separadas por AND forem VERDADEIRAS.
ORExibe um registro se qualquer uma das condições separadas por OR for VERDADEIRA.
NOTExibe um registro se a(s) condição(ões) NÃO for(em) VERDADEIRA(s).
Operadores AND, OR e NOT

Então, como disse antes, podemos simplificar a query do nosso ultima exemplo, ao invés de usar duas queries separadas, podemos escrever apenas uma, usando um dos operadores acima, nesse caso, vamos usar o OR.

Depois de simplificar nossa query o resultado é esse:

SELECT nome, endereco FROM clientes
WHERE (endereco LIKE 'Av. Brazil 222' or endereco LIKE 'Av. Paulista 321');
idnomeendereco
2Marcio MorenoAv. Brasil 222
3Antonio PereiraAv. Paulista 321
Conjunto de resultados

SQL UPDATE

Agora já temos dois métodos para para selecionar e visualizar os dados. Mas geralmente queremos fazer alguma coisa com esses dados certo?

Por exemplo, digamos que um dos nossos clientes se mudou de cidade ou talvez até de país, então os campos “endereco”, “cidade” e “pais” vão mudar, e precisamos atualizar o registro desse cidadão. Como fazer?

Bom, o primeiro passo é selecionar o Cliente que está se mudando, certo? E isso já sabemos como fazer, usando SELECT e WHERE.

Mas agora vamos usar o método UPDATE, para fazer exatamente a mesma coisa, com um extra step, vamos atualizar os valores ao mesmo tempo. Assim:

UPDATE clientes
SET cidade = 'Paris', pais= 'Franca', endereco = '60 rue La Boétie'
WHERE id = 1;
idnomeenderecocidadepais
1
Rodrigo Nascimento60 rue La BoétieParisFranca
Tabela: clientes

Aqui temos no lugar do SELECT o comando UPDATE. E logo depois temos a linha com o comando(ou palavra chave) SET, é usado com o comando UPDATE para especificar quais colunas e valores devem ser atualizados em uma tabela.

Então, o que estamos fazendo aqui é simples, vamos traduzir esse comando.
“Atualize dentro da tabela ‘clientes’ a ‘cidade’, ‘pais’ e ‘endereco’ do cliente cujo o id é igual 1”.

Simples, não? Acabamos de enviar o Rodrigo pra França.

Agora, atenção!

Tenha cuidado ao atualizar os registros em uma tabela! Observe o comando WHERE na declaração UPDATE. A cláusula WHERE especifica que registro(s) deve(m) ser atualizado(s). Se você omitir a cláusula WHERE, todos os registros da tabela serão atualizados!

SQL DELETE

Todo mundo, uma vez ou outra na vida faz uma pequena 💩 certo?

No caso do banco de dados, se você guardou um registro que não deveria no banco, e precisa remover, esse é o método que você vai usar.

Vamos imaginar esse cenário, que o cliente Clovis não queira mais fazer parte do nosso clube de clientes. Pela politica da empresa, todos os dados daquele cliente precisam ser apagados.

Essa é a deixa para o usar o DELETE.

No exemplo, isso ficaria assim:

DELETE FROM clientes WHERE nome='Clovis Oliveira';
idnomeenderecocidadepais
1
Rodrigo NascimentoBerguvsvägen 8BerlinAlemanha
2Marcio MorenoAv. Brasil 222Rio de JaneiroBrasil
3Antonio PereiraAv. Paulista 321São PauloBrasil
5Helder Santos120 Hanover Sq.BrisbaneAustralia
Tabela: clientes

E é isso, aquela linha será completamente apagada do banco de dados.

Mas atenção!

Se você não fornecer um WHERE na cláusula com DELETE, os dados da tabela inteira serão excluídos!

!!! ISSO IRÁ APAGAR TODOS OS DADOS DESSA TABELA !!!
DELETE from clientes;

Só rode esse comando se você tiver certeza do que está fazendo. De preferência somente o faça em um banco de dados de teste.

SQL Joins

Structured Query Language (SQL) é uma linguagem de programação que é usada em banco de dados relacional. E por “relacional” quero dizer que dados entre tabelas tem algum tipo de relação entre si. E para tratar muitos desses casos, os comandos que vimos até aqui são insuficientes. Vamos expandir nosso vocabulário SQL com JOINS.

Sem duvida uma das cláusulas SQL mais importantes, Vamos entender o que ele faz e como funciona.

A cláusula JOIN é usada para combinar linhas de duas ou mais tabelas, com base em uma coluna relacionada entre elas.

Ok, para explicar melhor o que esse comando faz, vamos precisar de alguns exemplos.

Para esses exemplos vamos precisar de uma segunda tabela, que vamos chamar de “pedidos”.

IDcliente_idvalor_totalvencimento
12R$ 34212/08/2022
24R$ 62904/11/2022
Tabela: pedidos

Observe que a coluna “cliente_id” na tabela “pedidos” se refere ao “id” na tabela “clientes”.

Daí podemos extrair a nossa relação, porque quando falamos de um cliente queremos saber se ele tem algum pedido, e quando olhamos para a lista de pedidos, precisamos saber de quem aquele pedido pertence.

O JOIN resolve esse problema pra gente, e o resultado você confere na tabela abaixo.

SELECT pedidos.valor_total, pedidos.vencimento, clientes.nome
FROM pedidos
INNER JOIN clientes ON pedidos.cliente_id=clientes.id;
valor_totalvencimentonome
R$ 34212/08/2022Marcio Moreno
R$ 62904/11/2022Clovis Oliveira
SQL JOIN resultado

Ok, não é a mais simples das queries, mas é fácil de entender. Vamos traduzir isso para bom português.

“Selecione as colunas “valor_total” e “vencimento” na tabela “pedidos” e a coluna “nome” na tabela “clientes” da tabela “pedidos” fazendo união com a tabela “clientes” onde a coluna “cliente_id” na tabela “pedidos” for igual ao “id” na tabela “clientes””.

Ainda confuso? Vamos separar por partes, pra ver se ajuda.

A primeira parte já vimos no exemplo do SELECT. Bem similar

Selecione as colunas “valor_total” e “vencimento” na tabela “pedidos” e a coluna “nome” na tabela “clientes” da tabela “pedidos”.

SELECT pedidos.valor_total, pedidos.vencimento, clientes.nome
FROM pedidos

Certo, temos duas coisa a pontuar aqui, uma é que estamos usando “pedidos.valor_total” ao invés de apenas “valor_total”. a outra é que temos “clientes.nome” que não tem nada a ver com a tabela pedidos.

Essa é a magica do comando JOIN, ele te ajuda a unir colunas de várias tabelas em um único resultado.

Temos as colunas “vencimento” e “valor_total” que estão vindo da tabela pedido e “nome” que está vindo da tabela “clientes”, por isso precisamos especificar de onde cada dado está vindo.

Fazemos isso usando a notação: tabela.coluna

Agora a novidade é a segunda parte:

INNER JOIN clientes ON pedidos.cliente_id=clientes.id;

Que se traduz como algo do tipo:

Faça união com a tabela “clientes” onde a coluna “cliente_id” na tabela “pedidos” for igual ao “id” na tabela “clientes””.

O resumo então, quando “cliente.id” e “pedido.cliente_id”coincidirem, me mostre essas três colunas pedidos.vencimento, pedidos.valor_total, clientes.nome.

Um INNER JOIN nada mais é do que uma união, você provavelmente viu isso na escola, se não fugiu das aulas de matemática. Era aquela aula que falavam dos Diagramas de Venn. Aqui vai uma imagem para ajudar.

Diferentes tipos de SQL JOINs
Diferentes tipos de SQL JOINs
TipoDescrição
(INNER) JOINRetorna registros que têm valores correspondentes em ambas as tabelas
LEFT (OUTER) JOINRetorna todos os registros da tabela da esquerda, e os registros combinados da tabela da direita
RIGHT (OUTER) JOINRetorna todos os registros da tabela da direita, e os registros combinados da tabela da esquerda
FULL (OUTER) JOINRetorna todos os registros quando há uma correspondência na tabela da esquerda ou da direita
Diferentes tipos de SQL JOINs

Pela tabela acima, você vê que temos vários tipos de JOINS, o que estamos usando nesse exemplo é o INNER JOIN, mas poderíamos ter usado qualquer um dos outros, se eles resolvessem o nosso problema.

Dê uma lida na descrição de cada método e tente entender o que cada um faz.

Conclusão

E é isso. Acredito que quem quer dar o ponta pé inicial com SQL, esses métodos e cláusulas já são um bom começo, sem duvidas. Deixe um comentário se ficou faltando alguma coisa, eu leio todos, juro.

Se você quiser praticar um pouco do que aprendeu, da uma olhada nesse link, você pode testar as queries com um banco de dados de verdade, é bem legal.

Até a próxima!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

0 Comments