Você está na página 1de 101

We make it happen

5
MySQL e
Esquemas
OBJECTIVOS DA AULA 06 We make it happen

Conhecer os conceitos de SQL

Conhecer as Linguagens DDL e DML

Saber trabalhar com MySQL

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 2


Structured Query Language (SQL) We make it happen

Linguagem para:

 Definição de dados: criação das estruturas

❑ Data Definition Language (DDL)

 Manipulação de dados: actualização e consultas

❑ Data Manipulation Language (DML)

 Linguagem SQUEL desenvolvida pela IBM para um banco


de dados experimental R

 Baseada no padrão ANSI e ISO desde a década de 80:

❑ SQL-1 (86); SQL-2 (92); SQL-3 (99)

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 3


SQL We make it happen

 Base Formal:

❑ Álgebra relacional e cálculo relacional

 Funcionalidades principais
❑ Definição (DDL) e manipulação (DML) de dados

❑ Definição de visões e autorizações de acesso

❑ Definição de restrições de integridade

❑ Definição de transações

❑ Comandos para embutimento em Linguagens de


Programação

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 4


SQL We make it happen

 SQL é considerada a razão principal para o sucesso dos base de


dados relacionais comerciais

❑ Tornou-se a linguagem padrão para bases relacionais

❑ Funciona entre diferentes produtos

❑ Embedded SQL: Java, C/C++, Cobol…

❑ Fácil uso para o usuário

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 5


MySQL We make it happen

 História

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 6


MySQL We make it happen

 Características:

❑ Um sistema de gestão de base de dados relacionais mais


rápidos do mercado;

❑ Tem linguagem simples;

❑ Suportado por Sistemas com filosofia UNIX, embora outros


SO também forneçam suporte, como Windows;

❑ Código fonte aberto;

❑ Alta estabilidade;

❑ Baixo custo.

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 7


MySQL We make it happen

O Servidor MySQL foi desenvolvido originalmente para lidar com


base de dados muito grandes de maneira muito mais rápida que as
soluções existentes e tem sido usado em ambientes de produção de
alta demanda por diversos anos de maneira bem sucedida.

Apesar de estar em constante desenvolvimento, o Servidor


MySQL oferece hoje um rico e proveitoso conjunto de funções. A
conectividade, velocidade e segurança fazem com que o MySQL
seja altamente adaptável para acessar base de dados na Internet.

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 8


Download do MySQL We make it happen

 Download o MySQL no endereço:


https://dev.mysql.com/downloads/mysql/

1. Selecione o SO

2. Clique em Go to
Download Page para
abrir a página de
download do MySQL MSI
Installer

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 9


Download do MySQL We make it happen

3. Selecione o SO

4. Clique no 2º botão Download

5. Copiar o hash para ser


comparado com hash calculado do
ficheiro descarregado
TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 10
Download do MySQL We make it happen

 Para começar com o download, deve-se providenciar as


credenciais de acesso ao sistema do MySQL, se não tem, clique no
link No thanks, just start my download.

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 11


Instalando e Configurando o MySQL We make it happen

 Para acompanhar a instalação passo-a-passo, recomenda-se os


passos descritos no site: https://www.devmedia.com.br/instalando-e-
configurando-a-nova-versao-do-mysql/25813

 Para utilizar o MySQL como servidor de base de dados, é


fornecido duas formas de acesso:

❑ GUI MySQL Workbench ( ou phpmyadmin)

❑ Prompt de comando

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 12


Conectar via MsDOS no MySQL We make it happen

 No prompt de comando acessar a pasta do MySQL

❑ Cd c:\arquivos de programas\mysql

 Precisa-se entrar na pasta MySQL Server xx e dentro dela na


pasta bin

❑ Cd mysql server xx\bin

 Deve-se agora executar o mysql

❑ mysql –user <nome-usuário> -p

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 13


Base de Dados MySQL We make it happen

 O MySQL já vem com duas Bases de dados criados.

 Para visualizá-los basta executar o comando

❑ show databases;

Nota:
Todos os comandos
MySQL devem terminar
com um ponto e vírgula (;).

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 14


Prática 1 We make it happen

 Instalação e configuração do MySQL

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 15


SQL como DDL (1) We make it happen

 Permite especificar:

❑ Esquema de cada relação

❑ O domínio dos valores associados a cada atributo

❑ Restrições de integridade

❑ O conjunto de índices

❑ Visões

❑ Permissão de acessos às relações

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 16


SQL como DDL (2)

Criar uma BD

 SQL padrão não oferece comando para efectuar a operação

❑ BDs são criados via ferramentas do SGBD

 Alguns SGBDs (SQL Server, DB2, MySQL) oferecem este


comando

❑ CREATE DATABASE nome_BD

❑ DROP DATABASE nome_BD

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 17


Criar uma BD no MySQL
 Quando se cria uma BD com o MySQL em ambiente Windows,
é criada apenas uma pasta vazia, dentro da qual serão
armazenados os arquivos gerados utilizando os comandos para
criar tabelas.

 Como o MySQL trata a base de dados como um esquema,


temos duas opções de sintaxe para criar um base de dados
MySQL:

❑ CREATE DATABASE nome_BD;

ou

❑ CREATE SCHEMA nome_BD;

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 18


Regras para criar uma BD

 Máximo 64 caracteres

 Permitido: letras, números, traços, underlines;

 Proibido: barras e pontos;

 Evitar: acentos e cedilhas.

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 19


IF NOT EXISTS

 Não podemos criar base de dados com nomes iguais.

 Se tentarmos, será exibida a mensagem:

❑ Can´t create databases ‘Exemplo’. Database exists

 Para evitar esse erro usamos a cláusula IF NOT EXIST

❑ CREATE DATABASE IF NOT EXISTS nome_BD;

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 20


Apagar uma BD no MySQL

 Ao apagar um base de dados, todas as tabelas e dados


também serão excluídos.

❑ DROP DATABASE nome_BD;

ou

❑ DROP SCHEMA nome_BD;

 Com DROP também podemos usar a clausula IF EXISTS

❑ DROP DATABASE IF EXISTS nome_BD;

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 21


Usar uma BD no MySQL

 Podemos ter vários bancos de dados, mas só podemos


manipular um por vez.

 O comando MySQL que permite selecionar uma BD para


utilização é:

❑ USE nome_BD;

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 22


PRÁTICA 2

1. Criar uma base de dados com nome Exemplo

Mysql> CREATE DATABASE IF NOT EXISTS Exemplo;

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 23


Domínios We make it happen

Tipos de dados em MySQL


 No MySQL os tipos de dados são
divididos em três grupos:
❑ Tipos Numéricos
❑ Tipos de Data
❑ Tipo de Cadeias de caracteres

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 24


Tipos Numéricos MySQL We make it happen

 Exactos:
❑ NUMERIC

❑ DECIMAL

❑ INTEGER

❑ SMALLINT, entre outros

 Aproximados:
❑ FLOAT

❑ REAL ou DOUBLE

❑ DECIMAL ou DEC.
TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 25
Tipos Numéricos MySQL (2) We make it happen

Tipo Bytes De Até

TINYINT 1 -128 127


SMALLINT 2 -32768 32767
MEDIUMINT 3 -8388608 8388607
INT ou Integer 4 -2147483648 2147483647
BIGINT 8 -9223372036854775808 9223372036854775807
Bit ou Bool 1 Inteiro que pode ser 0 ou 1

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 26


Tipos Numéricos MySQL (3) We make it happen

 Numeric e Decimal
❑ Implementados como o mesmo tipo.
❑ Preserva a exatidão (Ex. dados monetários).

 Exemplo: Escala: número de


digitos que serão
armazenados após o
- salario DECIMAL(5,2)
ponto decimal
Precisão: número de digitos
que serão armazenados

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 27


Tipos Numéricos MySQL (4) We make it happen

 FLOAT - numeros aproximados


❑ Números pequenos
❑ permite uma especificação opcional da precisão
❑ quando não especifica precisão utiliza quatro
bytes

 REAL e DOUBLE
❑ não aceitam especificações de precisão.
❑ implementados como valores de ponto flutuante
de 8 bits de dupla precisão

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 28


Tipos Data e Hora We make it happen

 DATE
❑ Para apenas do valor da data, sem a parte da
hora.
❑ Formato 'YYYY-MM-DD'.
❑ Faixa de '1001-01-01' até '9999-12-31'.

 DATETIME
❑ Para valores que contém data e a hora.
❑ Formato 'YYYY-MM-DD HH:MM:SS'.
❑ Faixa de '1001-01-01 00:00:00' até '9999-12-31
23:59:59'.
TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 29
Tipos Data e Hora (2) We make it happen

 TIME
❑ Formato 'HH:MM:SS'
❑ Faixa '-838:59:59' até '838:59:59'.
❑ Hora é grande pois pode ser usado para
intervalos de tempo entre dois eventos. Por
exemplo e não só para hora do dia que seria
até 24

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 30


Tipos Data e Hora (3) We make it happen

 TIMESTAMP
❑ Para valores que contém data e a hora.
❑ Margem vai desde 1 de janeiro de 1970 ao
ano 2037

 YEAR

❑ Formato com 2 ou 4 algarismos.


❑ Faixa de 1901 até 2155.

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 31


Tipos Cadeia de Caracteres We make it happen

 CHAR(N)
❑ Caracteres alfanuméricos
❑ Tamanho é fixo e instaurado ao ser criado.
❑ Pode ter de 0 a 255 caracteres.

Exemplo: endereco CHAR(30);


❖ Observe que não há acentos nem
cedilhas no nome do campo, pois muitos
servidores não acentuam, e sua tabela
teria difícil acesso.
TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 32
Tipos Cadeia de Caracteres (2)
 VARCHAR(N)
❑ Aloca apenas o espaço necessário para
gravação
❑ CHAR tamanho definido fixo (mesmo que
não usado, aquele espaço em disco é alocado)

Exemplo: endereco VARCHAR(30);


❖ Define um campo chamado endereco que
pode conter até 30 letras. Se preencher
apenas duas, o campo não ocupara todos
os 30 bytes, mas apenas 2.
TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 33
Tipos Cadeia de Caracteres (3)
 TEXT/BLOB
❑ Para guardar grandes quantidades de
caracteres.
❑ Pode conter de 0 a 65535 bytes,
❑ TEXT não é sensível a letras maiúsculas e
minúscula quando uma comparação é
realizada, e o BLOB sim.

 MediumTEXT/MediumBLOB
❑ Máximo de 16.777.215 caracteres.
TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 34
Tipos Cadeia de Caracteres (4)
 LongTEXT/LongBLOB
❑ Máximo de 4.294.967.295 caracteres.

 SET
❑ Permite que o usuário faça uma escolha dado
determinado número de opções.

❑ Cada campo pode conter até‚ 64 opções.

Exemplo: curso SET(“informatica",


“geometria") NOT NULL;

❖ Neste exemplo este campo pode conter apenas


os itens indicados.
TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 35
Tipos Cadeia de Caracteres (4)
 ENUM
❑ Semelhante ao SET, com a diferença que
apenas um valor pode ser escolhido.

Exemplo: sexo ENUM(“masculino", “feminino")


NOT NULL;
❖ Neste exemplo o campo sexo só pode
conter os itens indicados.

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 36


DDL (2) We make it happen

Definir esquemas em SQL


 CREATE TABLE
❑ Define a estrutura da tabela, suas
restrições de integridade e cria uma tabela
vazia

 ALTER TABLE
❑ Modifica a definição de uma tabela (Inserir
/ Excluir / Actualizar atributos; I / E Restrições
de Integridades)

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 37


Definir esquemas em SQL (2)
❑ RIs básicas
❖ Atributos chave não podem ser removidos
de uma tabela
❖ Atributos NOT NULL não podem ser
inseridos em uma tabela

 DROP TABLE
❑ Remove uma tabela com todas as suas
tuplas

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 38


Tipos de Tabelas We make it happen

• Principais tipos de tabelas do MySQL


– MyISAM
• Ignora restrições de chaves estrangeiras
• Melhor desempenho
• Sem transação (operação atômica)

– InnoDB
• Verifica restrições de chaves estrangeiras
• Pior desempenho
• Com transação

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 39


FOREIGN KEY (FK)
CREATE TABLE cliente_tem_telefone (# tabela N:N
cliente_cod int unsigned not null,
tel_ddd int(3) zerofill,
tel_num int(9) zerofill,

primary key (cod),

# FKs da mesma tabela ➔ declaração única


FOREIGN KEY (tel_ddd, tel_num)
REFERENCES telefone (ddd, num)
)
Type=InnoDB;

ou...

Engine=InnoDB;
TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 40
Criar Tabelas

CREATE TABLE nome_tabela (


nome_atributo_1 tipo_1
[[NOT]NULL][UNIQUE]
[{, nome_atributo_n tipo_n}]
[, PRIMARY KEY (nome(s)_atributo(s))]
[{, FOREIGN KEY (nome_atributo)
REFERENCES nome_tabela_ref
(nome_atributo_ref)}]
)

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 41


Restrições We make it happen

 Uma maneira de limitar os dados que podem


ser inseridos em uma tabela é a definição de
dados.

 Pode-se desejar definir outras restrições como:

❑ Dados de um coluna em relação a outras


colunas ou linhas.
❑ Valores aceitáveis.

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 42


Restrições (2) We make it happen

 Não Nulo:

❑ Define que uma coluna não pode conter


valor nulo.
❑ A cláusula NOT NULL especifica que uma
coluna não admite valor vazio. Valores
aceitáveis.

Exemplo: nome CHAR(15) NOT NULL;


❖ o campo nome não pode ser vazio, é de
preenchimento obrigatório.

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 43


Restrições (3) We make it happen

 Unicidade:

❑ Define que os dados contidos na coluna


(ou grupo de colunas) sejam únicos (não se
repitam) em relação a todas as outras linhas
da tabela.
❑ A cláusula UNIQUE especifica que os
dados não se repetem.

Exemplo:
CREATE TABLE alunos (
ra char(5) UNIQUE,
nome char(50),
nasc date, UNIQUE(nome));
TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 44
Restrições (4) We make it happen

❑ Se uma restrição de unicidade faz


referencia a um grupo de colunas, elas são
separadas por vírgula:

Exemplo:
CREATE TABLE exemplo(
a char(5),
b char(50),
c date,
UNIQUE (a,c));

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 45


Restrições (5) We make it happen

 Chave primaria:

❑ A chave primária indica que a coluna, ou grupo de


colunas, pode ser utilizado como identificador único
para as linhas da tabela.
❑ É a junção de restrição de unicidade com a
restrição de não nulo. Apenas a unicidade não
garante identificador único pois não exclui os valores
nulos.
❑ Uma tabela pode ter no máximo uma chave
primária, mas pode ter várias restrições de
unicidade e de não nulo.
TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 46
Restrições (6) We make it happen

Exemplo:
CREATE TABLE alunos ( CREATE TABLE alunos (
ra char(5) UNIQUE ra char(5) PRIMARY KEY,
NOT NULL, nome char(50),
nome char(50), nasc date);
nasc date);

❑ A chave primária pode ser composta de vários


atributos:
CREATE TABLE exemplo (
a char(5),
b char(50),
c date,
PRIMARY KEY (a,c));
TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 47
Restrições (7) We make it happen

 Auto incremento:
❑ Este recurso, faz com que conforme novos
registros são criados, automaticamente estes
obtém valores que correspondem ao valor deste
mesmo campo no registro anterior, somado a 1.

Exemplo: codigo INT AUTO_INCREMENT;


❖ Soma um a cada registro
automaticamente neste campo.
Começando de 1, com inserção
subseqüente.

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 48


Criar Tabelas (2) - Exemplo We make it happen

CREATE TABLE Ambulatorios (


nroa int auto_increment,
andar numeric(3) NOT NULL,
capacidade smallint,
PRIMARY KEY(nroa)
)

CREATE TABLE Medicos (


codm int,
nome varchar(40) NOT NULL,
idade smallint NOT NULL,
especialidade char(20),
CPF numeric(11) UNIQUE,
cidade varchar(30),
nroa int,
PRIMARY KEY(codm),
FOREIGN KEY(nroa) REFERENCES Ambulatorios

)
TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 49
Comandos para utilizar em tabelas
 Mostrar tabelas - Lista todas as tabelas
existentes na BD actual.
❑ mysql> show tables;

 Mostrar colunas - Mostra as colunas da


tabela.
❑ mysql> show columns from TB_teste;

 Mostrar estrutura - Mostra a estrutura da


tabela.
❑ mysql> describe TB_teste;

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 50


Alterar tabelas We make it happen

 Quando notamos que as necessidades da


aplicação mudaram ou que foi cometido um erro,
podemos modificar a estrutura das tabelas já
criadas.
 Pode-se incluir ou excluir colunas, restrições,
modificar nome de coluna ou da própria tabela.
 Tudo isso pode ser feito através do comando
ALTER TABLE, onde:
❑ ADD – Adiciona um novo campo
❑ DROP – Remove um campo
❑ MODIFY – Modifica o tipo de um campo.
TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 51
Alterar Tabelas (2) We make it happen

ALTER TABLE nome_tabela


ADD [COLUMN] nome_atributo_1 tipo_1 [{RIs}]
[{, nome_atributo_n tipo_n [{RIs}]}]
|
MODIFY [COLUMN] nome_atributo_1 tipo_1 [{RIs}]
[{, nome_atributo_n tipo_n [{RIs}]}]
|
DROP COLUMN nome_atributo_1
[{, nome_atributo_n }]
|
ADD CONSTRAINT nome_RI_1 def_RI_1
[{, nome_RI_n def_RI_n}]
|
DROP CONSTRAINT nome_RI_1
[{, nome_RI_n}]
|
[ADD|DROP] [PRIMARY KEY ...|FOREIGN KEY ...]
TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 52
Alterar Tabelas (3) We make it happen

 Para alterar o nome de uma coluna utiliza-se o


comando:
❑ ALTER TABLE TB_teste CHANGE coluna
nova_coluna tipo;

 Para alterar o nome da tabela A para B


❑ ALTER TABLE TB_A RENAME TO TB_B;

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 53


Alterar Tabelas (4) - Exemplo
ALTER TABLE Ambulatorios
ADD nome VARCHAR(30)

ALTER TABLE Medicos DROP PRIMARY KEY

ALTER TABLE Pacientes DROP COLUMN doenca, DROP


COLUMN cidade

ALTER TABLE Funcionários


ADD FOREIGN KEY(nroa)REFERENCES Ambulatorios

ALTER TABLE Funcionarios


ADD constraint fk_nroa
FOREIGN KEY(nroa) REFERENCES Ambulatorios

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 54


Apagar Tabelas We make it happen

 Excluir uma tabela significa que todos os dados e


definições da tabela são removidos
❑ DROP TABLE TB_teste;

Observação: Muito cuidado ao utilizar este comando!

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 55


PRÁTICA 3 We make it happen

1. Crie uma tabela Empregados como a


seguir:

Campo Tipo Descrição


codigo Integer Código do funcionário(não nulo)
nome Char(40) Nome do funcionário (não nulo)
setor Char(2) Setor onde o funcionário trabalha
cargo Char(20) cargo do funcionário
salario Decimal(10,2) salário do funcionário
Chave Primária Será o campo código

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 56


DML We make it happen

 Uma base de dados pode ser manipulada


com quatro operações básicas:
❑ Incluir
❑ Apagar
❑ Alterar
❑ Pesquisar

 Instruções declarativas
❑ manipulação de conjuntos
❑ especifica-se o que fazer e não como fazer
TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 57
Inserir dados numa tabela We make it happen

 Para se adicionar dados a uma tabela,


usamos o comando INSERT.

INSERT INTO nome_tabela


[(lista_colunas)]
VALUES (lista_valores_colunas)
[,
(lista_valores_colunas)]

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 58


Inserir dados numa tabela (2)
 Observações:
❑ Todos os campos que contém texto, ou seja,
CHAR, VARCHAR, BLOB, TEXT, etc. têm de
ficar entre apóstrofos
❑ Para campos do tipo número, não se usam
apóstrofos.
❑ Se existir um campo DATE, a entrada NULL
faria com que o valor gravado no registro se
torne a data atual.

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 59


Inserir dados numa tabela (3)
 Observações:
❑ Lembre-se sempre de passar para o
comando INSERT um número de parâmetros
igual ao número de campos na tabela que está
recebendo os dados. Caso contrario, você
obterá uma mensagem de erro.

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 60


Inserir dados numa tabela (4)
 Exemplo:

INSERT INTO Ambulatorios VALUES (1, 1, 30);

INSERT INTO Medicos (codm, nome, idade,


especialidade, CPF, cidade)
VALUES (4, ‘Carlos’, 28,’ortopedia’,
11000110000, ‘Joinville’);

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 61


Alterar dados numa tabela We make it happen

 Para se actualizar dados a uma tabela,


usa-se o comando UPDATE.
UPDATE nome_tabela
SET nome_atributo_1 = Valor
[{, nome_atributo_n =
Valor}]
[WHERE condição]

❑ Exemplo:
UPDATE Medico SET cidade = ‘Florianopolis’;

UPDATE Ambulatorios SET capacidade =


capacidade + 5, andar = 3 WHERE nroa = 2;

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 62


Apagar dados numa tabela
 Para se eliminar dados a uma tabela,
usa-se o comando DELETE.

DELETE FROM nome_tabela [WHERE condição]

❑ Exemplo:
DELETE FROM Ambulatorios;

DELETE FROM Medicos WHERE


especialidade = ‘cardiologia’
OR cidade < > ‘Florianopolis;

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 63


Integridade We make it happen

 Neste caso, para que as regras de integridade


sejam respeitadas, as tabelas devem ser criadas
como tipo InnoDB (TYPE=InnoDB).
 Há duas restrições a aplicar:

❑ ON DELETE e ON UPDATE que que aplica as


restrições no caso de remoções e atualizações
respectivamente dos campos relacionados entre
as tabelas.

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 64


Integridade (2) We make it happen

 O InnoDB implementa as seguintes restrições


de integridade:
❑ CASCADE - Ao se remover um registro da tabela
referenciada pela chave estrangeira os registros
relacionados àquele removido serão eliminados em
todas as tabelas relacionadas
❑ RESTRICT ou NO ACTION - Não permite a remoção
de registros que possuam relacionamentos em outras
tabelas

❑ SET NULL e SET DEFAULT - atribuem os valores


DEFAULT ou NULL para as chaves estrangeiras cujos
registros relacionados foram excluídos
TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 65
Consultas (Query) – SELECT
 Para recuperar registros de uma tabela
serão utilizadas as palavras-chave SELECT
e FROM.
SELECT lista_atributos_desejados

FROM uma_ou_mais_tabelas

WHERE restrições_sobre_atributos

 Exemplo: encontre o nome e o salário dos


funcionarios da relação funcionário
SELECT nome, especialidade FROM Medicos;

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 66


Consultas – SELECT (2) We make it happen

 Distinct
❑ O SQL permite duplicatas em relações e
resultados em consultas
❑ Para eliminar duplicidade, usa-se a cláusula
DISTINCT depois do SELECT

❑ Exemplo:

SELECT distinct nome FROM Medicos;

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 67


Consultas – SELECT (3)
 A cláusula *
❑ O asterisco na cláusula SELECT denota
TODOS OS ATRIBUTOS

❖ Exemplo:

SELECT * FROM Medicos;

❑ Expressões aritméticas podem ser usadas


na cláusula SELECT +, –, *, /
❖ Exemplo:
SELECT nome, idade + 10 FROM Medicos;

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 68


Consultas – SELECT (4) We make it happen

 A cláusula FROM
❑ Lista as relações envolvidas na consulta
❖ Exemplo:
SELECT * FROM Medicos, Ambulatorios;
❑ Quando mais de uma tabela é utilizada é
necessário dar um apelido para elas que deve
ser utilizado para diferenciar atributos iguais
❖ Exemplo:
SELECT * FROM Medicos m, Funcionarios
f WHERE m.codMedico = f.codFunc;

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 69


Consultas – SELECT (5)
 A cláusula WHERE
❑ Especifica as condições que o resultado
precisa satisfazer
❖ Exemplo:
SELECT * FROM Medicos WHERE idade > 25;

❑ Operadores lógicos AND, OR e NOT (!)


podem ser usados com WHERE
❖ Exemplo:
SELECT nome, idade FROM Medicos WHERE
idade > 25 AND nome = “Maria”;
TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 70
A cláusula WHERE (2) We make it happen

❑ ORDER BY
❖ O operador lógico ORDER BY, ou
ORDENAR POR, simplesmente lista os
registros, colocando-os em ordem de acordo
com o campo solicitado:

SELECT * FROM Medicos WHERE idade > 25


ORDER BY nome;

❖ ASC e DESC especificam o tipo de


classificação e são, respectivamente,
abreviações das palavras em inglês traduzindo
crescente e decrescente.
TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 71
ORDER BY (2) We make it happen

❖ Quando não especificamos nenhum , o


padrão é ascendente

SELECT * FROM Medicos ORDER BY nome


DESC, idade ASC;

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 72


A cláusula WHERE (3) We make it happen

❑ Operadores relacionais

> Maior que


< Menor que
= Igual a
<> Diferente de
>= Maior ou igual a
<= Menor ou igual a

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 73


Consultas – SELECT (6) We make it happen

 Nomeação de atributos
❑ nome_atributo AS novo_nome_atributo

❖ Exemplo:
SELECT nome AS nomeCliente,
(salario+200) AS comissao
FROM funcionario;

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 74


Consultas – SELECT (7) We make it happen

 Verificação de caracteres
❑ Para verificar sequência de caracteres dentro de
um campo do tipo string (char ou varchar), pode-
se utilizar junto com a clausula where uma
condição baseada na utilização do operador LIKE.
❖ <expressão> [NOT] LIKE <valor>
❑ Exemplos:

❖ ‘A%’ – começa com letra A


❖ ‘_A%’ – segunda letra do nome A
❖ ‘%AN% - possui AN em qualquer posição
TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 75
Verificação de caracteres (2)
❑ Exemplo I: encontre o nome dos funcionarios
cujos nomes iniciam com “Pedro”:

select nome from funcionario


where nome like 'Pedro%‘;

❑ Exemplo II: encontre o nome dos funcionarios


cujos nomes contém “Pedro” no nome:
select nome from funcionario
where nome like ‘%Pedro%‘;

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 76


Consultas – SELECT (8) We make it happen

 Operadores auxiliares
❑ Between - Define intervalos de valores para a
cláusula where

❖ <expressão> [Not] BETWEEN


<mínimo> AND <máximo>

❑ IN - Algumas vezes não é possível definir um


intervalo sequencial de valores.

❖ <expressão> [Not] IN
<valor1,valor2,...,valorN>

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 77


Consultas – SELECT (9) We make it happen

❑ IS NULL - Uma ocorrência bastante útil é


verificar a existência de campos que possuam
valores em branco ou não. Para isso usa-se junto
ao where o operador IS NULL.

❖ <expressão> IS [NOT] NULL

❑ Exemplo:

Select * from Empregados where nome is


null;

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 78


Funções de Agregação We make it happen

 Operam sobre múltiplos valores de uma


coluna da tabela e retornam um valor

❑ AVG() - média aritmética


❑ MAX() - Maior valor
❑ MIN() - Menor valor
❑ SUM() - Soma dos valores
❑ COUNT() - Número de valores

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 79


Funções de Agregação (2) We make it happen

 Exemplo:
❑ Encontre o número de tuplas da relação
CLIENTE
select count(*)FROM cliente;

❑ Encontre a soma dos salários dos funcionários


select SUM(salario)FROM funcionario;

❑ calcular a média de contas para cada elemento


de um cliente.
select codcli, AVG(valor)FROM
cliente order by codcli;
TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 80
GROUP BY We make it happen

❑ Encontre o total de funcionários de cada


departamento
select d.nome, count(f.*) as
numeroFuncionarios
FROM funcionario f, departamento d
WHERE f.codDepto = d.codDepto
GROUP BY d.nome;
Nota 1: Atributos na cláusula SELECT que estão fora da
função de agregação precisam aparecer na lista de
atributos do GROUP BY.
Nota 2: A cláusula “where” não pode ser usada para
restringir grupos que deverão ser exibidos.
Acompanhando o group by utilizamos a cláusula
“having”.
TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 81
PRÁTICA 4 We make it happen

1. Inserir os dados abaixo na tabela de empregados.

Insert into empregados values (1,’Cleide


Campos’,’1’,’secretaria’,1000 );
TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 82
PRÁTICA 5 We make it happen

1. Apresentar a listagem completa dos registros da tabela


Empregados;
2. Apresentar uma listagem dos nomes e dos cargos de
todos os registros da tabela Empregados;
3. Apresentar uma listagem dos nomes dos empregados
do setor 1;
4. Listagem dos nomes e dos salários por ordem de nome
(a-z);
5. Listagem dos nomes e dos salários por ordem de nome
em formato descendente (z-a);
6. Listagem dos setores e nomes colocados por ordem do
campo setor em formato ascendente e do campo nome
em formato descendente.
7. Listagem de nomes ordenados pelo campo nome em
formato ascendente, dos empregados do setor 4.

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 83


PRÁTICA 6
1. O empregado de código 7 teve um aumento de salário
para 2500.50.
2. Andreia Batista foi transferida do departamento 5 para o
departamento 3.
3. Todos os empregados da empresa tiveram um aumento
de salário de 20%.
4. Todos os empregados do setor 1 foram demitidos ,
exclua-os.
5. Mario Souza pediu demissão, exclua-o.

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 84


PRÁTICA We make it happen

1. Inserir na tabela Empregados o campo admissao que


conterá a data de admissão dos empregados.

2. Em seguida será necessário atualizar a tabela com as


datas de admissão dos empregados ativos.

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 85


PRÁTICA 6 We make it happen

1. Apresente a listagem dos empregados que foram


admitidos em 20/10/2000
2. Apresente a listagem dos funcionários que foram
admitidos após 01/01/2000
3. O departamento 2 foi reaberto e admitiu-se os
seguintes empregados:

codigo nome setor cargo salário admissão


20 Sungo Afonso 2 Supervisora 1700.00 2009-09-05
22 Silvia Mendes 2 Gerente 2000.00 2009-09-01
24 Moacir Campos 2 Programador 2000.00 2009-09-10
26 Marco Silva 2 Programador 2000.00 2009-09-15

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 86


PRÁTICA 7 We make it happen

1. Apresentar nome e salário dos empregados que


ganham acima de 1700.00(valor do salário) mais uma
comissão de 50.00 (totalizando 1750.00).
2. Listar os empregados do setor 5.
3. Listar os empregados cujo cargo é programador.
4. Listar empregados com salário até 2000.00
5. Listar programadores do setor 2.
6. Listar empregados que sejam supervisor ou
supervisora.
7. Listar empregados que não sejam gerentes.
8. Listar empregados com salário entre 1700.00 e 2000.00
9. Listar programadores e programadoras

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 87


PRÁTICA 8 We make it happen

1. Listar empregados cujo nome comece com a letra A


2. Listar empregados cujo nome tem a segunda letra A
3. Listar empregados que tem a sequência AN em
qualquer posição do nome.
4. Média aritmética dos salários de todos os empregados
5. Média aritmética dos salários de todos os empregados
do setor 3
6. Soma dos salários de todos os empregados
7. Soma dos salários de todos os empregados do setor 5
8. Maior salário existente entre todos os empregados
9. Menor salário existente entre todos os empregados
10. Numero de empregados do setor 3
11. Número de empregados que ganham mais que 2000.00
12. Número de setores existentes no cadastro de
empregados.

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 88


PRÁTICA 9 We make it happen

1. Faça uma consulta para verificar a média de salários de


cada setor e a média geral dos salários
2. Faça uma consulta para verificar a média de salários de
cada setor, porém apresente resposta apenas para
setores com mais de 2 empregados.
3. Faça uma consulta para verificar a média de salários de
cada setor, porém apresente resposta apenas para
setores com média maior que 200.600,00 Kz.

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 89


Subquery We make it happen

 Uma subquery é um comando SELECT inserido


em uma cláusula de um outro comando SQL.
Pode-se desenvolver comandos sofisticados a
partir de comandos simples, utilizando-se
subqueries. Elas podem ser muito úteis quando for
necessário selecionar linha a partir de uma tabela
com uma condição que dependa de dados da
própria tabela.

 A subquery geralmente é identificada como um


comando aninhado SELECT. Em geral, ela é
executada primeiro e seu resultado é usado para
completar a condição de pesquisa para a pesquisa
primária ou externa.
TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 90
Subquery (2)
 A subquery deve ser colocada entre
parênteses, deve ser colocada depois de um
operador de comparação, cláusula ORDER BY
não deve ser incluída em uma subquery.

❑ Exemplo: Selecione os clientes que são


funcionários

select nomeCliente From cliente


Where nomeCliente in (select
nomeFuncionario from funcionario)

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 91


PRÁTICA 10 We make it happen

1. Exiba o nome de todos os empregados que trabalham


no mesmo setor da Sungo Afonso
2. Exiba o nome de todos os empregados que tem salário
superior ao do João Silva

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 92


Utilizando JOINS We make it happen

 Utilizar a cláusula WHERE para fazer seus


JOINs (relacionamentos), limita os
relacionamentos a apenas um tipo deles, o
INNER JOIN.
 Há três tipos de Joins:
❑ INNER JOIN
❑ LEFT JOIN
❑ RIGHT JOIN

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 93


Indexação de tabelas
 Índices permitem encontrar registros com um
valor específico de um campo mais rapido.
 Índice é um recurso que facilita a localização
de informações dentro de uma tabela, além de
possibilitar a exibição ordenada de informações.
 A indexação precisa ser usada com cuidado
pois causa lentidão, principalmente nas
operações de atualização de dados (update).
 Índices são definidos automaticamente para
chaves primárias.
TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 94
Indexação de tabelas (2)
 A indexação é útil quando:
❑ Um determinado campo não deve conter
valores duplicados, além do campo definido como
chave primária. Para o campo que for chave única
deve ser criado um índice e utiliza-se a cláusula
opcional UNIQUE.

❖ Exemplo: Imagine além do campo código do


cliente (que está definido como chave primária) o
campo NIF não pode conter valores duplicados.
Neste caso, para o campo NIF, cria-se um índice.

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 95


Indexação de tabelas (3)
❑ Quando consultas são realizadas com grande
frequência sobre um campo que não é definido como
chave primária.
❖ Exemplo: Pode-se consultar cliente pelo código ou
pelo NIF.

❑ Para criar e apagar uma indexação utiliza-se os


comandos:
CREATE [UNIQUE] INDEX nome_índice ON
nome_tabela (nome_atributo_1[{,
nome_atributo_n }])

DROP INDEX nome_índice ON nome_tabela


TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 96
Indexação de tabelas (4) We make it happen

❑ Exemplos:

❖ A seguir será criado um índice de nomes para a


tabela Empregados , usando como chave de indexação
o campo nome. A indexação criada está recebendo o
nome nomeind.

CREATE INDEX nomeind ON empregados


(nome);

❖ Apagar o índice nomeind na tabela Empregados

DROP INDEX nomeind ON empregados;

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 97


Carregando dados em tabelas vazias
 Para carregar o arquivo de texto
“fornecimento.txt" dentro da tabela de produtos
use este comando:
LOAD DATA LOCAL INFILE “fornecimento.txt"
INTO TABLE fornecimento;

Aqui indica-se o caminho completo do


arquivo. Ex
C:/meus documentos/fornecimento.txt

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 98


Desafios We make it happen

 Vistas;
 Funções e Procedimentos;
 Triggers e Jobs;
 Outras.

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 99


Projectos – propostas de temas
 Desenvolver uma base de dados para gestão de
um (a):
1. Livraria
2. Centro de saúde
3. Cantina
4. Farmácia
5. Stand de automóvel
6. Bilhetes de cinema
7. Parque de estacionamento
8. Inscrições para acesso ao instituto
9. Matricula
10. Patrimônio
11. Biblioteca
12. Oficina de automóvel
13. Condomínio.
TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 100
Bibliografia We make it happen

 Brito, Elaine. MySQL

 https://www.w3schools.com/sql/default.asp

 https://dev.mysql.com/doc/refman/8.0/en/

 https://www.devmedia.com.br/instalando-e-
configurando-a-nova-versao-do-mysql/25813

TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email: afsungo@gmail.com 101

Você também pode gostar