Banco de Dados – Introdução ao SQL

Olá Alunos,
Na aula de hoje iniciaremos o nosso estudo sobre SQL, linguagem de consulta para o banco de dados.
Utilizaremos o MySQL para nossa simulação, mas antes faça download do material teórico.



Em caso de falhas, ou incompatibilidades de instalação em seu sistema, poderemos utilizar o H2 Database, disponível no endereço: https://h2database.com/html/main.html


Após ler o material e realizar alguns teste em sala, vale realizar as leituras complementares para gerencia de dados em Windows e Linux. Os arquivos estão disponíveis nos endereços:

Administrando Banco de Dados MySQL
==============================================================

O trecho a seguir foi retirado do primeiro link onde é destacado a gerencia do MySQL pelo prompt de comandos em ambiente Windows.

==============================================================

Agora, mão na massa. Baixe os programas e, primeiro, instale o MySQL. Para facilitar, aceite a instalação-padrão. Assim, o programa será acomodado no diretório c:\mysql. Passe à ativação do servidor de bancos de dados. Aqui, o procedimento é diferente se você estiver usando uma versão do Windows da série 9x (98, Me) ou da família NT (NT 4.0, 2000 ou XP). No primeiro caso, abra a janela do MS-DOS e comande:

c:\mysql\bin\mysqld

Com isso, você inicia o motor de banco de dados do MySQL, que funciona em segundo plano. Para desligar a aplicação, digite numa janela DOS:

c:\mysql\bin\mysqladmin -u root shutdown

No Windows NT, 2000 ou XP, o MySQL roda como um serviço do sistema – ou seja, como um programa que fica sob controle do Windows. Para ativar o motor de banco de dados do MySQL, abra a janela Command Prompt e execute a seguinte linha:

c:\mysql\bin\mysqld –install

Atenção: na linha acima, o parâmetro install é precedido por dois hífens. Esse comando instala o serviço MySql no Windows NT, 2000 ou XP. Para verificar a instalação, abra o gerenciador de serviços (no NT, Painel de Controle/Serviços; no 2000 e XP, Ferramentas Administrativas/Serviços). O gerenciador lista em ordem alfabética todos os serviços controlados pelo sistema. Localize a linha “MySql”. A coluna Tipo de Inicialização (Startup), indica Automático, Manual ou Desativado. Para modificar alguma propriedade, dê um duplo clique na linha do serviço. No modo automático, o serviço é ativado junto com o sistema operacional. No manual, ele permanece desativado até que o usuário faça a inicialização. Em vez de utilizar o gerenciador gráfico, você também pode ativar e desligar o serviço na janela de prompt. Para ativar, digite:

net start mysql

Para interromper o serviço, use o comando:

net stop mysql

Ative o MySql. Agora, o banco de dados está pronto para entrar em ação. Para testar se ele foi instalado corretamente, no Windows 9x ou NT/2000/XP, execute a seguinte linha na janela Command Prompt:

c:\mysql\bin\mysql.exe

O sinal de que o programa está respondendo adequadamente é a mensagem “Welcome to MySQL monitor”, seguida de um prompt de comando do próprio cliente MySQL (mysql>). Esta é a interface do MySQL. Nela, você pode criar e administrar bancos de dados, digitando comandos em linguagem SQL. Para sair, digite quit. Veja alguns exemplos básicos. Para criar um banco de dados chamado teste, escreva:

mysqladmin create teste

Agora, diga ao MySQL para abrir esse banco de dados:

use teste

O banco de dados está aberto, mas não tem conteúdo. Crie uma tabela com dois campos – um numérico e outro de texto, este com espaço para 20 caracteres:

create table tabela1 (campo1 integer, campo2 char(20));

Também é possível usar comandos com linhas múltiplas. Veja o mesmo exemplo acima, disposto em várias linhas:

create table
tabela1
(campo1
integer,
campo2
char(20));

Para listar os nomes das tabelas do banco de dados, use:

show tables;

Da mesma forma, para ver a lista de campos da tabela1:

show columns from tabela1;

Agora, vamos inserir conteúdo nos campos da tabela:

insert into tabela1 (campo1, campo2) values (1, ´texto 1´);

Para exibir o conteúdo da tabela, use o comando select:

select * from tabela1;

Estes são exemplos de alguns comandos básicos. Para ver a lista completa, consulte o manual do MySQL, que fica no subdiretório mysql\docs. Para pesquisar com mais facilidade, uma boa idéia é entrar na ajuda começando pelo documento manual_toc.html, que é um arquivo-índice para o conteúdo da ajuda em manual.html.

Mas convenhamos: digitar comandos numa janela DOS não é a maneira mais agradável (nem a mais produtiva) de gerenciar bancos de dados. Uma solução mais interessante é usar um cliente gráfico do MySQL. Assim, você trabalha mais confortavelmente numa tela Windows e esse programa-cliente é que se encarrega, nos bastidores, de enviar comandos ao MySQL.

Um bom cliente para o MySQL é o programa brasileiro DBTools, da DBTools Software. O programa funciona em qualquer versão do Windows, desde que você tenha instalado o protocolo TCP/IP – o que é padrão em qualquer máquina que tem acesso à internet. Instale o aplicativo e execute-o pela primeira vez.

Clique no botão Server Manager, na barra de ferramentas. Na nova tela que se abre, clique no primeiro botão (New Server) e preencha alguns campos. Em Server Name, dê um nome para o servidor MySQL – por exemplo, Local. Em Host Name, digite o número IP de sua máquina (se você não está numa rede, digite o número de um servidor local: 127.0.0.1). Na caixa User ID, mantenha o nome root – quer dizer, o usuário com todos os direitos no sistema. A senha, por comodidade, você pode deixar em branco. Clique no ícone Salvar e em seguida no ícone do relâmpago, para testar a conexão. Se tudo estiver bem, o programa avisa: “Connection successful”. O programa está pronto para o trabalho.

Feche a janela Server Manager. O DBToools vai perguntar se você deseja carregar as mudanças feitas na configuração. Responda sim. Agora, a janela de trabalho do DBTools mostra, na porção esquerda, o servidor Local (MySQL). Se você abrir a pasta desse servidor, vai ver que ele já tem um banco de dados, mysql, pertencente ao sistema de gerenciamento do MySQL. O servidor tem ainda um cadastro de usuários, no qual só está listado o superusuário root.

Vamos agora criar e manusear um banco de dados com o DBTools. Clique no botão New Database e informe um nome para o banco de dados. Para dar utilidade ao nosso exemplo, vamos criar um banco de dados para uma coleção de CDs musicais. O nome do database será cd. Outra forma de criar um banco de dados é clicar com o botão direito no diretório Databases, na porção esquerda da janela, e escolher a opção Create. Após isso, o banco cd aparece como subpasta de Databases.

Por enquanto, cd está vazio. Vamos, então, adicionar a ele uma tabela de dados. Abra a pasta cd e selecione a subpasta Tables. Em seguida, na janela à direita, clique no link New. O DBTools abre uma janela na qual você deve digitar os nomes, tipos e tamanhos dos campos de dados. Digite os nomes dos campos, escolha os tipos e, no caso de campos de texto comum, indique os tamanhos.

Para campos de valores fracionários, indique o número de casas decimais na coluna Decimals. Há ainda colunas de propriedades – como Null e Auto – caracterizadas pelo padrão Sim/Não. Null indica se o campo aceita, ou não, valores em branco. A coluna Auto marca os campos de numeração automática. Salve as modificações e feche a janela com a estrutura da tabela. Agora, clique no nome da tabela discos e veja um resumo dos campos e propriedades no lado direito da tela.

No MySQL, um banco de dados corresponde a uma pasta dentro do diretório \mysql\data. Cada tabela, por sua vez, está contida num conjunto de arquivos que abrigam dados e índices. Para inserir outras tabelas no banco de dados, adote o mesmo procedimento usado na criação de discos. Você pode, por exemplo, criar uma tabela chamada genero, que armazene gêneros musicais: MPB, rap, jazz, rock, clássico etc. Essa tabela seria uma doadora de informações para a tabela principal, discos. Infelizmente, o MySQL não suporta a criação de relacionamentos entre tabelas. Então, para associar os dados dessa segunda tabela aos valores do campo genero, em discos, seria necessário usar um programa que verificasse a coerência entre os dados.

==============================================================

O trecho a seguir foi retirado do segundo link onde é destacado a gerencia do MySQL pelo prompt de comandos em ambiente Linux.

==============================================================

Se como eu, você acessa o mysql através de outro micro, as permissões
de acesso devem ser alteradas:
# mysql -u root -p
mysql>
mysql> GRANT ALL ON *.* to [email protected] identified by ‘anna’;
ou outro usuario

mysql> GRANT ALL ON *.* to diego@localhost identified by ‘anna’;

dando permissão somente acesso a um unico banco ao usuário:

mysql> GRANT ALL ON anna.* TO diego@localhost identified by ‘anna’;
Query OK, 0 rows affected (0.00 sec)

Para que as alterações referentes ao acesso a banco de dados e ao
servidor como um todo tenham efeito, é necessário que ao final de toda
rotina seja digitado o comando FLUSH PRIVILEGES, responsável por
validar as atualizações no MySQL:

mysql> FLUSH PRIVILEGES;

Vamos dar um exemplo criando um banco e duas tabelas e inserindo dados
em uma delas e trabalharemos um pouco nelas.
Entre no banco de dados local com o usuário que acabamos de criar:

#mysql -u diego –p
mysql>
mysql> CREATE DATABASE Cad;
Query OK, 1 row affected (0.00 sec)

Vamos verificar:

mysql>
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| anna               |
| cad                |
| mysql              |
| test               |
+--------------------+
5 rows in set (0.00 sec)
mysql>

Pronto criado nosso banco  
)
Vamos criar duas tabela neste banco, primeiro temos que escolher o banco onde queremos criar nossas tabelas uando o comando “use’: mysql> USE cad; Database changed Estamos no baco agora é só criar as
)
mysql> CREATE TABLE `cadastro1` ( `codigo` int(5) NOT NULL auto_increment, `nome` varchar(40) NOT NULL default '', `sobrenome` varchar(25) NOT NULL default '', `idade` varchar(2) NOT NULL default '', `end` varchar(200) NOT NULL default '', `cidade` varchar(20) NOT NULL default '', PRIMARY KEY (`codigo`) ) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=latin1; mysql> CREATE TABLE `cadastro2` ( `codigo` int(5) NOT NULL auto_increment, `nome` varchar(40) NOT NULL default '', `ocupacao` varchar(25) NOT NULL default '', `idade` varchar(2) NOT NULL default '', `area` varchar(200) NOT NULL default '', `salario` varchar(2) NOT NULL default '', `carro` varchar(20) NOT NULL default '', PRIMARY KEY (`codigo`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; Verifcar se foram criadas: mysql> SHOW TABLES; +---------------------+ | Tables in anna | +---------------------+ |cadastro1 | |cadastro2 | +---------------------+ 2 rows in set (0.00 sec) mysql> Vamos ver como ficou a estrutura das nossas tabelas de um modo geral: mysql> show fields from cadastro1; +-----------+------------+------+-----+--------+----------------+ | Field | Type | Null | Key | Default| Extra | +-----------+------------+------+-----+--------+----------------+ | codigo | int(5) | NO | PRI | NULL | auto_increment | | nome | varchar(40)| YES | | NULL | | | sobrenome | varchar(25)| YES | | NULL | | | idade | varchar(2) | YES | | NULL | | | end |varchar(200)| YES | | NULL | | | estad | varchar(2) | YES | | NULL | | | cidade | varchar(20)| YES | | NULL | | +-----------+------------+------+-----+--------+----------------+ 7 rows in set (0.00 sec)mysql> mysql> show fields from cadastro2; +----------+------------+------+-----+--------+----------------+ | Field | Type | Null | Key | Default| Extra | +----------+------------+------+-----+--------+----------------+ | codigo | int(5) | NO | PRI | NULL | auto_increment | | nome | varchar(40)| YES | | NULL | | | ocupacao | varchar(25)| YES | | NULL | | | idade | varchar(2) | YES | | NULL | | | area |varchar(200)| YES | | NULL | | | salario | varchar(2) | YES | | NULL | | | carro | varchar(20)| YES | | NULL | | +----------+------------+------+-----+--------+----------------+ 7 rows in set (0.00 sec) mysql> Pode se usar o comando “DESCRIBE” mysql> DESCRIBE cadastro1; mysql> DESCRIBE cadastro2; O resultado é o mesmo.. Pronto criadas nossas tabelas vamos inserir dados em uma delas: mysql> INSERT INTO cadastro1 VALUES ('1','Diego','Grassato', '20', 'Mato Grosso', 'SP', 'Gapira'); Ente parentese “()” você coloca os dados conforme foi feito os campos da tabela “cadastro1? sempre separados por virgula, e o conteúdo do campo sempre ente aspas simple (’ ‘) para não ter perca de dados vocês pode colocar desta forma também para se referenciar certinho ao campo desejado para não ter duvida nenhuma: mysql> INSERT INTO cadastro1 (codigo, nome, sobrenome, idade,end, estad, cidade ) VALUES (’1',’Diego’,’Grassato’, ‘20', ‘Mato Grosso’, ‘Gapira’); Verificando o conteúdo adicionado acima: A instrução SELECT é usada para recuperar informações de uma tabela. A forma geral da instrução é: SELECT o_que_mostrar FROM de_qual_tabela WHERE condições_para_satisfazer; mysql> SELECT * FROM cadastro1; +-------+-------+-----------+------+-------------+-------+---------+ | codigo| nome | sobrenome | idade| end | estad | cidade | +-------+-------+-----------+------+-------------+-------+---------+ | 0 | Diego | Grassato | 22 | Mato Grosso | SP |Gapira | | 2 | Anna | Grassato | 20 | Mato Grosso | SP |Gapira | | 3 | Duna | Grassato | 12 | Mato Grosso | SP |Gapira | +-------+-------+-----------+------+-------------+-------+---------+ 3 rows in set (0.00 sec) mysql> Você tambem pode filtar a visulização dos campos q você deseje ver ou também mescla-los: mysql> SELECT nome FROM cadastro1; +-------+ | nome | +-------+ | Diego | | Anna | | Dunha | +-------+ 3 rows in set (0.00 sec) mysql> SELECT nome, sobrenome FROM cadastro1; +-------+-------------------------+ | nome | sobrenome | +-------+-------------------------+ | Diego | Grassato | | Anna | Teresa Casarin Grassato | | Dunha | Dunhinha | +-------+-------------------------+ 3 rows in set (0.00 sec) Aqui está outra consulta. Ela demonstra que você pode usar o mysql como uma calculadora simples: mysql> SELECT SIN(PI()/4), (4+1)*5; +--------------------+---------+ | SIN(PI()/4) | (4+1)*5 | +--------------------+---------+ | 0.7071067811865475 | 25 | +--------------------+---------+ 1 row in set (0.03 sec) Combinação de padrões O MySQL fornece combinação de padrões do SQL bem como na forma de combinação de padrões baseado nas expressões regula-res extendidas similares àquelas usadas pelos utilitários Unix como o vi, grep e sed. A combinação de padrões SQL lhe permite você usar _ para coincidir qualquer caractere simples e % para coincidir um número ar-bitrário de caracteres (incluindo zero caracter). No MySQL, padrões SQL são caso insensitivo por padrão. Alguns exemplos são vistos abaixo. Perceba que você não usa = ou != quando usar padrões SQL; use os operadores de comparação LIKE ou NOT LI-KE neste caso. Para encontrar nomes começando com ‘a’: mysql> SELECT * FROM cadastro1 WHERE nome LIKE "a%"; +-------+------+---------------+------+------------+-------+-------+ | codigo| nome | sobrenome | idade| end | estad | cidade| +-------+------+---------------+------+------------+-------+-------+ | 2 | Anna | Teresa Casarin| 22 | Mato Grosso| SP | Gapira| +-------+------+---------------+------+------------+-------+-------+ 1 row in set (0.00 sec) mysql> Ateração de dados, vamos alterar a idedade do cadastro de Anna: mysql> UPDATE cadastro1 SET idade = '18' WHERE nome ='anna'; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> SELECT * FROM cadastro1 WHERE nome LIKE “a%”; +-------+------+---------------+------+------------+-------+-------+ | codigo| nome | sobrenome | idade| end | estad | cidade| +-------+------+---------------+------+------------+-------+-------+ | 2 | Anna | Teresa Casarin| 18 | Mato Grosso| SP | Gapira| +-------+------+---------------+------+------------+-------+-------+ 1 row in set (0.00 sec) Ok alterado com sucesso, de 20 passou a ficar com valor 18 em idade. Vamos alterar o sobrenome, só que para descartamos erros e alterar o sobrenome de vários outros cadastros vamos ao ivés de usar o campo no nome vamos usar o campo codigo, pois ele nunca se repete: mysql> update cadastro1 set sobrenome = “Teresa Casarin Grassato” where codigo ='2'; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> SELECT * FROM cadastro1 WHERE nome LIKE “a%”; +------+----+------------------------+-----+------------+-------+-------+ |codigo|nome| sobrenome |idade| end | estad | cidade| +------+----+------------------------+-----+------------+-------+-------+ | 2 |Anna| Teresa Casarin Grassato|18 | Mato Grosso| SP | Gapira| +------+----+------------------------+-----+------------+-------+-------+ 1 row in set (0.00 sec) Vamos adicionar uma coluna em nossa tabela que ficou faltando a coluna “data”: mysql> ALTER TABLE cadastro1 ADD date CHAR(10) NOT NULL; Veficando: mysql> DESCRIBE cadastro1; +-----------+--------------+------+-----+--------+---------------+ | Field | Type | Null | Key | Default| Extra | +-----------+--------------+------+-----+--------+---------------+ | codigo | int(5) | NO | PRI | NULL | auto_increment| | nome | varchar(40) | YES | | NULL | | | sobrenome | varchar(25) | YES | | NULL | | | idade | varchar(2) | YES | | NULL | | | end | varchar(200) | YES | | NULL | | | estad | varchar(2) | YES | | NULL | | | cidade | varchar(20) | YES | | NULL | | | date | char(10) | NO | | NULL | | +-----------+--------------+------+-----+--------+---------------+ 8 rows in set (0.00 sec) Digamos que o analista,cometeu um erro no projeto e especificou um campo há mais na tabela cadastro1, devemos então apagar este campo, para isto use o comando abaixo, vamos apagar o campo “estad”: mysql> ALTER TABLE cadastro1 DROP estad; Query OK, 4 rows affected (0.03 sec) Records: 4 Duplicates: 0 Warnings: 0 mysql> DESCRIBE cadastro1; +-----------+--------------+------+-----+--------+---------------+ | Field | Type | Null | Key | Default| Extra | +-----------+--------------+------+-----+--------+---------------+ | codigo | int(5) | NO | PRI | NULL | auto_increment| | nome | varchar(40) | YES | | NULL | | | sobrenome | varchar(25) | YES | | NULL | | | idade | varchar(2) | YES | | NULL | | | end | varchar(200) | YES | | NULL | | | cidade | varchar(20) | YES | | NULL | | | date | char(10) | NO | | NULL | | +-----------+--------------+------+-----+--------+---------------+ 7 rows in set (0.00 sec) Pronto sem ele…
)
Deletando em massa você pode deletar vários registros desde que tenham algo em comum entre si, exemplo: mysql> DELETE FROM cadastro1 WHERE codigo ='3'; Query OK, 1 row affected (0.00 sec) mysql> SELECT * FROM cadastro1 ; +-------+-------+-----------+-------+------------+------+-------+ | codigo| nome | sobrenome | idade | end | estad| cidade| +-------+-------+-----------+-------+------------+------+-------+ | 0 | Diego | Grassato | 22 | Mato Grosso| SP |Gapira | | 2 | Anna | Grassato | 20 | Mato Grosso| SP |Gapira | +-------+-------+-----------+-------+------------+------+-------+ 2 rows in set (0.01 sec) Removemos o registro com o codigo igual a 3 que estava armazenado na tabela "cadastro1" ======================================================================================= Visite as páginas dos autores e colabore com mais conteúdo. Bom estudo.