Introdução a Linguagem SQL: Comandos Básicos e Avançados – Parte 2

Continuando o nosso resumão de comandos SQL, vamos ver alguns que estão faltando e em outra postagem irei demonstrar as funções utilizadas.

ÍNDICES (INDEX)

O objetivo dos índices é agilizar a busca de algum dado na tabela, sem ter que lê-la por completo, de forma eficiente. Toda tabela que for atualizada e que possuir índice, irá demorar mais que uma tabela sem índice, pois seus índices precisam ser atualizados também. Sendo assim, você só deve utilizar índices em colunas que você irá utilizar com frequência.

Neste caso é permitido valores duplicados de índices:

CREATE INDEX nome_indice
ON tabela (nome_coluna);

Sem permitir valores duplicados:

CREATE UNIQUE INDEX nome_indice
ON tabela (nome_coluna);

Exemplos de sua utilização:

CREATE INDEX pessoa
ON clientes (nome, sobrenome);

CREATE UNIQUE INDEX identificacao
ON pessoas (num_cpf);

REMOVENDO/DELETANDO ÍNDICES, TABELAS E BD (DROP)

Os comandos utilizados a seguir serão utilizados para EXCLUIR, então tenha muito cuidado e certeza ao utilizar estes comandos.

Índices

Vamos ver o exemplo de como remover o índice de uma tabela:

ALTER TABLE tabela DROP INDEX nome_indice;

Tabela

DROP TABLE tabela;

Banco de Dados

DROP DATABASE banco_dados;

LIMPANDO OS DADOS DE UMA TABELA (TRUNCATE)

Caso você não queira excluir a tabela, mas quer limpar os dados contidos nela, você pode utilizar o comando TRUNCATE, seguindo o exemplo abaixo:

TRUNCATE TABLE tabela;

ALTERANDO UMA TABELA (ALTER TABLE)

O comando ALTER TABLE serve para adicionar, deletar ou alterar colunas dentro de uma tabela. Vamos ver um exemplo de cada um deles abaixo:

Inserindo coluna na tabela

Sintaxe:

ALTER TABLE tabela
ADD coluna tipo;

Exemplo:

ALTER TABLE clientes
ADD nascimento date;

Excluindo coluna na tabela

Sintaxe:

ALTER TABLE tabela
DROP COLUMN coluna;

Exemplo:

ALTER TABLE clientes
DROP COLUMN nascimento;

Alterando coluna na tabela

Sintaxe:

ALTER TABLE tabela
ALTER COLUMN coluna tipo;

Exemplo:

ALTER TABLE clientes
ALTER COLUMN nascimento date;

UTILIZANDO CAMPO AUTO INCREMENTÁVEL (AUTO INCREMENT)

Este tipo permite gerar números únicos e crescentes sempre que um novo registro for inserido (INSERT) em uma tabela. Normalmente utilizado como chave-primária (PK).

Vejamos um exemplo de definição de campo auto increment quando criamos uma tabela:

CREATE TABLE Clientes (
id_cliente int NOT NULL AUTO_INCREMENT,
nome varchar(255) NOT NULL,
endereco varchar(255),
cidade varchar(255),
PRIMARY KEY (id_cliente)
)

Quando for inserir algum registro nesta tabela, não precisa declarar a coluna “id_cliente”, ou seja, a que está como AUTO_INCREMENT, pois o próprio BD irá definir seu valor. Veja o exemplo:

INSERT INTO Clientes (nome, endereco, cidade)
VALUES ("Diego", "Av. João Cabral Torres de Melo", "Maceió");

TABELAS VIRTUAIS (VIEW)

As VIEWS são conjuntos de resultados de um comando SQL, contendo colunas e dados como se fosse uma tabela normal, sendo os campos de uma ou mais tabelas reais. Você pode utilizar o WHERE e JOIN em uma VIEW para visualizar como se estivesse vendo apenas uma tabela. Veja a sintaxe abaixo:

CREATE VIEW nome_view AS
SELECT coluna(s)
FROM tabela
WHERE condição;

Para visualizarmos a nossa VIEW, basta dar um SELECT nela:

SELECT * FROM nome_view;

Trabalhar com VIEWS é ótimo para evitar a utilização de SQL grande, onde você irá constantemente, facilitando o comando para visualizar os dados que você precisa.

Alterando a VIEW (CREATE OR REPLACE VIEW)

Veja a sintaxe:

CREATE OR REPLACE VIEW nome_view AS
SELECT coluna(s)
FROM tabela
WHERE condição;

Excluindo a VIEW (DROP VIEW)

Sintaxe é esta:

DROP VIEW nome_view;

DATAS (DATE)

Uma coisa muito importante ao trabalhar com datas com o BD, é ter certeza que você está inserindo o formato de sua data igual ao formato aceito pela sua tabela. Veja abaixo algumas das funções de datas utilizadas pelo MySQL:

Função Descrição
NOW() Retorna a data e hora atual do BD.
CURDATE() Retorna a data atual do BD.
CURTIME() Retorna a hora atual do BD.
DATE() Extrai parte de uma data ou hora.
EXTRACT() Retorna somente uma parte da data ou hora.
DATE_ADD() Adicionar um intervalo específico de tempo de uma data.
DATE_SUB() Subtrai um intervalo específico de tempo de uma data.
DATEDIFF() Retorna o número de dias entre um intervalo de datas.
DATE_FORMAT() Exibe a data/hora em formatos diferentes.

Tipo de Dados para o DATE

Os tipos abaixo são utilizados na hora de criarmos uma tabela em nosso BD:

  • DATE – formato YYYY-MM-DD
  • DATETIME – formato: YYYY-MM-DD HH:MM:SS
  • TIMESTAMP – formato: YYYY-MM-DD HH:MM:SS
  • YEAR – formato YYYY ou YY

Valores Nulos (NULL)

O valor NULL representa um dado desconhecido que está faltando, ou seja, que esteja vazio, sem valor algum. Por padrão, as colunas de uma tabela podem aceitar valores nulos. Iremos ver os comandos IS NULL e IS NOT NULL.

Algumas características básicas sobre o NULL:

  • Este tipo de valor é tratado de forma diferente dos outros;
  • É utilizado para preencher valores desconhecidos ou inaplicáveis;
  • São valores padrões em comandos de INSERT ou UPDATE quando não são definidos algum outro valor;
  • O valor NULL e 0 (zero) não podem ser comparados, pois são valores diferentes. Não são equivalentes;
Os próximos dois comandos que iremos ver, IS NULL e IS NOT NULL, são utilizados em comandos de seleção (SELECT), já que não podemos utilizar os operadores de comparação como =, <, > ou <>. Veja um exemplo de cada um deles.

IS NULL

SELECT nome,cidade,telefone FROM clientes
WHERE cidade IS NULL;

IS NOT NULL

SELECT nome,cidade,telefone FROM clientes
WHERE cidade IS NOT NULL;

DEFININDO PSEUDÔNIMOS (ALIAS)

Você pode renomear colunas e tabelas para uma consulta. Isto é muito bom quando trabalhamos com consultas grandes e complexas, facilitando a identificação dos campos, tanto na leitura como na escrita.

Sintaxe do Alias com tabelas

SELECT coluna
FROM tabela AS nome_novo_tabela;

Sintaxe do Alias com colunas

SELECT coluna AS nome_novo_coluna
FROM tabela;

Vejam alguns exemplos de sua utilização:

SELECT c.nome, c.cidade, c.telefone
FROM clientes AS c
WHERE c.cidade IS NOT NULL;

LIMITANDO A QUANTIDADE DE REGISTROS RETORNADOS (TOP/LIMIT)

O comando TOP especifica a quantidade de registros a serem retornados, podendo ser útil principalmente em tabelas enormes, com milhares de registros. Pode-se utilizar definindo um valor exato de registros ou em porcentagem do total. Vejam os exemplos abaixo de suas utilizações:

Porcentagem

SELECT TOP 50 PERCENT * FROM clientes;

Número

SELECT TOP 2 * FROM clientes;
SELECT * FROM clientes LIMIT 2;

DEFININDO UM PADRÃO NO WHERE (LIKE)

O operador LIKE é usado com a cláusula WHERE para refinar a seleção utilizando um padrão definido em uma coluna. Veja um exemplo:

SELECT * FROM clientes
WHERE nome LIKE "D%";

SELECT * FROM clientes
WHERE nome LIKE "%ie%";

Veja que o sinal de porcentagem (%) pode ser utilizado como um curinga (está faltando letras no padrão), tanto antes como depois do padrão de refinamento.

Veja abaixo mais detalhes de como trabalhar com curingas.

TRABALHANDO COM CURINGAS (WILDCARDS)

Os curingas são utilizados em busca dentro de um BD, podendo substituir um ou mais caracteres durante esta busca. Eles devem ser utilizados com o comando LIKE. Veja abaixo a tabela de uso:

Curinga Descrição
% Substitui por zero ou mais caracteres
_ Substitui exatamente por um caracter
[charlist] Qualquer caracter dentro da lista
[^charlist]or

[!charlist]

Qualquer caracter que não esteja na lista

BUSCANDO UM DE VÁRIOS VALORES PARA O WHERE (IN)

Com o comando IN, você pode especificar vários valores no comando WHERE para fazer uma busca dentro desses valores dados. Veja o exemplo:

SELECT * FROM clientes
WHERE cidade IN('São Paulo','Rio de Janeiro');

BUSCANDO VALORES DENTRO OU FORA DE UM INTERVALO (BETWEEN)

Utiliza-se o BETWEEN dentro do comando WHERE para fazer uma busca de valores que estejam entre um determinado intervalo de dados. Veja a sintaxe:

SELECT coluna(s)
FROM tabela
WHERE coluna
BETWEEN valor1 AND valor2;

Veja alguns exemplos com uma busca dentro do intervalo (BETWEEN) e fora do intervalo (NOT BETWEEN):

SELECT * FROM produtos
WHERE qtd BETWEEN 1 AND 10;
SELECT * FROM produtos
WHERE qtd NOT BETWEEN 1 AND 10;

Por enquanto é só pessoal. Espero que os comandos utilizados até aqui sirva muito bem e ajude a tirar algumas dúvidas frequêntes. Caso ainda tenha alguma dúvida, só comentar que eu responderei assim que possível. E não deixem de assinar meu blog com o seu e-mail ai do lado. 😉

Abraços!

Sou bacharel em Sistemas de Informação pela Estácio de Sá (Alagoas), especialista em Gestão Estratégica da Tecnologia da Informação pela Univ. Gama Filho (UGF) e pós-graduando em Gestão da Segurança da Informação pela Univ. do Sul de Santa Catarina (UNISUL). Certificações que possuo: EC-Council CEH, CompTIA (Security+, CySA+ e Pentest+), EXIN (EHF e ISO 27001), MCSO, MCRM, ITIL v3. Tenho interesse por todas as áreas da informática, mas em especial em Gestão e Governança de TI, Segurança da Informação e Ethical Hacking.

5 Responses to “Introdução a Linguagem SQL: Comandos Básicos e Avançados – Parte 2”

  1. willian disse:

    Boa tarde a Todos…Estou com um problema que é o seguinte, preciso mostrar um relatório de controle de estoque que me da todos os produtos sem repetir tenho isso cadastrado

    Produto A – 10 – 12,00

    Produto B – 5 – 13,00

    Produto C- 5 – 15,00

    Produto A – 12 – 35,00

    Produto A – 23 – 55,00

    Produto C – 30 – 150,00

    Produto B – 5 – 13,00

    Preciso Mostrar isso no controle de estoque

    Produto A – QTD TOTAL – VALOR TOTAL

    Produto B – QTD TOTAL – VALOR TOTAL

    Produto C – QTD TOTAL – VALOR TOTAL

    Meu código é PDO?

  2. PAULO EDUARDO P CARVALHO disse:

    Bom dia Diego preciso de um comando para mudar os dados de um campo na tebela estoque
    usando o comando update

    ex. nome do campo =codigo
    conteudo 00001

    quero alterar todo os dados deste campo para que comece com 9.
    ficando assim 90001.
    voce tem o comando ?

  3. Roberto Oliveira disse:

    Bom dia DIEGO? Gostaria de saber se você pode me dar uma dica sobre o banco de dado Mysql.

Deixe um comentário para willian Cancelar resposta

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