banco de dados curso técnico em informática modalidade integrado instituto federal do sul de...
TRANSCRIPT
Banco de DadosCurso Técnico em Informática
Modalidade Integrado
Instituto Federal do Sul de Minas, Câmpus Pouso Alegre
Professora MsC. Michelle Nery
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
2 Conteúdo Programático
SQL
Introdução a Linguagem SQL
Modelo Exemplo
Instalação e Configuração do MySQL
Gerenciamento de Usuários e seus Privilégios
Comandos da Linguagem DDL (Linguagem de Definição de Dados)
Comando da Linguagem DML (Linguagem de Manipulação de Dados)
Linguagem de Consulta (Query Language)
Comandos Avançados para Consultas
Disposições das Consultas
Subconsultas e Tipos de Junção
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
3 Introdução ao SQL
Uma vez que os modelos de dados conceitual e lógico estão prontos, a próxima etapa do desenvolvimento de um projeto de banco de dados é a implementação do modelo em um SGBD relacional.
Para fazermos a implementação, teremos que utilizar uma linguagem própria para esse tipo de banco de dados, chama LINGUAGEM SQL.
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
4 Introdução ao SQL
SQL (Linguagem de Consulta Estruturada) é uma linguagem destinada a armazenar, manipular e obter dados armazenados em bases de dados relacionais.
A primeira linguagem SQL apareceu em 1974, quando um grupo dentro da IBM desenvolveu o primeiro protótipo de uma base de dados relacional.
A primeira base de dados relacional comercial foi distribuída pela Relational Software (mais tarde passou a chamar-se Oracle).
As duas entidades responsáveis pela sua padronização são ANSI (American National Standards Institute) e ISO (International Standards Organization).
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
5 Introdução ao SQL
Embora a tradução do nome SQL seja “linguagem de consulta”, essa linguagem possui vários recursos, além da consulta a uma base de dados, como por exemplo, meios para a definição da estrutura de dados, para modificação, para inserção, para exclusão de dados, para especificação de restrições de segurança, etc.
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
6 Introdução ao SQL
A linguagem SQL possui subdivisões de comandos.
Essas subdivisões consistem numa separação dos comando pela função que desempenham.
As duas principais subdivisões são:
DDL (Data Definition Language) ou Linguagem de Definição de Dados
DML (Data Manipulation Language) ou Linguagem de Manipulação de Dados
DQL (Data Query Language) ou Linguagem de Consulta de Dados
DCL (Data Control Language) ou (Linguagem de Controle de Dados)
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
7 Introdução ao SQL
DDL (Data Definition Language) ou Linguagem de Definição de Dados: disponibiliza comandos para a definição e criação do esquema de banco de dados; comandos para criação, exclusão, alteração de objetos na base de dados (exemplos de objetos: tabelas, visões, índice, procedimentos armazenados, etc.) comando que especificam direitos de acesso; e comandos que permitem criar restrições de integridade (triggers).
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
8 Introdução ao SQL
DML (Data Manipulation Language) ou Linguagem de Manipulação de Dados: disponibiliza comandos para inserção, exclusão e alteração da base de dados.
Além disso, possui comando que permitem que o usuário ou o programa de aplicação recuperem as informações previamente armazenadas na base de dados.
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
9 Introdução ao SQL
DQL (Data Query Language) Linguagem de Consulta de Dados, uma das importante dentre o conjunto de linguagens, pois consultas são realizadas a todo instante. O comando que é utilizado pelo DQL é o SELECT. Coloquei o SELECT também em DML pois algumas literaturas constam que SELECT também é DML.
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
10 Introdução ao SQL
DCL (Data Control Language) ou (Linguagem de Controle de Dados) é uma linguagem que disponibiliza comandos para a controlar o acesso aos dados em um banco de dados.
A linguagem pode permitir ou restringir os usuários a executar as ações ou comandos das outras linguagens SQL definição e criação do esquema de banco de dados.
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
11 Implementação do Banco de Dados
A primeira ação que devemos fazer é selecionar o SGDB que será utilizado para criar a base de dados e suas respectivas tabelas.
O SGDB selecionado foi o MuSQL. A escolha se baseia no fato de ser muito utilizado e gratuito.
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
12 Introdução ao MySQL
O MySQL é um sistema de gerenciamento de banco de dados (SGBD), que utiliza a linguagem SQL (Linguagem de Consulta Estruturada, do inglês Structured Query Language) como interface.
É atualmente um dos bancos de dados mais populares, segundo a revista DB-Engines, com mais de 10 milhões de instalações pelo mundo.
Entre os usuários do banco de dados MySQL estão: NASA, Friendster, Banco Bradesco, Dataprev, HP, Nokia, Sony, Lufthansa, U.S. Army, U.S. Federal Reserve Bank, Associated Press, Alcatel, Slashdot, Cisco Systems, Google e outros.
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
13 Introdução ao MySQL
MySQL começou em 1995, com o nome de MySQL AB.
Seus fundadores são Michael Widenus, David Axmark e Allan Larsson.
Durante várias anos versões foram desenvolvidas para acrescentar funcionalidades.
A versão mais atual é MySQL 5.7.1 (teste).
O MySQL foi vendido pela Sun Microsystem, por 1 bilhão de dólares em 2008.
Em 2010, a Oracle Corporation, maior empresa de banco de dados do mundo, comprou a Sun Microsystems por 7 bilhões de dólares, levando junto o MySQL e também o Java.
Mesmo após a aquisição pela Oracle, o MySQL continua sendo uma sistema open source (código livre).
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
14 Download e Instação do MySql
Com alguns já devem saber , o phpMyAdmin é um script em PHP que tem por finalidade gerenciar o banco de dados MySQL. Com ele, a administração do banco fica super fácil e intuitiva (só no final).
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
15 Download e Instação do MySql Para executar o phpMyAdmin é necessário um servidor Web.
No laboratório, o servidor Web instalado é o Apache, gratuito, open source.
As versões do Apache para Windows se encontram nesse site http://www.devmedia.com.br/instalacao-do-wampserver/25871
Existem várias distribuições do pacote Apache para Windows, uma das mais utilizadas é WampServer.
Esse programa, na verdade, possui um conjunto de programas necessários para a implementação de uma páginas Web. Dentre esse conjunto de programas, vamos utilizar os seguintes:
Apache: servidor Web.
MySQL na versão mais recente 5.6.17 gerenciador do banco de dados MySQL.
PHPMyAdmin IDE para administração do MySQL
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
16 Instalação do MySQL
1. Execute o arquivo que foi feito o download.
2. A primeira tela mostra os programas que serão instalados, dentre eles, o que precisamos.
3. Clique em Next.
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
17 Instalação do MySQL
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
18 Instalação do MySQL
4. Aceite os termos de instalação.
5. Clique em Next.
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
19 Instalação do MySQL
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
20 Instalação do MySQL
6. Aceite os termos de instalação.
7. Clique em Next.
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
21 Instalação do MySQL
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
22 Instalação do MySQL
8. Se quiser adicione atalhos na Área de Trabalho e na barra de inicialização rápida.
9. Clique em Next.
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
23 Instalação do MySQL
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
24 Instalação do MySQL
10.Clique em Install.
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
25 Instalação do MySQL
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
26 Instalação do MySQL
11.Aguarde a instalação.
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
27 Instalação do MySQL
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
28 Instalação do MySQL
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
29 Instalação do MySQL
12.Selecione o navegador padrão.
13.Clique em abrir.
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
30 Instalação do MySQL
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
31 Instalação do MySQL
14.O localhost será o nome do seu servidor.
15.Os usuários poderão se logar por meu do padrão de endereço escrito.
16.Essas ações não precisam ser alteradas.
17.Clique em Next.
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
32 Instalação do MySQL
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
33 Instalação do MySQL
18.Clique em Finish.
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
34 Instalação do MySQL
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
35 Instalação do MySQL
O ícone do servidor WampServer aparecerá na sua barra de tarefas na cor laranja.
Altere a linguagem para português clicando com o botão direito do mouse sobre o ícone.
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
36 Instalação do MySQL
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
37 Instalação do MySQL
Clicar em Colocar online.
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
38 Instalação do MySQL
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
39 Instalação do MySQL
O seguinte erro poderá aparecer.
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
40 Instalação do MySQL
Vamos resolver esse pequeno probleminha:
Clique com o BOTÃO esquerdo do mouse sobre o ícone do WampServer, vá até a pasta APACHE e clique em HTTPD.CONF
41 Instalação do MySQL
Vamos resolver esse pequeno probleminha: Após abrir o arquivo, procure as linhas com a seguinte
descrição (algumas versões pode ser diferente).Listen 80
ServerName localhost:80
Modifique as mesmas adicionando “80”, consequentemente ficará assim:
Listen 8080
ServerName localhost:8080
Em seguida salve o arquivo e feche-o. Após estas configurações reinicie todos os serviços.
Clique com o botão esquerdo do mouse sobre o ícone do WampServer e clique em Reiniciar todos os serviços.
Pronto, seu WampServer está funcionando corretamente.Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
42 Instalação do MySQL
Após o passo acima, tudo estará resolvido, tente acessar a página local do WampServer adicionando 8080 no seu navegador utilizando o caminho: http://localhost:8080/
Para acessar o PHPMYADMIN também deverá adicionar 8080 no seu navegador utilizando o caminho: http://localhost:8080/phpmyadmin/
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
43 Iniciando com o MySQL
Vamos começar via CONSOLE.
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
44 Iniciando com o MySQL
A principio não existe uma senha. Só dê enter.
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
45 Iniciando com o MySQL
Para logar no MySQL é necessário um usuário.
O usuário principal é o root, a principio sem senha.
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
46
Linguagem de Controle de Dados - DCL
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
47 Gerenciamento de Usuário no MySQL - DCL
Todos bancos de dados possui um conjunto de usuários de banco de dados.
Os usuários possuem objetos de banco de dados (por exemplo, tabelas), e podem conceder privilégios nestes objetos para outros usuários controlando, assim, quem pode acessar qual objeto.
Iremos ver como criar e gerenciar usuários, e introduzir o sistema de privilégios, baseados no MySQL.
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
48 Gerenciamento de Usuário no MySQL - DCL
Criando Usuário
Para criar um usuário deve ser utilizado o comando SQL CREATE USER: CREATE USER ‘michellenery'@'localhost' IDENTIFIED BY ‘123456';
Nome do usuário: michellenery
Senha: 123456
Caso você queira criar um usuário sem senha, o que torna o sistema inseguro, você pode digitar o comando até o nome do usuário e o servidor.
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
49 Gerenciamento de Usuário no MySQL - DCL
Alterando a Senha do Usuário
Mesmo que você defina ou não uma senha ao criar um usuário, você pode alterar a senha dele posteriormente, através do comando
SET PASSWORD FOR ‘michellenery’@’localhost’ = PASSWORD(‘1qaz@wsx');
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
50 Gerenciamento de Usuário no MySQL - DCL
Excluindo o Usuário
Para remover um usuário existente deve ser utilizado o comando DROP USER:
DROP USER ‘michellenery'@'localhost';
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
51 Gerenciamento de Usuário no MySQL - DCL
Listar os Usuários
Para listar todos os usuários inseridos no MySQL deve ser utilizado o comando
SELECT * FROM mysql.user;
Para listar qual o usuário está logado no momento deve ser utilizado o comando
SELECT CURRENT_USER();
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
52 Gerenciamento de Usuário no MySQL - DCL
Trocar de Usuário
Para trocar de usuário, basta entra no prompt MSDOS, entrar na pasta bin que fica dentro da pasta onde está o MySQL (c:\wamp\bin\mysql\mysql5.6.17\bin) e digitar o comando
MYSQL –u michellenery –p
Será solicitado a senha daquele usuário.
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
53 Gerenciamento de Usuário no MySQL - DCL
Sair do Usuário
Para sair do usuário, basta digitar o comando
quit;
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
54 Gerenciamento de Usuário no MySQL - DCL
Privilégios
O sistema de privilégios do MySQL garante que todos usuários possam fazer exatamente as operações que lhe são permitidas.
Quando você conecta a um servidor MySQL, sua identidade é determinada pela máquina de onde você conectou e o nome de usuário que você especificou.
O sistema concede privilégios de acordo com sua identidade e com o que você deseja fazer.
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
55 Gerenciamento de Usuário no MySQL - DCL
Privilégios
O comando GRANT é usado pelos administradores para adicionar novas permissões a um usuário de banco de dados.
Ele tem uma sintaxe muito simples, definida como se segue:
GRANT [privilege]
ON [object]
TO [user]
[WITH GRANT OPTION]
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
56 Gerenciamento de Usuário no MySQL - DCL
Privilégio pode ser a palavra-chave ALL (para conceder uma ampla variedade de permissões) ou uma permissão de banco de dados específico ou um conjunto de permissões.
Objeto pode ser qualquer objeto de banco de dados. As opções de privilégios válidos irá variar de acordo com o tipo de objeto de banco de dados que incluem nesta cláusula.
O usuário pode ser qualquer usuário do banco de dados.
Se você incluir a cláusula opcional WITH GRANT OPTION no final do comando GRANT, você não só conceder o usuário especificado as permissões definidas na instrução SQL, mas também dar ao usuário a capacidade de conceder essas mesmas permissões para outros usuários do banco de dados.
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
57 Gerenciamento de Usuário no MySQL - DCL
Privilégios
Abaixo a lista de privilégios.
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
58
Privilégio Coluna Contexto
ALTER Alter_priv tabelas
DELETE Delete_priv tabelas
INDEX Index_priv tabelas
INSERT Insert_priv tabelas
SELECT Select_priv tabelas
UPDATE Update_priv tabelas
CREATE Create_priv banco de dados, tabelas, ou índices
DROP Drop_priv banco de dados ou tabelas
GRANT Grant_priv banco de dados ou tabelas
REFERENCES References_priv banco de dados ou tabelas
CREATE TEMPORARY TABLES Create_tmp_tabela_priv administração do servidor
EXECUTE Execute_priv administração do servidor
FILE File_priv acessa a arquivos no servidor
LOCK TABLES Lock_tabelas_priv administração do servidor
PROCESS Process_priv administração do servidor
RELOAD Reload_priv administração do servidor
REPLICATION CLIENT Repl_client_priv administração do servidor
REPLICATION SLAVE Repl_slave_priv administração do servidor
SHOW DATABASES Show_db_priv administração do servidor
SHUTDOWN Shutdown_priv administração do servidor
SUPER Super_priv administração do servidor
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
59 Gerenciamento de Usuário no MySQL - DCL
Restrições dos Privilégios
Os únicos privilégios que você pode especificar para uma tabela são SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, GRANT, INDEX e ALTER.
Os únicos privilégios que você pode especificar para uma coluna (isto é, quando você usar uma cláusula column_list) são SELECT, INSERT e UPDATE.
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
60 Gerenciamento de Usuário no MySQL - DCL
Objetos
Uma vez informados os privilégios do usuário, você deverá indicar o nível ao qual o privilégio se aplica, sendo possível especificar três níveis:
Níveis Descrição
*.* Privilégio global
db.* Qualquer tabela do banco db
db.tb
Apenas a tabela tb do banco de dados db. Para especificar
apenas algumas colunas de uma determinada tabela, estas deverão ser listadas ao lado do
privilégio:privilégio (coluna, coluna... )
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
61 Gerenciamento de Usuário no MySQL - DCL
Usuários
Depois do nível você deverá indicar o usuário, ou a lista de usuários, para os quais os privilégios se aplicam.
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
62 Gerenciamento de Usuário no MySQL - DCL
Criando Usuário e/ou Criando/Alterando Privilégios
Exemplo:
É criado um usuário com o nome teste
Pode se conectar somente do host onde o servidor está em execução (localhost)
O usuário só poderá fazer SELECT nas colunas nome e idade da tabela pessoa, que se encontra no banco de dados rh.
A senha do usuário é 12345.
GRANT SELECT (nome, idade) ON rh.pessoa TO ‘teste’@’localhost’ IDENTIFIED BY "12345";
Obs: a parte em vermelho cria o usuário, quando você a retira, você altera os privilégios do usuário em questão.
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
63 Gerenciamento de Usuário no MySQL - DCL
Criando Usuário e/ou Alterando Privilégios
Para listar os privilégios deste usuário utilize o comando:
mysql>SHOW GRANTS FOR ‘teste’@’localhost’;
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
64 Gerenciamento de Usuário no MySQL - DCL
Excluindo Privilégios
Para remover um privilégio do usuário utilize o comando REVOKE mostrado abaixo:
REVOKE privilégio, privilégio, ... ON {*.* | db.* | db.tabela}
FROM usuário, usuário, ...
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
65 Lista de Exercícios
Crie 5 usuários diferentes no MySQL.
Altere a senha do último criado.
Remova o primeiro usuário
Logar em um dos usuários e tente criar um banco de dados com o comando CREATE DATABASE nomebanco.
Perceba que não é possível criar um banco de dados, porque o usuário não tem esse privilégio.
Logar com o root e dar permissão a esse usuário de criar um banco de dados.
Mostrar os privilégios desse usuário.
Logar com o usuário.
Criar um banco de dados.
Remova o privilégio adicionado usando o comando REVOKE, com o usuário root.
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
66 Lista de Exercícios
Criar um esquema de permissão para que outro usuário possa deletar o banco de dados. Testar os comandos necessários e imprimir o resultado num documento.
DROP DATABASE nomedobanco;
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
67 Lista de Exercícios
O que faz os privilégios abaixo?
GRANT select ON blog.pessoas TO ‘michellenery’@’localhost’;
GRANT all ON blog.* TO ‘michellenery’@’localhost’ WITH GRANT OPTION;
GRANT select, insert, update ON blog.* TO ‘michellenery’@’localhost’;
GRANT all ON *.* TO ‘michellenery’@’localhost’ WITH GRANT OPTION;
GRANT select ON blog.* TO ‘michellenery’@’localhost’ IDENTIFIED BY "123456";
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
68 Lista de Exercícios
Dado o banco de dados abaixo denominado locadora:
Qual o comando para que o usuário ‘ciclano’ possa apenas selecionar as colunas cpfCliente e nomeCliente da tabela Cliente?
Qual o comando para que o usuário ‘root’ possa fazer todas as ações nas tabelas e banco de dados e inclusive repassar os privilégios a outro usuário?
Qual o comando para que os usuários ‘ciclano’ e ‘beltrano’ possam selecionar qualquer coluna da tabela Filme?
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
69
Linguagem de Definição de Dados - DDL
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
70 Linguagem de Definição de Dados no MySQL - DDL
Linguagem de definição de dados (LDD ou DDL, do Inglês Data Definition Language) é uma linguagem de computador usada para a definição de estrutura de dados.
Uma vez compilados, os parâmetros DDL são armazenados num conjunto de arquivos denominado dicionário de dados (ou catálogo).
O dicionário de dados contém os metadados (dados a respeito das estruturas de armazenamento).
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
71 Linguagem de Definição de Dados no MySQL - DDL
O SGBD sempre consulta os metadados a cada operação sobre o banco de dados.
Por exemplo, um determinado programa precisa recuperar alguns campos (nome, CPF) de um arquivo de clientes.
O SGBD irá verificar se os campos "nome" e "CPF" estão definidos para este arquivo.
O interpretador DDL processa os comandos alimentados pelos DBAs na definição dos esquemas.
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
72 Linguagem de Definição de Dados no MySQL - DDL
Os comandos básicos da DDL são poucos:
CREATE: cria um esquema de banco de dados.
DROP: apaga um esquema de banco de dados.
Outros comandos DDL:
CREATE TABLE
CREATE INDEX
CREATE VIEW
ALTER TABLE
ALTER INDEX
DROP INDEX
DROP VIEW
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
73 Linguagem de Definição de Dados no MySQL - DDL
Modelo Exemplo:
O modelo relacional utilizado nos exemplos será descrito na figura abaixo:
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
74
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
75 Modelo Relacional para Locadora de Filmes
Cliente (codigocliente: inteiro, cpfCliente: caracter(11), nomeCliente: caracter(200), cidadeCliente: caracter(50), ufCliente: caracter(2), dataCadastroCliente:data)
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
76 Modelo Relacional para Locadora de Filmes
Categoria (codigoCategoria: inteiro, nomeCategoria: caracter(20))
Classe (codigoClasse: inteiro, nomeClasse: caracter(20), precoClasse: real)
Titulo (codigoTitulo: inteiro, nomeTitulo: caracter(50), anoTitulo: numérico(4), codigoCategoria: inteiro, codigoClasse: inteiro)
codigoCategoria referencia Categoria
codigoClasse referencia Classe
Filme (codigofilme: inteiro, codigoTitulo: inteiro, nomeDistribuidor: caracter (20))
codigoTitulo referencia Titulo
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
77 Modelo Relacional para Locadora de Filmes
EmprestimoDevolucao (codigoCliente: inteiro, codigoFilme: inteiro, dataEmprestimo: data, dataDevolucaoPrevista: data, dataDevolucaoEfetiva: data, valorMulta: real)
codigoCliente referencia Cliente
codigoFilme referencia Filme
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
78 Modelo Relacional para Locadora de Filmes
Esse é um modelo bem clássico e didático.
A base de dados é uma locadora de filmes.
Locadora de Filmes
Possui vários CLIENTES
Possui vários TÍTULOS de FILMES
Para cada TÍTULO possuem vários DVD´s que contém o FILMES.
Os FILMES pertencem a uma categoria (por exemplo, romance, policial, terror, etc.)
Os FILMES possui uma classe, que define se o filme é lançamento ou catálogo e define o preço da locação.
Vários CLIENTES podem pegar um FILME emprestado.
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
79
Linguagem de Definição de Dados no MySQL - DDLCriar Banco de dados
Remover Banco de Dados
Usar Banco de Dados
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
80 Linguagem de Definição de Dados no MySQL - DDL
Comando SQL para criar um esquema de banco de dados:
CREATE DATABASE nome do banco de dados;
Comando SQL para remover um esquema de banco de dados:
DROP DATABASE nome do banco de dados;
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
81 Linguagem de Definição de Dados no MySQL - DDL
Comando SQL para criar o esquema de banco de dados Locadora:
CREATE DATABASE Locadora;
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
82 Linguagem de Definição de Dados no MySQL - DDL
Pode-se criar tantas bases de dados quantas forem necessárias o SGDB MySql.
Logo, para usar uma base de dados específica, é necessário definir qual a base de dados.
Para isso usa-se o comando USE.
O comando indica que os comandos subsequentes irão ser executados sobre a base de dados escolhida.
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
83 Linguagem de Definição de Dados no MySQL - DDL
Comando SQL para especificar um banco de dados a ser usado:
USE Locadora;
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
84
Linguagem de Definição de Dados no MySQL - DDLCriar Tabelas
Remover Tabelas
Alterar Tabelas
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
85 Linguagem de Definição de Dados no MySQL - DDL
Comando para criar uma nova tabela no banco de dados:
CREATE TABLE;
a nova tabela não possui dados
Comando para remover uma tabela e todas as suas instâncias do bando de dados:
DROP TABLE;
Comando para alterar uma tabela do bando de dados:
ALTER TABLE;
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
86 Implementação: Gerenciamento de Definição de Dados no MySQL - DDL
Depois de criado o banco de dados, é necessário criarmos as tabelas para essa base de dados:
CREATE TABLE Nome da Tabela (
Nome do Atributo Tipo de Dado [NOT NULL] [DEFAULT(Expressão Padrão)],
Nome do Atributo Tipo de Dado [NOT NULL] [DEFAULT(Expressão Padrão)],
...
[Demais restrições]
);
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
87 Implementação: Gerenciamento de Definição de Dados no MySQL - DDL
O que está entre colchetes na sintaxe acima significa opcional.
O tipo de dados de um atributo vai depender do SGDB escolhido. No caso do SGDB MySQL, os principais tipos são:
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
88Tipos de Dados
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
89 Linguagem de Definição de Dados no MySQL - DDL
Tipos numéricos Inteiros:
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
90 Linguagem de Definição de Dados no MySQL - DDL
Tipos numéricos booleanos:
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
91 Linguagem de Definição de Dados no MySQL - DDL
Tipos numéricos decimais:
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
92 Linguagem de Definição de Dados no MySQL - DDL
Tipos de Data:
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
93 Linguagem de Definição de Dados no MySQL - DDL
Tipos de caracteres:
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
94 Linguagem de Definição de Dados no MySQL - DDL
Diferença de armazenamento entre os tipos Char e VarChar:
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
95 Linguagem de Definição de Dados no MySQL - DDL
Tipos de Listas:
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
96 Linguagem de Definição de Dados no MySQL - DDL
Mais usados:
Integer, Int: número inteiro
Float: número pequeno em vírgula flutuante de precisão simples.
xReal, Double: número em vírgula flutuante de dupla precisão.
Date: tipo data, armazena uma data.
DateTime: Combinação de data e hora.
TimeStamp: Combinação de data e hora.
Time: armazena uma hora.
Char(n): armazena uma cadeia de caracteres fixa.
VarChar(n): armazena uma cadeia de caracteres variável.
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
97
Restrições de Integridade
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
98 Linguagem de Definição de Dados no MySQL - DDL
Restrição NULL
Implica que o atributo adicionado a tabela poderá receber valor nulo.
Padrão quando não se restringe.
Restrição NOT NULL
Implica que o atributo adicionado na tabela nunca poderá receber um valor nulo.
Restrição DEFAULT
Indica um valor a ser atribuído ao atributo caso o usuário não especifique algum valor.
A restrição DEFAULT não se aplica aos atributos chaves primárias.
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
99 Linguagem de Definição de Dados no MySQL - DDL
Existe ainda outra quatro restrições, conhecidas como constrains, que podem ser aplicadas aos atributos de uma tabela, segue:
UNIQUE: é utilizada para manter os dados inseridos com valores únicos. Se um campo estiver definido com a restrição UNIQUE nenhum valor repetido poderá ser digitado para este campo. Pode-se ter várias restrições UNIQUE para uma tabela, mas para cada atributo que possui essa restrição só pode-se inserir o valor nulo (null) uma única vez.
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL - DDL
Existe ainda outra quatro restrições, conhecidas como constrains, que podem ser aplicadas aos atributos de uma tabela, segue:
CHECK: permite criar regra que verifica se o valor inserido para o atributo é um valor permitido para o atributo.
100
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL - DDL
Existe ainda outra quatro restrições, conhecidas como constrains, que podem ser aplicadas aos atributos de uma tabela, segue:
PRIMARY KEY (PK): utilizado para definir a chave primária da tabela. Não pode se repetir e não aceita valor nulo.
101
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL - DDL
Existe ainda outra quatro restrições, conhecidas como constrains, que podem ser aplicadas aos atributos de uma tabela, segue:
FOREIGN KEY (FK): Implementa o conceito de chave estrangeira e garante a integridade referencial. O conteúdo de um campo que tem uma FK deve se referenciar a outro campo que possua ou uma chave primária ou uma constraint UNIQUE. Atributos com a restrição FOREIGN KEY permitem o valor nulo.
102
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL - DDL
Constraint de PRIMARY KEY:
CONSTRAINT Nome da Constraint PRIMARY KEY (atributo que recebe a constraint);
Constraint de FOREIGN KEY:
CONSTRAINT NomeConstraint FOREIGN KEY (atributo que recebe a constraint) REFERENCES Nome da Tabela Referenciada (Nome do Atributo Referenciado);
[ON DELETE CASCADE]
[ON UPDATE CASCADE]
103
CASCADE: Se a linha da tabela que tem a PK for apagada/modificada, a linha da tabela que tem a FK também será.
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL - DDL
Constraint de UNIQUE:
CONSTRAINT Nome da Constraint UNIQUE (atributo que recebe a constraint);
Constraint de CHECK:
CONSTRAINT NomeConstraint CHECK (regra);
104
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL - DDL
105
CUIDADO!O nome da constraint é o nome que se dá para a restrição. O nome da constraint não muda o nome do atributo.
Nome sugerido para a constraint: abreviação da constraint underline nome da tabela que está sendo criada a constraint underline nome do campo que recebe a constraint. Exemplo: pk_tbCliente_codigoCliente
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL - DDL
Pesquise na internet um exemplo para cada uma das restrições citadas acima.
106
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Criando as Tabelas107
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL – DDL
CREATE TABLE tbCliente
(
codigoCliente INT,
cpfCliente CHAR(11) NOT NULL,
nomeCliente VARCHAR(100) NOT NULL,
dataCadastroCliente DATE,
cidadeCliente VARCHAR(50),
ufCliente CHAR(2) DEFAULT ‘MG’,
CONSTRAINT pk_tbCliente_codigoCliente PRIMARY KEY (codigoCliente),
CONSTRAINT un_tbCliente_cpfCliente UNIQUE (cpfCliente)
);
108
Valores não numéricos, como caractere, data e hora devem estar
entre aspas simples.
A última linha não tem vírgula.
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL - DDL
CREATE TABLE tbCategoria
(
codigoCategoria INT,
nomeCategoria VARCHAR(30) NOT NULL,
CONSTRAINT pk_tbCategoria_codigoCategoria PRIMARY KEY (codigoCategoria)
);
109
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL - DDL
CREATE TABLE tbClasse
(
codigoClasse INT,
nomeClasse VARCHAR(30) NOT NULL,
precoClasse NUMERIC(4,2) NOT NULL,
CONSTRAINT pk_tbClasse_codigoClasse PRIMARY KEY (codigoClasse),
CONSTRAINT ck_tbClasse_nomeClasse CHECK (nomeClasse IN (‘Lançamento’,’Catálogo’))
);
110
Números com 4 dígitos e 2 casas
decimais.
Só aceita os valores
‘Lançamento’ ou ‘Catálogo’).
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL - DDL
CREATE TABLE tbTitulo
(
codigoTitulo INT,
nomeTitulo VARCHAR(80) NOT NULL,
ano NUMERIC(4) NOT NULL,
codigoCategoria INT,
codigoClasse INT,
CONSTRAINT pk_tbTitulo_codigoTitulo PRIMARY KEY (codigoTitulo),
CONSTRAINT fk_tbTitulo_codigoCategoria FOREIGN KEY (codigoCategoria) REFERENCES tbCategoria (codigoCategoria) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT fk_tbTitulo_codigoClasse FOREIGN KEY (codigoClasse) REFERENCES tbClasse (codigoClasse) ON DELETE CASCADE ON UPDATE CASCADE
);
111
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL - DDL
CREATE TABLE tbFilme
(
codigoFilme INT,
nomeDistribuidor VARCHAR(40) NOT NULL,
codigoTitulo INT,
CONSTRAINT pk_tbFilme_codigoFilme PRIMARY KEY (codigoFilme),
CONSTRAINT fk_tbFilme_codigoTitulo FOREIGN KEY (codigoTitulo) REFERENCES tbTitulo (codigoTitulo) ON DELETE CASCADE ON UPDATE CASCADE
);
112
Linguagem de Definição de Dados no MySQL - DDL
CREATE TABLE tbEmpDev
(
codigoCliente INT,
codigoFilme INT,
dataEmprestimo DATE NOT NULL,
dataDevolucaoPrevista DATE NOT NULL,
dataDevolucaoEfetiva DATE,
valorMulta NUMERIC(4,2) DEFAULT 0,
CONSTRAINT pk_tbEmpDev_codigoCliente_codigoFilme_dataEmprestimo PRIMARY KEY (codigoCliente, codigoFilme, dataEmprestimo),
CONSTRAINT fk_tbEmpDev_codigoCliente FOREIGN KEY (codigoCliente) REFERENCES tbCliente (codigoCliente) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT fk_tbEmpDev_codigoFilme FOREIGN KEY (codigoFilme) REFERENCES tbFilme (codigoFilme) ON DELETE CASCADE ON UPDATE CASCADE
);Instituto Federal do Sul de Minas, câmpus Pouso Alegre
113
Chave primária composta (os atributos
devem estar entre parênteses e
separados por vírgula).
Atributos que fazem parte da chave primária e
individualmente são chaves estrangeiras.
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL - DDL
Os campos chaves podem ser incrementados automaticamente.
Para isso, o atributo primeiramente deverá ser numérico e deverá ser usado o comando AUTO_INCREMENT.
Exemplo:
CREATE TABLE tbCategoria
(
codigoCategoria INT AUTO_INCREMENT,
nomeCategoria VARCHAR(30) NOT NULL,
CONSTRAINT pk_tbCategoria_codigoCategoria PRIMARY KEY (codigoCategoria)
);
114
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Excluindo uma Tabela115
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL - DDL Para excluir um tabela, utiliza-se o comando DROP.
Quando você exclui uma tabela, todos os dados que foram armazenados nela também será excluído.
Sintaxe:
DROP TABLE nome da tabela;
Exemplo:
DROP TABLE tbEmpDev;
Não é possível excluir uma tabela que tenha a sua chave primária (PK) sendo referenciada por outra tabela (FK). Por exemplo, você não pode excluir a tabela tbClasse porque o codigoClasse é uma chave estrangeira (FK) em tbTitutlo. Nesse caso, temos que primeiramente excluir a constraint de FKm para depois excluirmos a tabela. Para excluirmos uma constraint de FK, usamos o comando ALTER.
116
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Renomear uma Tabela117
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL - DDL
Para renomear uma tabela, utiliza-se o comando RENAME. RENAME TABLE nome_tabela TO novo_nome_tabela;
118
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Mostrando as Estruturas das Tabelas e Banco de Dados119
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL - DDL
Comando para mostrar todos os bancos criados no MySQL:
SHOW DATABASES;
Comando para mostrar todos as tabelas de uma banco de dados: (não se esqueça do use banco de dados)
SHOW TABLES;
O comando para você visualizar a estrutura de uma tabela é
DESCRIBE nome da tabela;
120
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL - DDL
Mostrar todas as constraints do banco de dados:
SELECT * FROM information_schema.table_constraints WHERE constraint_schema = ‘nome do banco de dados'
121
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Exercícios
Crie o banco de dados Venda e as seguintes tabelas abaixo:
Cliente (cpfCliente: carater(11), nomeCliente caracter(100), enderecoCliente caracter(100), bairroCliente: caracter(30), cidadeCliente caracter(50), codigoEstado: numérico, cepCliente caracter(9), telefoneCliente caracter(14))
codigoEstado referencia Estado
Estado(codigoEstado: numérico autoincremento, estado caracter (2))
Check estado = ‘AC’, ‘AM’ ...
122
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Exercícios
Produto (codigoProduto: numérico autoincremento, nomeProduto caracter(50), descricaoProduto: caracter(200), precoProduto: float (5,2))
Pedido (codigoPedido: numérico autoincremento, tipoPedido: caracter(30), dataPedido: data, cpfCliente: caracter(11),)
cpfCliente referencia Cliente
ItemPedido (codigoItem: numérico autoincremento, codigoProduto: numérico, quantidadeItem: numérico, valorUnitario: float(5,2), codigoPedido: numérico)
codigoProduto referencia Produto
codigoPedido referencia Pedido
123
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Alterando Tabelas124
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL - DDL
O comando ALTER permite alterar a estrutura de uma tabela.
Com esse comando podem-se adicionar atributos, excluir atributos, alterar o tipo ou o tamanho do atributo, adicionar ou excluir constraints, etc.
Adicionar
Modificar
Alterar
Excluir
125
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL - DDL
Adicionar Atributo na Tabela
Remover Atributo da Tabela
126
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL - DDL
Comando para adicionar um novo atributo na tabela.
ALTER TABLE nome da tabela
ADD nome_atributo tipo_dado [NOT NULL] [DEFAULT(Expressão Padrão)];
Exemplo:
ALTER TABLE tbCliente
ADD celularCliente VARCHAR(14) NOT NULL;
127
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL - DDL
Comando para adicionar um novo atributo na tabela antes ou depois de um determinado atributo.
ALTER TABLE nome da tabela
ADD atributo TIPO[TAMANHO] [FIRST] [AFTER] nome do atributo de referência;
Exemplo:
ALTER TABLE tbCliente
ADD celularCliente VARCHAR(14) NOT NULL AFTER nomeCliente;
128
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL - DDL
Comando para adicionar mais um de atributo na tabela antes ou depois de um determinado atributo.
ALTER TABLE nome da tabela
ADD atributo1 TIPO[TAMANHO] [FIRST] [AFTER] nome do atributo,
ADD atributo2 TIPO[TAMANHO] [FIRST] [AFTER] nome do atributo;
129
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL - DDL
O comando DROP permite excluir um atributo da tabela.
ALTER TABLE nome da tabela
DROP nome do atributo que deseja excluir;
Exemplo:
ALTER TABLE tbCliente
DROP celularCliente;
130
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL - DDL
Alterar no nome do atributo
Modificar o tipo do atributo
Modificar o tamanho do atributo
Modificar o Default do atributo
Modificar o atributo para NULL ou Not NULL
Adicionar ou Remover uma constraint.
PRIMARY KEY
FOREIGN KEY
UNIQUE
CHECK
131
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL - DDL
Alterar no nome do atributo:
ALTER TABLE nome_tabela
CHANGE nome_atributo novo_nome_atributo tipo_dado [NOT NULL] [DEFAULT(Expressão Padrão)];
Exemplo:
ALTER TABLE tbCliente CHANGE cidadeCliente cidCliente VARCHAR(50) NOT NULL;
132
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL - DDL
Modificando o tamanho do atributo:
ALTER TABLE tbCliente
MODIFY nomeCliente VARCHAR(150);
Modificando ou adicionando um Default:
ALTER TABLE tbCliente
ALTER COLUMN ufCliente SET DEFAULT ‘SP’;
Excluindo o DEFAULT do atributo:
ALTER TABLE tbCliente
ALTER COLUMN ufCliente DROP DEFAULT;
133
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL - DDL
Modificando o NULL ou NOT NULL:
ALTER TABLE tbCliente
MODIFY nomeCliente VARCHAR(150) NOT NULL;
134
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL - DDL
Excluindo uma constraint de PRIMARY KEY;
ALTER TABLE tbCliente
DROP PRIMARY KEY;
A chave primária não pode ser auto incremento
Adicionado uma constraint de PRIMARY KEY;
ALTER TABLE tbCliente
ADD CONSTRAINT pk_tbCliente_codigoCliente PRIMARY KEY (codigoCliente);
135
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL - DDL
Excluindo uma constraint de FOREIGN KEY;
ALTER TABLE tbTitulo
DROP FOREIGN KEY fk_tbTitulo_codigoClasse;
Adicionado uma constraint de FOREIGN KEY;
ALTER TABLE tbTitulo
ADD CONSTRAINT fk_tbTitulo_codigoClasse FOREIGN KEY (codigoClasse) REFERENCES tbClasse(codigoClasse) ON DELETE CASCADE ON UPDATE CASCADE;
136
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL - DDL
Excluindo uma constraint UNIQUE:
ALTER TABLE tbCliente
DROP INDEX un_tbcliente_cpfCliente;
Adicionado uma constraint UNIQUE:
ALTER TABLE tbTitulo
ADD CONSTRAINT un_tbCliente_cpfCliente UNIQUE (cpfCliente);
137
O MySQL considera um restrição UNIQUE como INDEX.
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL - DDL
Excluindo uma constraint de CHECK;
Adicionado uma constraint de CHECK;
ALTER TABLE tbClasse
ADD CONSTRAINT ck_tbClasse_nomeClasse CHECK (nomeClasse IN (‘Lançamento’, ‘Catálogo’));
138
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Atenção
Segundo um fórum, a constraint CHECK no mysql não funciona.
139
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Exercício
Insira um campo na tabela Cliente do banco de dados Vendas, denominado rgCliente, logo após o cpfCliente.
Renomeie o campo tipoPedido da tabela Pedido para tipoPagamentoPedido.
Adicione Default = 1 para quantidadeItem da tabela ItemPedido
Coloque todos os campos das tabelas como não nulos.
140
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Exercício
Coloque os atributos tbClientecodigoCliente, tbCategoracodigoCategora, tbClassecodigoClasse, tbTitulocodigoTitulo, tbFilmecodigoFilme como AUTO_INCREMENT.
Você precisará desabilitar as FOREIGN KEY. Use o comando: SET FOREIGN_KEY _CHECKS = 0;
Para habilitar use o comando SET FOREIGN_KEY _CHECKS = 1;
Para verificar o status das FOREIGN use o comando SELECT @@FOREIGN_KEY_CHECKS;
141
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL - DDLÍndices
142
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL - DDL
Quando executamos uma operação de SELECT sobre uma tabela, podemos filtrar um ou vários campos.
O gerenciador do banco efetua uma ação chamada “TABLE SCAN”.
Essa ação consiste em percorrer toda a tabela, avaliando cada registro. Caso o registro atenda às condições definidas no filtro, ele é incluído no conjunto de retorno, senão, é apenas desconsiderado.
143
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL - DDL
144
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL - DDL
Para melhorar essas consultas, utilizamos ÍNDICES, objetos do banco de dados que facilitam a organização e consulta de uma tabela, “indexando-a” por uma de suas colunas.
Quando criamos um índice em uma coluna, o gerenciador do banco ordena a tabela por essa coluna.
Na busca, a tabela sofre divisões sucessivas até que o registro desejado seja localizado.
145
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL - DDL
Inicialmente a tabela é “dividida” na metade, onde os registros com os menores valores no campo indexado ficam na parte superior, e os registros com os maiores valores ficam na parte inferior.
O gerenciador verifica então em que parte está contido o valor pesquisado, se na primeira metade ou na segunda.
Isso é facilmente feito comparando o valor pesquisado com o do registro intermediário. Se o valor pesquisado for maior que o do registro intermediário, o registro desejado encontra-se na segunda metade, caso contrário, encontra-se na primeira metade.
146
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL - DDL
147
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL - DDL
Um índice é definido sobre um atributo para melhorar o desempenho das consultas.
Índices PRIMARY são índices únicos, e a indexação é feita pelo atributo que contém a chave primária.
Índices UNIQUE são índices que são associados a qualquer atributo da tabela, com restrição do valor do atributo ser único.
Índices INDEX cria um índice básico que não possui restrições de unicidade, permitindo valores repetidos. Podendo haver vários deles em uma tabela.
148
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL - DDL
A criação desse último tipo de índice pode ser feita pelo comando CREATE ou ALTER TABLE.
Sintaxe:
CREATE [UNIQUE] INDEX nome do índice
ON nome da tabela (nome do atributo [, nome do outro atributo]);
ALTER TALBE nome da tabela
ADD [UNIQUE] (nome do atributo [, nome do outro atributo]);
149
É o mesmo que uma constraint UNIQUE.
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL - DDL
Exemplo:
CREATE INDEX idx_nomeCliente ON tbCliente (nomeCliente);
ALTER TABLE tbCliente ADD INDEX idx_nomeCliente (nomeCliente);
150
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL - DDL
Exemplo:
CREATE TABLE Cliente
( codigoCliente INT, nomeCliente VARCHAR(50),
sobrenomeCliente VARCHAR(50);constraint pk_tbCliente_PRIMARY_KEY (codigoCliente),INDEX idx_sobrenomeCliente (sobrenomeCliente););
151
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL - DDL
Um INDEX pode ser excluído por meio do comando DROP.
Sintaxe:
DROP INDEX nome do índice ON nome da tabela;
ALTER TABLE nome da tabela
DROP INDEX nome do índice;
152
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL - DDL
Visualizar todo os índices:
SHOW INDEX FROM nome da tabela;
153
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Definição de Dados no MySQL - DDL
Dicas:
Os índices devem ser criados para atributos usados como condição em uma consulta (no WHERE), ordenamento e agrupamento.
Em tabelas que tem poucos registros não há necessidade de índice, e o seu uso pode causar perda de desempenho.
Deve-se indexar atributos que possuam poucos valores que se repetem. Exemplo, é desnecessário criar um índice para o tipo sexo.
Quanto menor o espaço ocupado por um tipo de dados, mais eficiente a indexação.
A ordem dos atributos no índice dá diferença no desempenho. Numa lista em ordem alfabética, pesquisar o sobrenome e depois pelo nome é mais eficiente do que pesquisar o nome e depois o sobrenome.
154
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Exercícios
Desenho o DER para o modelo relacional abaixo:
tbEmpregado (codidgoEmpregado, nomeEmpregado, ruaEmpregado, cidadeEmpregado, telefoneEmpregado, codigoGerente)
codigoGerente referencia tbGerente
tbTrabalha (codigoEmpregado, codigoCampanha, salario)
codigoEmpregado referencia tbEmpregado
codigoCampanha referente tbCampanha
tbCampanha(codigoCampanha, nomeCampanha, cidadeCampanha)
tbGerente (codigoGerente, nomeGerente)
155
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Exercícios
Explique para que serve um índice e quando devemos utilizá-lo.
Por que quando criamos um índice para o atributo sexo, esse índice não será eficiente?
Crie a base de dados usando comando SQL do modelo ER.
Defina a ordem de criação das tabelas e explique como você escolheu a ordem das tabelas.
Escreva os comandos SQL para criar todas as tabelas, na ordem definida no exercício anterior. As chaves primarias e estrangeiras, bem como qualquer restrição para um atributo deverão ser definidas diretamente no momento da criação das tabelas.
Crie um índice do tipo INDEX para nomeEmpregador na tabela tbEmpregado.
Crie um índice único para o nome da companhia na tabela companhia.
Acrescente o atributo telefoneGerente em tbGerente;
Exclua a tabela tbGerente.
156
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Modelagem de Dados no MySQL - DML157
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Modelagem de Dados no MySQL - DML
Depois que o esquema da base de dados, com suas tabelas e restrições foi criado usando os comando DDL, podemos começar a inserir os dados.
Para fazermos isso, usamos a Linguagem de Modelagem de Dados – DML.
Os comando dessa linguagem permite:
Inserir
Alterar
Excluir
Consultar
158
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Modelagem de Dados no MySQL - DML
Comando Inserir
O comando INSERT é usado quando queremos inserir dados no banco de dados.
Os valores dos atributos a serem inseridos devem estar na ordem que foram definidos no CREATE TABLE. Caso não estejam é necessário especificar a ordem.
159
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Modelagem de Dados no MySQL - DML
Sintaxe quando não se conhece a ordem dos atributos
INSERT INTO nome da tabela (atributo_1, atrubuto_2, atributo_3, ..., atributo_n)
VALUES (valor1, valor2, valor3 ..., valor_n);
Sintaxe quando se conhece a ordem dos atributos
INSERT INTO nome da tabela
VALUES (valor1, valor2, valor3 ..., valor_n);
160
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Modelagem de Dados no MySQL - DML
Exemplo quando não se conhece a ordem dos atributos
INSERT INTO tbClasse (codigoClasse, nomeClasse, precoClasse)
VALUES (1, ‘Lançamento’, 7.50);
Exemplo quando se conhece a ordem dos atributos
INSERT INTO tbClasse
VALUES (null, ‘Catálogo’, 5.00);
Inserimos um valor igual a null, pois a chave primária codigoClasse é automaticamente incrementada.
A mesma ação fazemos quando não queremos inserir valores para os atributos que permitem ser nulos.
Quando queremos inserir um valor que foi definido como DEFAULT no atributos, trocamos null por default.
161
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Modelagem de Dados no MySQL - DML
É importante lembrar que o valor de uma FOREIGN KEY deve ser um valor nulo (se você optou por null durante a criação da tabela) ou um valor cadastrado na sua PRIMARY KEY correspondente.
Você conseguiria inserir uma linha tabela tbFIlme. Se não, por quê?
162
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Modelagem de Dados no MySQL - DML
Caso você queira visualizar as linhas da tabela use o comando:
SELECT *FROM nome da tabela;
163
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Exercícios
Insira:
5 linhas na tabela tbCliente
2 linhas na tabela tbClasse
5 linhas na tabela tbCategoria
6 linhas na tabela tbTitulo
6 linhas na tabela tbFilme
3 linhas na tabela tbEmpDev
164
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Modelagem de Dados no MySQL - DML
Comando DELETE
O comando DELETE é utilizado para excluir registros de uma tabela.
Após a remoção, você não poderá desfazer a operação.
Sintaxe do comando DELETE
DELETE FROM nome da tabela;
Assim você excluirá todos os registros da tabela.
DELETE FROM nome da tabela
WHERE condição;
165
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Modelagem de Dados no MySQL - DML
Exemplo:
DELETE FROM tbEmpDev;
DELETE FROM tbEmpDev
WHERE codigoFilme = 1;
166
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Modelagem de Dados no MySQL - DML
Se você não usou o ON DELETE CASCADE na criação da tabela, não será possível excluir registros de uma tabela que tenham uma PRIMARY KEY que é referenciada por uma FOREIGN KEY em outra tabela.
Exemplo:
tbCliente
1, ‘000.000.000-00’, ‘MG-000.000.00’, ‘PEDRO’, ‘22/10/2014’, ‘POUSO ALEGRE’, ‘MG’
tbEmpDev
codigoCliente = 1
codigoFilme e demais não interessam...
Para deletar o cliente Pedro, eu tenho que excluir todas as linhas que fazem referencia a ele na tabela tbEmpDev.
167
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Modelagem de Dados no MySQL - DML
Se você usou o ON DELETE CASCADE na criação da tabela, ao excluir a linha da tabela tbCliente, o SGBD se encarregará de excluir também todos os registros referente a linha que você deletou na tabela tbEmpDev.
ATENÇÃO: NORMALMENTE NÃO SE EXCLUI DESSA MANEIRA INFORMAÇÕES EM UMA BANCO DE DADOS.
168
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Exercícios
Delete todos os registros da tabela cliente da cidade de Machado.
Se você não tiver um registo como especificado acima, insira um.
Visualize todas as linhas da tabela tbEmpDev e verifique se os registros do cliente que foram deletados se encontram nessa tabela.
Delete o registro com o código 1 da tabela tbFilme.
Visualize todas as linhas da tabela tbEmpDev e verifique se os registros do filme que foi deletado se encontram nessa tabela.
169
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Modelagem de Dados no MySQL - DML
Comanda UPDATE
O comando UPDATE modifica valores inseridos dentro de uma tabela.
Sintaxe
UPDATE nome da tabela SET
nome do atributo1 = novo valor,
nome do atributo2 = novo valor,
nome do atributo 3 = novo valor
WHERE condição;
170
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Modelagem de Dados no MySQL - DML
O comando SET é um comando de atribuição.
Deve-se especificar quais atributos terão seus valores alterados e o novo valor.
Utiliza-se uma condição especificando qual (ou quais) registro deverá ser alterado por meio do comando WHERE. Com esse comando, será feita uma procura por todos os registros que satisfaçam a condição, e desses encontrados, todos serão alterados.
171
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Modelagem de Dados no MySQL - DML
Suponha que você queira alterar o preço de filme da classe ‘Lançamento’ de R$ 7.50 para R$ 8.00. Para fazer isso, usamos o comando:
UPDATE tbClasse SET
precoClasse = 8.00
where nomeClasse = ‘Lançamento’;
172
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Modelagem de Dados no MySQL - DML
Suponha que você queira alterar todos os atributos de um registro da tabela tbClasse, dado uma condição que retorna apenas um único registro:
UPDATE tbClasse SET
codigoClasse = 1,
nomeClasse = ‘Novo’,
precoClasse = 8.50
where codigoClasse = 1;
NORMALMENTE UTILIZAMOS A CHAVE PRIMÁRIA PARA A CONDIÇÃO, POIS ELA RETORNA APENAS UM ÚNICO REGISTRO, NA MAIORIA DAS VEZES.
173
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Modelagem de Dados no MySQL - DML
Se você não usou o ON UPDATE CASCADE na criação da tabela, ao tentar alterar um valor de uma PRIMARY KEY que é referenciada por uma FOREIGN KEY, o SGBD emitirá um erro.
Exemplo:
tbCliente
1, ‘000.000.000-00’, ‘MG-000.000.00’, ‘PEDRO’, ‘22/10/2014’, ‘POUSO ALEGRE’, ‘MG’
tbEmpDev
codigoCliente = 1
codigoFilme e demais não interessam...
O que aconteceria se você alterasse o código do cliente na tabela tbCliente de 1 para 2?
Erro.
174
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Modelagem de Dados no MySQL - DML
Se você usou o ON UPDATE CASCADE na criação da tabela, ao alterar o codigoCliente da tabela tbCliente, o SGBD se encarregará de alterar também todos os registros referente a linha que você alterou na tabela tbEmpDev.
175
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Exercício
Altere todos os atributos de um registro de cada tabela.
176
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Modelagem de Dados no MySQL - DML
Comando SELECT
As consultas são feitas através de três comandos SELECT, FROM e WHERE.
SELECT: usado para selecionar os atributos desejados no resultado de uma consulta.
FROM: define quais tabelas serão usadas na consulta.
WHERE: descreve a condição da consulta. Não é obrigatório quando você quiser consultar todos os registros de uma tabela sem especificação.
177
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Modelagem de Dados no MySQL - DML
Sintaxe do comando SELECT:
SELECT * FROM nome da tabela [WHERE condição]
Exemplo:
SELECT * FROM tbCliente WHERE cidadeCliente = ‘Pouso Alegre’;
O resultado de uma consulta em SQL será sempre uma tabela, mesmo que ela tenha apenas 1 linha e 1 coluna.
178
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Modelagem de Dados no MySQL - DML
Um consulta SQL permite que no seu resultado apareçam valores duplicados. Para forçar a eliminação de duplicidade no resultado de uma consulta, usa-se o comando DISTINCT.
Supondo que você queira saber de quais cidades você possui clientes para então fazer cartazes de propagandas.
Sintaxe do comando DISTINCT:
SELECT DISTINCT atributos FROM nome da tabela;
Exemplo:
SELECT DISTINCT cidadeCliente FROM tbCliente;
179
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Modelagem de Dados no MySQL - DML
Você pode usar o * quando quiser listar todos os registros de uma determinada tabela:
Sintaxe:
SELECT * FROM nome da tabela;
Exemplo:
SELECT * FROM tbcliente;
180
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Modelagem de Dados no MySQL - DML
Um comando SELECT pode conter também expressões aritméticas (+, -, *, /).
Exemplo
SELECT tbClasse.nomeClasse, tbClass.precoClasse * 1.05 FROM tbClasse;
Você pode especificar o nome da tabela.nome do atributo, quando você não desejar consultar todos os atributos.
Utilizar as expressões aritméticas não alteram o valor do registro.
181
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Modelagem de Dados no MySQL - DML
O comando WHERE sempre terá associado a ele uma condição que determina quais registros deverão ser retornados pela consulta.
Por exemplo, se quisermos saber o nome de todos os clientes que moram em Pouso Alegre.
SELECT tbCliente.nomeCliente
FROM tbCliente
WHERE tbCliente.cidadeCliente = ‘Pouso Alegre’;
182
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Modelagem de Dados no MySQL - DML
Pode-se utilizar junto ao comando WHERE:
Os operadores lógicos AND, OR, e NOT.
Os operadores relacionais <, <=, >, >=, = e <>.
Exemplo: Encontrar todos os clientes da cidade de Pouso Alegre, em que o código do cliente seja menor que 5.
SELECT tbCliente.nomeCliente
FROM tbCliente
WHERE tbCliente.cidadeCliente = ‘Pouso Alegre’
AND tbcliente.codigoCliente < 5;
183
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Modelagem de Dados no MySQL - DML
A SQL disponibiliza ainda um operador de comparação chamado BETWEEN, que pode ser usado para simplificar a cláusula WHERE.
Este operador especifica um intervalo de valores.
Exemplo: Encontre o nome de todos os clientes da cidade de ‘Pouso Alegre’ que tenham data de cadastro no ano de 2014.
SELECT tbCliente.nomeCliente
FROM tbCliente
WHERE tbCliente.cidadeCliente = ‘Pouso Alegre’
AND tbCliente.dataCasdastroCliente BETWEEN ‘2014-01-01’ AND ‘2014-12-31’;
184
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Modelagem de Dados no MySQL - DML
O comando NOT BETWEEN pode ser usado para consultar registros que estejam fora do intervalo de valores.
Exemplo:
SELECT tbCliente.nomeCliente
FROM tbCliente
WHERE tbCliente.cidadeCliente = ‘Pouso Alegre’
AND tbCliente.dataCasdastroCliente NOT BETWEEN ‘2014-01-01’ AND ‘2014-12-31’;
185
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Modelagem de Dados no MySQL - DML
O comando FROM define quais tabela serão utilizadas em uma consulta, ou seja, de quais tabelas devemos buscar os dados.
Até agora, usamos apenas uma tabela no comando FROM. No entanto, é comum usar mais que uma para que possamos obter informações interessantes.
IMPORTANTE: Usar numa consulta o menor número de tabelas possível por questão de desempenho.
186
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Modelagem de Dados no MySQL - DML
Quando precisamos utilizar duas ou mais tabelas, podemos fazer o produto cartesiano dessas tabelas.
O produto cartesiano permite combinar informações de várias tabelas fazendo a combinação de todos os dados de uma tabela com todos os dados de outra tabela.
187
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Modelagem de Dados no MySQL - DML
Imagine que tenhamos os seguintes dados nas tabelas tbCategoria e tbTitulo:
tbCategoria
tbTitulo
188
codigoCategoria nomeCategoria
1 Terror
2 Drama
3 Comédia
codigoTitulo
nomeTitulo codigoCategoria
1 Mortos Vivos 1
2 Superando Desafios 3
3 A Hilariante 2
4 O Bicho Papão 1
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Modelagem de Dados no MySQL - DML
Suponha que queiramos fazer uma consulta que retorne os dados sobre títulos e a qual categoria pertencem. Para isso, teremos que usas as tabelas tbCategoria e tbTitulo, como mostra abaixo:
SELECT * FROM tbTitutlo, tbCategoria;
189
O produto cartesiano é indicado pela ,
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Modelagem de Dados no MySQL - DML
Como o produto cartesiano fará a combinação de todos os registros da tabela tbCategoria e tbTitulo, o resultado do produto cartesiano para o nosso exemplo será uma tabela com 12 registros (3 tbCategoria * 4 tbTitulo).
Uma combinação das linhas da tabela tbCategoria com as linhas da tabela tbTitulo.
190
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Modelagem de Dados no MySQL - DML
191
codigoTitulo nomeTitulo codigoCategor
iacodigoCategor
ianomeCategor
ia1 Mortos Vivos 1 1 Terror
1 Mortos Vivos 1 2 Drama
1 Mortos Vivos 1 3 Comédia
2 Superando Desafios 3 1 Terror
2 Superando Desafios 3 2 Drama
2 Superando Desafios 3 3 Comédia
3 A Hilariante 2 1 Terror
3 A Hilariante 2 2 Drama
3 A Hilariante 2 3 Comédia
4 O Bicho Papão 1 1 Terror
4 O Bicho Papão 1 2 Drama
4 O Bicho Papão 1 3 Comédia
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Modelagem de Dados no MySQL - DML
A consulta deveria retornar apenas as linhas pintadas de cinza.
O filme “Mortos Vivos” é apenas da categoria “Terror”.
Como resolver isso?
Observe na tabela que as linhas que estão corretas no nosso resultado são aquelas que têm chave primária em uma tabela (tbCategoria.codigoCategoria) igual a chave estrangeira de outra tabela (tbTitulo.codigoCategoria).
Portanto, para resolver isso temo que coloca ruma condição WHERE que diga que o valor de PK deve ser igual ao valor de FK.
192
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Modelagem de Dados no MySQL - DML
SELECT * FROM tbTitulo, tbCategoria
WHERE tbCategoria.codigoCategoria = tbTitulo.codigoCategoria;
193
codigoTitulo nomeTitulo codigoCategor
iacodigoCategor
ianomeCategor
ia1 Mortos Vivos 1 1 Terror
1 Superando Desafios 3 3 Comédia
2 A Hilariante 2 2 Drama
2 O Bicho Papão 1 1 Terror
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Modelagem de Dados no MySQL - DML
A forma mais utilizada de se escrever uma consulta que utilize duas ou mais tabela é usando o comando INNER JOIN.
A diferença é que esse comando possui uma condição de junção. Essa condição é a mesma que fizemos no WHERE (PK = FK). No entanto, como ela é aplicado no FROM ela permite que os dados sejam filtrados durante a execução do FROM, diminuindo o tempo de execução de consulta, uma vez que o número de registros pesquisados será menor agora que só temos os dados que são corretos.
194
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Modelagem de Dados no MySQL - DML
Exemplo:
SELECT * FROM tbTitulo
INNER JOIN tbCategoria ON tbCategoria.codigoCategoria = tbTitulo.codigoCategoria;
195
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Linguagem de Modelagem de Dados no MySQL - DML
Sintaxe do comando INNER JOIN
SELECT atributo1, atributo2 ... atributo_n
FROM tabela1 INNER JOIN tabela2 ON condição da junção entre as tabelas 1 e 2
[INNER JOIN tabela 3 ON condição da junção entre as tabelas 1 e 3];
Exemplo:
SELECT * FROM tbTitulo
INNER JOIN tbCategoria ON tbCategoria.codigoCategoria = tbTitulo.codigoCategoria
IINER JOIN tbClasse ON tbTitulo.codigoClasse = tbClasse.codigoClasse
196
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Exercícios
Tabela Locadora
1. Faça uma consulta na tabela locadora que retorne o nome e a cidade de todos os clientes cadastrados.
2. Faça uma consulta que retorne todos os nomes dos títulos e os respectivos nomes dos distribuidores dos filmes.
3. Faça uma consulta que retorne o nome de todos os filmes da categoria ‘Terror’.
4. Faça uma consulta que retorne o nome do cliente, a data do empréstimo, a data da devolução prevista e o nome dos títulos que foram emprestados.
1. Insira registros na tabela venda e faz 3 consultas com o comando INNER JOIN.
197
Instituto Federal do Sul de Minas, câmpus Pouso Alegre
Conteúdo Extra
http://www.fabricio.pro.br/OA/ex/ex03.htm
http://www.ceunes.ufes.br/downloads/2/mariateixeira-Banco%20de%20Dados.DDL%20DML.Exerc%C3%ADcios%20e%20Exemplos%20Resolvidos.pdf
198
Bibliográfica
Bibliografia Básica
ELMASRI, R.; Navathe, S. B. Sistemas de Banco de Dados. 6ª ed. São Paulo: Pearson Education do Brasil, 2011.
KORT, Henry F. et all. Sistema de Bancos de Dados. 5ª Ed. São Paulo: Campus, 2006.
MILANI, A. MySQL: Guia do Programador. São Paulo: Editora Novatec, 2007.
Bibliografia Complementar
ABREU, M; MACHADO, F. N. R. Projeto de banco de dados – Uma visão prática. 16. ed. São Paulo: Erica, 2009.
ALVES, W. P. Banco de dados – teoria e desenvolvimento. São Paulo: Erica: 2009.
HEUSER, C. A. Projeto de banco de dados. 6. ed. Porto Alegre: Bookman Companhia, 2009.
RAMAKRISHNAN, R.; GEHRKE, J. Sistemas de gerenciamento de banco de dados. 3. ed. São Paulo: McGraw Hill - Artmed: 2008.
ROB, Peter; CORONEL, Carlos. Sistemas de Banco de Dados – Projeto, Implementaçao e Administração. São Paulo: Cengage Learning: 2010.