Um guia básico para iniciantes

Quer concatenar duas ou mais colunas de string em SQL? Aprenda como usar a função SQL CONCAT para concatenar strings.

Ao consultar uma tabela de banco de dados, às vezes você pode precisar concatenar várias colunas de texto/string em vez de recuperar dados de uma única coluna. Isso é útil quando você precisa de uma saída legível e mais fácil de interpretar.

Por exemplo, você pode selecionar um campo full_name concatenando os campos first_name e last_name. Da mesma forma, você pode obter o full_address concatenando rua, cidade, estado e outros campos necessários.

No SQL, você pode usar a função CONCAT para concatenar strings. Neste guia, veremos:

  • A sintaxe da função SQL CONCAT
  • Exemplos de uso
  • Tratamento de valores NULL em uma ou mais colunas durante a concatenação

Vamos começar!

Sintaxe da função SQL CONCAT

A sintaxe para usar a função SQL CONCAT é a seguinte:

CONCAT(string_1, string_2, ..., string_n);

Aqui, string_1, string_2,…, string n denotam as strings a serem concatenadas. Podem ser literais de string ou colunas ou uma combinação de ambos.

Concatenando Literais de String com CONCAT

Como a função CONCAT também pode ser usada para concatenar literais de string, vamos tentar codificar um exemplo simples.

Aqui concatenamos as strings ‘Hello, ‘ e ‘world!’ como a string de saudação:

SELECT CONCAT('Hello, ', 'world!') AS greeting;

A execução da consulta acima fornecerá a seguinte saída:

+---------------+
| greeting      |
+---------------+
| Hello, world! |
+---------------+
1 row in set (0.00 sec)

Na prática, entretanto, você pode querer concatenar as colunas necessárias em uma tabela de banco de dados e não literais de string. Então, vamos codificar alguns exemplos usando a função CONCAT em SQL.

Como concatenar colunas em SQL

A seguir, vamos consultar uma tabela de banco de dados.

  Como cancelar a assinatura do Walmart Plus

📑 Todos os exemplos de consultas neste tutorial foram executados em um MySQL tabela do banco de dados. Mas você também pode acompanhar em outro RDBMS de sua escolha.

Criando uma tabela de banco de dados com registros

Vamos criar um banco de dados que possamos usar:

CREATE DATABASE db1;
use db1;

Vamos criar uma tabela de funcionários no banco de dados db1. Para fazer isso, execute a instrução CREATE TABLE com as seguintes colunas e tipos de dados correspondentes:

CREATE TABLE employees (
    ID INT AUTO_INCREMENT PRIMARY KEY,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    street VARCHAR(100),
    city VARCHAR(50),
    state VARCHAR(2),
    username VARCHAR(20)
);

A seguir, vamos inserir alguns registros na tabela de funcionários:

INSERT INTO employees (first_name, last_name, street, city, state, username) VALUES
    ('John', 'Smith', '123 Main St', 'New York', 'NY', 'john123'),
    ('Alice', 'Johnson', '456 Elm St', 'Boston', 'MA', 'alice456'),
    ('Bob', 'Williams', '789 Oak St', 'Chicago', 'IL', 'bob789'),
    ('Mary', 'Davis', '321 Pine St', 'Houston', 'TX', 'mary456'),
    ('James', 'Brown', '555 Cedar St', 'Seattle', 'WA', 'james789'),
    ('Emily', 'Jones', '777 Maple St', 'Atlanta', 'GA', 'emily123'),
    ('Michael', 'Miller', '999 Birch St', 'Miami', 'FL', 'michael456'),
    ('Jessica', 'Wilson', '111 Walnut St', 'Dallas', 'TX', 'jessica789'),
    ('William', 'Taylor', '222 Cherry St', 'Denver', 'CO', 'william123'),
    ('Sarah', 'Martinez', '444 Pine St', 'Phoenix', 'AZ', 'sarah456');

Exemplo 1: Exibir nomes completos

Como primeiro exemplo, vamos concatenar as colunas first_name e last_name para obter o full_name. Para fazer isso, podemos usar a função SQL CONCAT na consulta SELECT conforme mostrado:

SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM employees;

Você deve obter a seguinte saída:

+----------------+
| full_name      |
+----------------+
| John Smith     |
| Alice Johnson  |
| Bob Williams   |
| Mary Davis     |
| James Brown    |
| Emily Jones    |
| Michael Miller |
| Jessica Wilson |
| William Taylor |
| Sarah Martinez |
+----------------+
10 rows in set (0.00 sec)

Além do first_name e do last_name, observe que também usamos espaço como separador – especificado pela string literal ‘ ‘.

Exemplo 2: Construir endereços

Agora vamos dar outro exemplo.

  8 melhores ferramentas de design AI UI/UX para protótipos rápidos de iluminação

Temos as colunas rua, cidade e estado na tabela de funcionários. Portanto, podemos selecionar o full_address concatenando esses três campos com uma vírgula como separador:

SELECT CONCAT(street, ', ', city, ', ', state) AS full_address FROM employees;

Aqui está o resultado:

+---------------------------+
| full_address              |
+---------------------------+
| 123 Main St, New York, NY |
| 456 Elm St, Boston, MA    |
| 789 Oak St, Chicago, IL   |
| 321 Pine St, Houston, TX  |
| 555 Cedar St, Seattle, WA |
| 777 Maple St, Atlanta, GA |
| 999 Birch St, Miami, FL   |
| 111 Walnut St, Dallas, TX |
| 222 Cherry St, Denver, CO |
| 444 Pine St, Phoenix, AZ  |
+---------------------------+
10 rows in set (0.00 sec)

Exemplo 3: Criar URLs de perfil

Lembre-se de que temos um campo de nome de usuário na tabela funcionários.

Digamos que você tenha um domínio raiz https://www.example.com/ e os perfis de usuário estejam em https://www.example.com/user. Você pode gerar o profile_url usando a função CONCAT assim:

SELECT CONCAT('https://www.example.com/user/', username) AS profile_url 
FROM employees;

Como visto, obtemos os URLs de perfil de todos os funcionários:

+-----------------------------------------+
| profile_url                             |
+-----------------------------------------+
| https://www.example.com/user/john123    |
| https://www.example.com/user/alice456   |
| https://www.example.com/user/bob789     |
| https://www.example.com/user/mary456    |
| https://www.example.com/user/james789   |
| https://www.example.com/user/emily123   |
| https://www.example.com/user/michael456 |
| https://www.example.com/user/jessica789 |
| https://www.example.com/user/william123 |
| https://www.example.com/user/sarah456   |
+-----------------------------------------+
10 rows in set (0.00 sec)

Tratamento de valores NULL

Na tabela de funcionários, todos os registros possuem todos os campos. Mas e se você tiver um ou mais campos com valores NULL?

Vamos dar um exemplo para este caso. Aqui atualizamos o registro correspondente a ID = 2 para definir a coluna rua como NULL:

UPDATE employees
SET street = NULL
WHERE ID = 2; -- Update the record with ID 2
Query OK, 1 row affected (0.05 sec)
Rows matched: 1  Changed: 1  Warnings: 0

Agora usamos CONCAT para selecionar full_address:

SELECT CONCAT(street, ', ', city, ', ', state) AS full_address FROM employees;

Aqui está o resultado:

+---------------------------+
| full_address              |
+---------------------------+
| 123 Main St, New York, NY |
| NULL                      |
| 789 Oak St, Chicago, IL   |
| 321 Pine St, Houston, TX  |
| 555 Cedar St, Seattle, WA |
| 777 Maple St, Atlanta, GA |
| 999 Birch St, Miami, FL   |
| 111 Walnut St, Dallas, TX |
| 222 Cherry St, Denver, CO |
| 444 Pine St, Phoenix, AZ  |
+---------------------------+
10 rows in set (0.00 sec)

Observe que o segundo elemento no conjunto de resultados é NULL.

  Ataques de escalonamento de privilégios, técnicas e ferramentas de prevenção

Mas gostaríamos que o resultado fosse a concatenação das colunas cidade e estado para ter uma ideia aproximada do endereço. Quando você tiver esses valores NULL, poderá usar CONCAT_WS como alternativa à função CONCAT. Vamos ver como isso funciona.

Usando CONCAT_WS para lidar com valores NULL durante a concatenação

CONCAT_WS é uma alternativa ao CONCAT que pode ser usada se você suspeitar que um ou mais campos contenham valores NULL.

Você pode usar a função CONCAT_WS assim:

CONCAT_WS(separator, string_1, string_2,..., string_n)

Agora execute a seguinte consulta SELECT:

SELECT CONCAT_WS(', ', street, city, state) AS full_address FROM employees;

Você obterá a seguinte saída:

+---------------------------+
| full_address              |
+---------------------------+
| 123 Main St, New York, NY |
| Boston, MA                |
| 789 Oak St, Chicago, IL   |
| 321 Pine St, Houston, TX  |
| 555 Cedar St, Seattle, WA |
| 777 Maple St, Atlanta, GA |
| 999 Birch St, Miami, FL   |
| 111 Walnut St, Dallas, TX |
| 222 Cherry St, Denver, CO |
| 444 Pine St, Phoenix, AZ  |
+---------------------------+
10 rows in set (0.01 sec)

Como visto, para o segundo item no conjunto de resultados, obtemos ‘Boston MA’, pois o campo rua é NULL.

⚠ Ao utilizar CONCAT_WS, é necessário especificar o separador. Se você não especificar o separador, o resultado será NULL se uma ou mais colunas forem NULL (semelhante a CONCAT).

Empacotando

Vamos revisar o que aprendemos:

  • Ao consultar uma tabela de banco de dados para recuperar dados, concatene várias colunas de string para obter resultados de consulta mais úteis e fáceis de interpretar. Para fazer isso, você pode usar a função CONCAT em SQL com a sintaxe CONCAT(string_1, string_2,…, string_n).
  • Você pode concatenar literais de string, colunas ou uma combinação de ambos. No entanto, se houver um ou mais valores NULL, o resultado desse registro específico será NULL. Para lidar com isso, você pode usar CONCAT_WS com a sintaxe CONCAT_WS(separador, string_1, string_2,…, string_n).
  • CONCAT_WS lida com valores NULL de maneira mais elegante, concatenando apenas as strings que estão presentes usando o separador especificado.

Para uma revisão rápida dos comandos SQL e seu uso, você pode marcar esta folha de dicas SQL.