SQL: Comando SELECT – Parte I

Introdução

Será exposto neste artigo o comando SELECT, sendo esse o único comando da DQL (Data Query Language – Linguagem de Consulta de Dados) da SQL (Structured Query Language – Linguagem Estruturada de Consulta). O comando SELECT é utilizado sempre que se deseja recuperar os dados armazenados nas tabelas do banco de dados.

Tabelas

Para demonstrar o comando SELECT serão utilizadas as tabelas mostradas no modelo lógico abaixo. Esse modelo lógico é uma variação do apresentado no artigo CREATE TABLE.

FUNCION >< SETOR

Relacionamento entre as tabelas FUNCION e SETOR

Essas tabelas conterão os dados adiante apresentados. Leia o artigo INSERT para maiores esclarecimentos sobre como inserir dados numa tabela ou o artigo UPDATE e DELETE que mostra como alterar e excluir, respectivamente, dados de uma tabela.

Tabela FUNCION
ID_FUNCION
NOME
SOBRENOME
SALARIO
ID_SETOR
1
Tadeu Pereira
2500.00
1
2
Ylane Amorim
2200.00
2
3
Lucas Pereira
2500.00
3
4
Cibelle Pereira
2200.00
4
5
Julian Menezes
2000.00
1
6
Ewerton Rodrigues
2000.00
1
7
Jacob Neto
1500.00
2
8
Maria Silva
1000.00
null
9
Fernanda Fernandes
1800.00
4

 

Tabela SETOR
ID_SETOR
SETOR
1
Desenvolvimento
2
Manutenção
3
Financeiro
4
Vendas
5
RH

 

Comando SELECT simples

Ao mesmo tempo que o comando SELECT é simples também é muito extenso, uma vez que ele tem vários operadores, comandos, sub-comandos, funções e cláusulas não obrigatórias. Esta série de artigos lhe levará, de maneira gradativa, a conhecer boa parte desse comando, iniciando pela forma mais básica do comando como mostrado na próxima sintaxe.

Obs.: Os COLCHETES denotam uma parte opcional e as CHAVES indicam que partes podem ser repetidas indefinidamente ou omitidas completamente.

Sintaxe:

select ATRIBUTO [{, ATRIBUTO}] from TABELA[;]

Rótulo Descrição
TABELA Nome da tabela
ATRIBUTO Nome do atributo

Utilização:

O exemplo a seguir irá mostrar o ID_FUNCION e NOME de todos os registros da tabela FUNCION.

Exemplo #1:

select ID_FUNCION, NOME from FUNCION;

Resultado #1:

ID_FUNCION
NOME
1
Tadeu
2
Ylane
3
Lucas
4
Cibelle
5
Julian
6
Ewerton
7
Jacob
8
Maria
9
Fernanda

Exemplo #2:

select * from FUNCION;

Este exemplo substituiu os atributos pelo asterisco, e como tudo na computação, e na vida, isso traz vantagem e desvantagem. A desvantagem é que o SGBDR vai ter que buscar os atributos da tabela dentro do seu catálogo do banco de dados e substituir pelo asterisco antes mesmo de tentar processar a consulta, perdendo desempenho.

A vantagem está relacionada com a manutenção dos sistemas, pois se uma tabela tem 5(cinco) ou 10(dez) atributos numa consulta mais complexa, a legibilidade não é perdida, mas em sistemas com tabelas que têm mais de 50(cinquenta) atributos, o que não é incomum, o asterisco deve ser considerado em pró da legibilidade e manutenção, mas sempre deve-se avaliar a perda de desempenho que o mesmo pode proporcionar em relação a quantidade de possíveis  usuários utilizando essa consulta. Uma possível saída para o problema seria avaliar a possibilidade de criar uma VIEW.

Resultado #2:

ID_FUNCION
NOME
SOBRENOME
SALARIO
ID_SETOR
1
Tadeu Pereira
2500.00
1
2
Ylane Amorim
2200.00
2
3
Lucas Pereira
2500.00
3
4
Cibelle Pereira
2200.00
4
5
Julian Menezes
2000.00
1
6
Ewerton Rodrigues
2000.00
1
7
Jacob Neto
1500.00
2
8
Maria Silva
1000.00
null
9
Fernanda Fernandes
1800.00
4

Cláusula WHERE

Na maioria das vezes não é desejável ou viável retornar todos os registros de uma tabela após a execução do comando SELECT. A cláusula WHERE do comando SELECT informa ao SGBDR que ele deverá selecionar apenas parte dos registros da tabela desejada. Isso acontece porquê a cláusula WHERE utiliza os operadores comparativos para obter condições lógicas que identifiquem um registro ou grupo de registros.

Sintaxe:

select ATRIBUTO [{, ATRIBUTO}] from TABELA

[where ATRIBUTO <OPERADOR_COMPARATIVO> VALOR]

[;]

Utilização do operador comparativo “=” (Igual a):

Exemplo #3:

select ID_FUNCION, NOME from FUNCION
where NOME = ‘Tadeu’;

Resultado #3:

ID_FUNCION
NOME
1
Tadeu

Neste exemplo o comando SELECT trouxe apenas um registro, pois apenas ele tem o atributo NOME igual a Tadeu.

Valeu ressaltar que a SQL é CASE INSENSITIVE, isto quer dizer que não diferencia letras maiúsculas de minúsculas, dessa maneira os exemplos #4, #5 e #6 terão o resultado #3 como saída, ou seja, a mesma saída do exemplo #3.

Exemplo #4:

SELECT ID_FUNCION, NOME FROM FUNCION
WHERE NOME = ‘Tadeu’;

Exemplo #5:

Select Id_Funcion, Nome From Funcion
Where Nome = ‘Tadeu’;

Exemplo #6:

select id_funcion, nome from funcion
where nome = ‘Tadeu’;

Como mencionado, a SQL é CASE INSENSITIVE, mas os valores armazenado nas tabelas pode não ser, isso vai depender do SGBDR e/ou CHARACTER SET informado na criação do banco de dados e/ou tabela. Em outras palavras, pode ser que os exemplos #7 e #8 retornem um conjunto vazio se os dados estiverem armazenados de forma CASE SENSITIVE (diferencia letras maiúsculas de minúsculas).

Exemplo #7:

select ID_FUNCION, NOME from FUNCION
where NOME = ‘tadeu’;

 Exemplo #8:

select ID_FUNCION, NOME from FUNCION
where NOME = ‘TADEU’;

O próximo exemplo trará todos os registros da tabela FUNCION onde o ID_SETOR tenham o valor igual a 1(um).

Exemplo #9:

select ID_FUNCION, NOME, ID_SETOR from FUNCION
where ID_SETOR = 1;

Resultado #9:

ID_FUNCION
NOME
ID_SETOR
1
Tadeu
1
5
Julian
1
6
Ewerton
1

Obs.: O valor informado para filtrar o atributo NOME no exemplo #3 está entre apóstrofos, enquanto o valor informado para filtrar o atributo ID_SETOR no exemplo #9 não, isso ocorre porquê se o valor for numérico (inteiro e decimal) não é necessário o uso dos apóstrofos.

Utilização do operador comparativo “<>” (Diferente de):

Exemplo #10:

select ID_FUNCION, NOME from FUNCION
where NOME <> ‘Tadeu’;

Resultado #10:

ID_FUNCION
NOME
2
Ylane
3
Lucas
4
Cibelle
5
Julian
6
Ewerton
7
Jacob
8
Maria
9
Fernanda

Neste exemplo o comando SELECT trouxe todos os registros que têm o atributo NOME diferente de Tadeu.

Alguns SGBDRs podem utilizar o operador comparativo != como o operador diferente de, mas esse operador não está na ISO/IEC 9075, documento oficial da ISO (International Organization for Standardization – Organização Internacional de Normalização) que fornece as especificações para “Information technology – Database languages – SQL“.

Utilização do operador comparativo “>” (Maior que):

Exemplo #11:

select ID_FUNCION, NOME from FUNCION
where NOME > ‘Tadeu’;

Este exemplo só trará os registros onde o atributo NOME tenha o valor superior a Tadeu.

Obs.: Entenda-se como superior a Tadeu os valores que, se colocados em ordem ascendente (ou crescente), ficariam após o nome Tadeu. A mesma regra é válida para os outros operadores e para os tipos DATE, INTEGER, NUMERIC, etc.

Resultado #11:

ID_FUNCION
NOME
2
Ylane

Utilização do operador comparativo “>=” (Maior que ou igual a):

Exemplo #12:

select ID_FUNCION, NOME from FUNCION
where NOME >= ‘Tadeu’;

Este exemplo só trará os registros onde o atributo NOME tenha o valor superior ou igual a Tadeu.

Resultado #12:

ID_FUNCION
NOME
1
Tadeu
2
Ylane

Utilização do operador comparativo “<” (Menor que):

Exemplo #13:

select ID_FUNCION, NOME from FUNCION
where NOME < ‘Tadeu’;

Este exemplo só trará os registros onde o atributo NOME tenha o valor inferior a Tadeu.

Resultado #13:

ID_FUNCION
NOME
3
Lucas
4
Cibelle
5
Julian
6
Ewerton
7
Jacob
8
Maria
9
Fernanda

Utilização do operador comparativo “<=” (Menor que ou igual a):

Exemplo #14:

select ID_FUNCION, NOME from FUNCION
where NOME <= ‘Tadeu’;

Este exemplo só trará os registros onde o atributo NOME tenha o valor inferior ou igual a Tadeu.

Resultado #14:

ID_FUNCION
NOME
1
Tadeu
3
Lucas
4
Cibelle
5
Julian
6
Ewerton
7
Jacob
8
Maria
9
Fernanda

Conclusão

Este é o primeiro dos artigos que irão apresentar o comando SELECT. Esse comando é utilizado para recuperar os dados armazenados no banco de dados, mas aqui só foi visto superficialmente, ele será aprofundados em futuros artigos. No Canal da TIDP no youtube você pode assistir vídeos sobre esse e outros assuntos.

Até o próximo artigo.

Assuntos relacionados:

CREATE TABLE

INSERT

UPDATE e DELETE

SQL: Comando SELECT – Parte II

SQL: Comando SELECT – Parte III

SELECT: Indo além do WHERE simples

Possui mestrado em Computação Aplicada pela Universidade Estadual do Ceará (2010), especialização em Engenharia de Software pela Faculdade de Juazeiro do Norte (2010), graduação em Automática pelo Centro Federal de Educação Tecnológica do Ceará (2005). Tem experiência na área de Ciência da Computação , com ênfase em Sistemas de Computação, atuando principalmente nos seguintes temas: Desenvolvimento dos programas de computador IndSist, Store, Teacher entre outros. Desenvolvimento dos programas Mobile-Android Agenda Iterativa e Guia Cariris.Disciplinas que ministra ou ministrou no ensino superior: Linguagem de Programação, Paradigma de Programação, Estrutura de Dados, Engenharia de Software, Banco de Dados. Currículo Lattes