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 TABELA (TRUNCATE) DE UMA 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 INCREMENTÁVEL INCREMENT) AUTO (AUTO 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 contendo sendo os utilizar estivesse são conjuntos de resultados de um comando SQL, colunas e dados como se fosse uma tabela normal, campos de uma ou mais tabelas reais. Você pode o WHERE e JOIN em uma VIEW para visualizar como se 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 NOW() Descrição 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() DATE_SUB() DATEDIFF() DATE_FORMAT() Adicionar um intervalo específico de tempo de uma data. Subtrai um intervalo específico de tempo de uma data. Retorna o número de dias entre um intervalo de datas. 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 REGISTROS (TOP/LIMIT) QUANTIDADE DE RETORNADOS 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 (WILDCARDS) COM CURINGAS 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 Qualquer caracter que não esteja na lista [!charlist] 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!