Gigaflops :: Tutoriais :: SQL
Make your own free website on Tripod.com

   Tutorial SQL

Tutorial SQL

Este tutorial tem como objetivo mostrar alguns comandos básicos da linguagem SQL (Structed Query Language ou Linguagem Estruturada de Consultas). Utilizamos neste tutorial, como ferramenta de auxilio, o SGBD (Sistema Gerenciador de Banco de Dados) MySQL versão 4.0.14-nt, este SGBD pode ser baixado gratuitamente apartir do endereço
www.mysql.com.

O SQL é uma linguagem própria para a realização de operações relacionais em um Banco de Dados. Ela dá suporte a operações básicas, como inserir, retirar, atualizar e pesquisar dados em um BD (Banco de Dados).

O SQL é uma linguagem muito importante, pois ela é utilizada por uma variedade de SGBD's, também conhecidos como Data Base Management System (DBMS). Estes sistemas (SGBD), como o nome sugere, fazem uma interface entre os dados do BD e as operações realizadas sobre estes, isto é, estes sistemas recebem as consultas e realizam as operações lógicas nescessárias para a execussão da consulta. Eis alguns exemplos de SGBD's que utilizam a linguagem SQL:

Ex.: MySQL, SqlServer 2000, PostgreSQL...

Abaixo segue os tópicos abordados neste tutorial:

Topicos:










Instalando e Executando o MySQL

Se você ainda não fez o download do programa clique
AQUI para fazê-lo. Na página que surgir escolha o arquivo correto para a sua plataforma (Windows, Linux, etc).

Depois de baixado o arquivo, descompacte seu conteúdo em uma pasta temporária, logo em seguida execute o arquivo 'setup.exe', e siga as instruções posteriores.

Depois de instalado, acesse o diretório onde foi instalado o MySQL, nesta pasta acesse o diretório 'bin'. Neste diretório deve haver um arquivo executavel chamado mysql.exe, execute - o. Se tudo ocorreu bem, será aberta uma janela de prompt, e será impresso na tela do prompt algumas informações referentes ao programa, o prompt de comando deverá mudar para 'mysql>'. Se você chegou neste ponto, está pronto para utilizar o MySQL.

Qualquer dúvida consulte a documentação do MySQL em www.mysql.com/documentation.

Topo


Preparando um Banco de Dados:

Sob o prompt 'mysql>', como visto na seção anterior, você pode visualizar os BD's que estão sob o gerenciamento do MySQL através do comando SHOW DATABASES;, lembrando que os comandos devem terminar com o caractere de ponto-e-vírgula(;). Após executar este comando, você poderá verificar que já existem alguns Bancos de Dados exemplo no sistema. Você pode utilizar estes BD's digitando o comando USE seguido do nome do BD.

Ex: USE exemplo; - onde "exemplo" é o nome do BD.

Agora que você já pode manipular o Banco de Dados, você pode visualizar o seu conteúdo através do comando SHOW TABLES;, isto é, com este comando pode-se visualizar as tabelas presentes no BD. E para visualizar a estrutura de uma tabela, isto é, os campos de dados, utiliza-se o comando DESC seguido do nome da tabela.

Agora que você já sabe visualizar o conteúdo do seu Banco de Dados, vamos aprender a criar um BD. Sob o prompt de comando 'mysql>' digite o comando CREATE DATABASE seguido do nome do Banco de Dados a ser criado. Fazendo isto, você cria uma area para "colocar" seus dados (tabelas).

Ex.:CREATE DATABASE meu_Banco;

O Banco já foi criado mas ainda está vazio. Na próxima seção veremos como preencher um Banco de Dados com tabelas realacionadas.

Topo


Criando Tabelas:

Antes de apresentarmos a sintaxe para a criação de tabelas é importante saber quais são os tipos de dados suportados pelo SGBD, os tipos de dados podem variar de um SGBD para outro, desta forma apresentamos alguns tipos do MySQL, para obter uma lista completa procure nas especificações do seu SGBD.

Tipo Descrição
CHAR (M) Vetor de caracteres de tamanho fixo 'M', com 'M' de 0 à 255
VARCHAR (M) Vetor de caracteres de tamanho variável com 'M' sendo o tamanho máximo, 'M' de 0 à 255
INT (M) Inteiro de 4 bytes
DOUBLE (M,D) Numero em ponto-flutuante (real), onde 'D' é o número de casas decimais
DATE Representa uma data no formato 'aaaa-mm-dd'
TIME Representa a hora no formato 'hh-mm-ss'
BOOL Representa um valor lógico 'verdadeiro' ou 'falso'


Na seção anterior vimos como criar um Banco de Dados, isto é, como preparar um "terreno" para ser povoado por tabelas relacionadas. Nesta seção vamos criar e preencher nossas tabelas.

Ao criar uma tabela precisamos também informar a estrutura da tabela, isto é, devemos informar os nomes e os tipos dos dados de cada campo da tabela. A sintaxe utilizada para a criação de tableas é a seguinte:

CREATE TABLE nome_tabela (nome_campo1 tipo do dado, ..., nome_campoN tipo dado);

Este comando cria uma tabela de nome "nome_tabela", com seus campos descritos dentro do parentese.

Ex: CREATE TABLE convidados (nome VARCHAR(15), sobrenome VARCHAR(10), idade INT);

Depois de criada a tabela, devemos preenche-la com dados. Cada linha de uma tabela corresponde a um registro lógico, isto é, os dados de uma linha estão relacionados a uma mesma entidade. Para inserir uma linha (registro) em uma tabela, utilizamos a seguinte sintaxe:

INSERT INTO nome_tabela (nome_campo_1,..., nome_campo_N)
VALUES (valor_1,..., valor_N);


No primeiro conjunto de parênteses, deve ser listada os campos da tabela que deverão ser preenchidos, não é obrigatório preencher todos os campos da tabela quando se cria uma nova linha. No segundo conjunto de parênteses, logo após a palavra 'VALUES', deverão ser listados os valores que irão preencher as colunas (campos) daquela linha (registro). É importante destacar que os dados compostos por caracteres (i.e. texto), deverão ser delimitados por aspas simples.

O exemplo seguinte mostra como inserir uma linha com nome, sobrenome, e idade:

INSERT INTO convidados (nome, sobrenome, idade)
VALUES ('João','Silva',20);


Vale lembrar que um comando SQL pode ser escrito em várias linhas, e o ponto-e-vírgula (;) ao final do segundo conjunto de parênteses indica o final do comando. Neste exemplo, supomos que exista uma tabela de nome "convidados" no BD em uso, e que esta tabela contém pelo menos os campos "nome", "sobrenome", e "idade". Verifique também que os dados que representam caracteres estão delimitados por aspas simples.

É importante resaltar que, caso se deseje inserir dados em todos os campos da tabela, não é necessário listar seus nomes, naquele primeiro conjunto de parênteses, mas os dados deverão ser todos informados na ordem em que foram definidos, quando da construção da tabela, portanto os dados no segundo conjunto de parênteses é de uso obrigatório.

Ex: INSERT INTO convidados VALUES ('João','Silva',20);

Você deve ter percebido que é trabalhoso preencher uma tabela com várias linhas, utilizando um comando INSERT para cada linha. No MySQL, existe uma alternativa para o preenchimento de várias linhas de uma tabela. Primeiramente cria-se um arquivo de texto, contendo em cada linha todos os dados para um registro separados pelo caractrere de tabulação (TAB). Com um arquivo nestes moldes basta utilizar o seguinte comando para gravar todos os dados do arquivo na tabela em questão:

LOAD DATA INFILE "caminho p/ o arquivo texto" INTO TABLE nome_tabela;

Onde o caminho deve ser especificado desde o diretório raiz até o nome do arquivo com a sua extensão. Exemplo de nome válido em windows "c:/Minha Pasta/dados.txt".

Existe uma outra versão para este comando, que leva em conta que o arquivo contendo os dados esteja no diretório corrente (i.e. a pasta na qua se está trabalhando). A diferença básica é que agora só é informado o nome do arquivo, omitindo o caminho de pastas onde ele se encontra. Deve-se também acrescentar uma palavra-chave que indica que o arquivo está presente no diretório corrente. Veja o exemplo:

LOAD DATA LOCAL INFILE "nome.extensão" INTO TABLE nome_tabela;

Observe a adição da palavra LOCAL e o argumento entre as aspas duplas deve ter apenas o nome do arquivo e sua extensão.

Clique
aqui para visualizar um exemplo de arquivos de dados.

Agora você está pronto para criar e preencher suas tabelas. Na próxima seção veremos como acessar e manipular os dados.

Topo


Acessando Dados:

Nesta seção aprenderemos como fazer pesquisas nos dados das tabelas, como fazer a junção de tabelas, como selecionar totais etc. Observamos que existe uma larga teoria acerca deste tema, mas neste tutorial apresentaremos apenas a sintaxe dos comandos e discutiremos os principais efeitos destes e os cuidados a serem tomados.

Começaremos pelo que há de mais simples, visualizar os dados de uma tabela:

Sintaxe: SELECT nome_coluna_1, nome_coluna_2, ... , nome_coluna_n FROM nome_tabela;

No comando acima, os nomes relacionados após a cláusula SELECT são os nomes das colunas que serão mostradas no resultado. Se quisermos que sejam mostradas todas as colunas podemos utilizar um asterisco (*) no lugar da lista de nomes, como no seguinte exemplo:

Ex.: SELECT * FROM convidados;

O comando acima lista o nome, sobrenome e idade de todos os convidados que estão armazenados na tabela "convidados", de acordo com a definição feita nos tópicos anteriores.

Mas visualizar o conteúdo de tabelas inteiras pode ser ruim, já que podemos ter uma quantidade de dados enorme. Em algumas situações seria melhor fazer uma filtragem dos dados de uma tabela. Suponhamos que na tabela de convidados haja centenas de nomes, e desejamos ver os dados referentes apenas aos jovens entre 18 e 22 anos. Em SQL podemos formular um comando que ira nos mostrar somente os dados desejados, segue abaixo um exemplo que ilustra a sintaxe deste tipo de comando.

Ex.: SELECT * FROM convidados WHERE idade >= 18 AND idade <= 22;

No comando acima adicionamos uma cláusula WHERE que é responsável por filtrar as linhas da tabela que serão mostradas na tela, neste caso, será listado o nome, sobrenome e idade dos convidados que tem idade entre 18 e 22 anos.

Após a cláusula WHERE deve haver uma expressão que envolva os dados da tabela, e que tenha como resultado um valor lógico, isto é, VERDADEIRO ou FALSO. As linhas da tabela para os quais os dados retornam um valor verdadeiro serão mostradas na tela, as outras que retornam um valor falso serão omitidas.

Vale ressaltar que, no MySQL, as constantes literais (i.e. formada de caracteres) devem aparecer entre aspas simples, como podemos ver no exemplo abaixo:

Ex.:SELECT * FROM convidados WHERE sobrenome = 'Silva';

O exemplo acima lista o nome, sobrenome e idade de todos os convidados que tem o sobrenome igual a "Silva", e pode ser usado para verificar os nomes dos convidados pertencentes a uma mesma família.

Nas pesquisas feitas até agora os dados serão mostrados na ordem em que foram inseridos na tabela original. Em SQL temos uma cláusula que altera a ordem com que os dados são mostrados no resultado da pesquisa. Segue abaixo um exemplo que ilustra como é utilizado esta cláusula.

Ex.: SELECT * FROM convidados WHERE sobrenome = 'Silva' ORDER BY idade DESC;

O exemplo acima exibe os mesmos dados do exemplo anterior, só que possivelmente com a ordem alterada, neste caso as linhas mostradas estarão ordenadas de forma decrescente da idade dos convidados. Em outras palavras, o exemplo acima mostra o nome, sobrenome e idade do convidados de sobrenome "Silva", mostrando primeiro os convidados mais velhos.

Na cláusula ORDER BY deve-se colocar o dado que servirá de controle para ordenação, no nosso exemplo 'idade', e em seguida o tipo de ordenação: "ASC" para crescente e "DESC" para decrescente. Se a constante (ASC/DESC) for omitida a ordem padrão de exibição é a crescente.

Foi visto acima que na cláusula FROM colocamos os nomes das tabelas onde serão feitas as pesquisas. Quando colocamos mais de uma tabela na pesquisa o sistema de banco de dados junta as tabelas formando apenas uma, ele concatena os campos de cada tabela e realiza um produto cartesiano nas linhas das tabelas, logo se juntarmos duas tabelas contendo cada uma 10 linhas e 3 colunas, a tabela resultante terá 100 linhas (10*10) e 6 colunas (3+3), isto pode ser desastroso, por isso devemos usar com muito cuidado.

Quando queremos juntar duas tabelas numa pesquisa é por que existem dados que se relacionam, havendo possivelmente um dado em comum em ambas as tabelas. Se houver este dado em comum, quando fizermos uma pesquisa utilizando duas tabelas devemos inserir uma cláusula WHERE com a condição de que o dado em comum seja igual em ambas as tabelas.

Observamos ainda que se houver nomes de colunas iguais nas diferentes tabelas deveremos utilizar a notação de ponto para referenciarmos cada coluna, isto é, ao invés de utilizarmos apenas o nome da coluna, o que causaria ambiguidade, utilizaremos o seguinte formato de nome: "nome_tabela.nome_coluna", isto é, o nome da tabela seguido de um ponto e do nome da coluna. Observe o seguinte exemplo para obter maior clareza.

Suponhamos que exista um banco de dados com as seguintes tabelas: alimento(numero,nome,tipo,preço) e estoque(numero,quantidade,data_estocagem). Onde a coluna "numero" refere-se ao numero de identificação de um alimento específico. Agora nós queremos saber a quantidade de feijão que temos no estoque. Para isto temos a seguinte pesquisa SQL.

SELECT alimento.numero, nome, quantidade FROM alimento, estoque WHERE alimento.numero = estoque.numero AND nome = 'feijão';

Vimos anteriormente que neste tipo de pesquisa, com a utilização de duas tabelas, ocorrerá uma concatenação dos campos da tabelas logo a tabela resultante terá os seguintes campos: alimento.numero, alimento.nome, alimento.tipo, alimento.preço, estoque.numero, estoque.quantidade, estoque.data_estocagem. Vimos também que ocorrerá um produto cartesiano nas linhas, isto é, cada linha de uma tabela combinará com cada uma das linhas da outra, isto pode e irá gerar linhas com dados inconsistentes, isto é, errados, pois teremos numa única linha dados referentes a produtos diferentes, o que claramente representa uma informação errada.

Para resolver este problema utilizamos a condição alimento.numero = estoque.numero, pois o número identifica unicamente cada produto, e desta forma uma linha da primeira tabela só se combinará com uma linha da outra tabela que faça referência ao mesmo produto (número), eliminando o problema citado acima.

Agora vemos então que a pesquisa SQL acima mostrará o número, o nome e a quantidade em estoque dos produtos que tenhão o nome igual a feijão.

Em SQL podemos renomear os nomes de tableas e de campos de tabelas. A renomeação tem efeito apenas na visualização e na referência aos aos seu nomes na própria pesquisa SQL, isto é, a renomeação não tem efeito sobre a estrutura do banco de dados, não se tornando persistentes nele. Isto significa que acabada a pesquisa SQL onde foram feitas as renomeações, se desejarmos nos referir novamente a estas tabelas deveremos fazê-lo utilizando os nomes definidos originalmente na criação da tabela.

A sintaxe para a renomeação dos nomes de campos e de tabelas é a seguinte: Após listado o nome, seja na lista de campos ou na lista de tabelas do comando SELECT, deveremos inserir a palavra "as" e em seguida o novo nome. No restante do comando SELECT, como por exemplo na cláusula WHERE, podemos utilizar o nome antigo ou o nome novo para nos referênciarmos aos campos e tabelas. Isto é muito útil quando temos nomes grandes que serão repetidos muitas vezes ao longo do comando SELECT.

Em SQL existem algumas funções que podemos usar para extrair médias, somatórios etc. Elas são usadas da seguinte forma:

SELECT lista de campos, funcao(campo à qual é aplicada) as 'título_nova_coluna' FROM lista de tabelas;

A aplicação da função gera uma nova coluna na tabela resultante, onde será mostrado o valor resultante de sua operação, a função pode ser aplicada a um campo da tabela como veremos a seguir.

Suponha que exista uma tabela com os nomes dos funcionarios de uma empresa e seus respectivos salários.

Ex.: SELECT sum(salario) as Total_Folha_Pagamento, FROM funcionarios;

O resultado do comando acima será o gasto total da empresa com o pagamento dos seus funcionários, já que somaremos, através da função 'sum' do inglês soma, os salários de todos os funcionários da empresa. Observamos ainda que se não for utilizada a renomeação, a coluna com o resultado da aplicação da função será nomeada conforme o escrito no comando SELECT. Neste exemplo o título seria 'sum(salario)'.

Os comandos aqui apresentados nos dão um bom poder de manipulação e visualização dos dados em um Banco de Dados. A seguir, veremos como atualizar e eliminar dados num BD.

Topo


Atualizando Dados:

Nesta seção aprenderemos como modificar os dados presentes num BD. Esta seção é um tanto quanto pequena mas de grande importância, já que a maioria dos bancos de dados estão em constante atualização.

Em SQL existe um comando básico para fazer a atualização de dados num BD, eis sua sintaxe:

Sintaxe: UPDATE nome_tabela SET nome_coluna = novo_valor, ... WHERE condição;

O comando apresentado acima só pode ser executado sob uma única tabela, identificada pelo parâmetro 'nome_tabela'. Após o termo SET, deve seguir uma lista com os nomes das colunas (i.e. dados) que serão alteradas, seguidas dos seus novos valores. Pode haver uma condição WHERE limitando as linhas da tabela que sofrerão a alteração.

Vejamos o seguinte exemplo para maiores esclarecimentos:

Ex.: UPDATE funcionarios SET salario = salario * 1,15 WHERE salario < 2000;

Supondo ainda a existência de uma tabela de funcionários, onde temos uma coluna com a informação do salário do funcionário. O comando acima irá alterar o salário dos funcionários que ganham menos de 2000, acrescentando 15% ao seu salário anterior. Isto é, em outras palavras, foi dado um aumento de salário de 15% para os funcionários que ganhavam menos de 2000.

Na próxima seção veremos como eliminar linhas de tabelas.

Topo


Eliminando Dados:

Esta seção é igualmente curta como a seção anterior, mas também tem grande importância na manipulação de um BD. Logo segue abaixo a descrição de sua sintaxe.

Sintaxe: DELETE nome_tabela WHERE condição;

Como no comando anterior, o comando DELETE também só é aplicável a uma tabela por vez, podendo haver uma condição que identifique as linhas que serão eliminadas da tabela. è algo parecido com o comando SELECT, mas ao invéz de mostrarmos as linhas selecionadas iremos deletá-las permanentemente do BD.

Suponha que uma empresa tenha demitido um certo funcionário e ela não mais deseja manter as informações sobre este funcionário, logo ela deseja deletar a linha que faz referência a este funcionário. O exemplo abaixo realiza este propósito.

DELETE funcionarios WHERE nome_funcionario = 'fulano de tal';

O comando acima irá eliminar permanentemente da tabela 'funcionarios' todas as linhas que tiverem o campo 'nome_funcionario' igual a 'fulano de tal'.

Topo