Aula 07 - SQL e MySQL
Aula 07 - SQL e MySQL
Aula 07 - SQL e MySQL
1
TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email:
afsungo@gmail.com
OBJECTIVOS DA AULA 07
Conhecer os conceitos de SQL
Conhecer DDL (Linguagem de Definição de dados) e
DML (Linguagem de Manipulação de Dados)
Saber trabalhar com MySQL
2
TLP | Base de Dados | Professor Eng.º Sungo Afonso | Email:
afsungo@gmail.com
SQL (Structured Query Language)
• Linguagem comercial para BD relacional
– padrão ISO desde a década de 80
• SQL-1 (86); SQL-2 (92); SQL-3 (99)
– não é apenas uma linguagem de consulta!
• como o nome sugere...
• 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 LPs
SQL - DDL
• Criação de um BD
– SQL padrão não oferece tal comando
• 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
SQL - DDL
• Comandos para definição de esquemas
– 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 (I / E / A atributos; I / E
RIs)
• 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
SQL – Create Table
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}]
)
• Principais tipos de dados do MySQL
– int, smallint, tinyint,
numeric(tamanho[,nro_casas_decimais]),
char(tamanho), varchar(tamanho), date, time,
datetime, ...
– formato para data e hora
• “YYYY-MM-DD HH:MM:SS”
Exemplos de Criação de Tabela
CREATE TABLE Ambulatorios (
nroa int,
andar numeric(3) NOT NULL,
capacidade smallint,
PRIMARY KEY(nroa)
)
• Exemplos
CREATE UNIQUE INDEX indPac_CPF ON Pacientes (CPF)
DROP INDEX indPac_CPF ON Pacientes
SQL – DML
• Define operações de manipulação de dados
– I (INSERT)
– A (UPDATE)
– E (DELETE)
– C (SELECT)
• Instruções declarativas
– manipulação de conjuntos
– especifica-se o que fazer e não como fazer
SQL – DML
• Inserção de dados
INSERT INTO nome_tabela [(lista_atributos)]
VALUES (lista_valores_atributos)
[, (lista_valores_atributos)]
• Exemplos MySQL
• Exemplos
UPDATE Medicos
SET cidade = ‘Florianopolis’
UPDATE Ambulatorios
SET capacidade = capacidade + 5, andar = 3
WHERE nroa = 2
SQL – DML
• Exclusão de dados
DELETE FROM nome_tabela
[WHERE condição]
• Exemplos
DELETE FROM Ambulatorios
15
Criar bando de dados
• Banco de dados também é conhecido pelo nome: Schema
• O sistema do MySQL pode suportar vários bancos de dados
diferentes.
• Geralmente será criado um banco de dados para cada aplicação.
• Para cria um banco de dados no MySQL será utilizado a palavra-
chave CREATE DATABASE.
• Sintaxe
• CREATE
Sintaxe alternativa
DATABASE nome_do_banco_de_dados;
16
Nomenclatura
• Pode inserir no comando letras maiúsculas, mas o sistema interpreta
e cria o banco com letras minúsculas.
Válido Inválido
nome_banco nome banco
3nome_banco nome-banco
banco_pái nome%banco
NomeBanco
18
Tipos de dados SQL
• Números Inteiros
– N = comprimento máximo de exibição
Tipo Faixa Descrição
TINYINT(N) -128...127 ou 0...255 Inteiro muito pequeno – 1 byte
BIT Sinônimo de TINYINT
BOOL Sinônimo de TINYINT
SMALLINT(N) -32768... 32767 ou 0... 65535 Inteiro pequeno – 2 bytes
MEDIUMINT(N) -8388608...8388607 ou Inteiro de tamanho médio – 3
0...16777215 bytes
INT(N) -2147483648... 2147483647 ou Inteiro regular – 4 bytes
0... 4294967295
INTEGER(N) Sinônimo de INT
BIGINT(N) -9223372036854775808... Inteiro grande – 8 bytes
9223372036854775807 ou
0... 18446744073709551615 19
Tipos de dados SQL
• Números Flutuantes
20
Tipos de dados SQL
• Strings
21
Atributos SQL
• Not null
• Auto-increment
• Primary key
• constraint
22
Criar tabela
• Após criar um banco de dados, é necessário criar tabelas para
atender certa demanda.
• Não é possível criar mais de uma tabela com mesmo nome em um
banco de dados.
• Para cria uma tabela em um banco de dados no MySQL será
utilizado a palavra-chave CREATE TABLE.
• Sintaxe
CREATE TABLE nome_tabela
(
<nome_da_coluna1> <tipo_da_coluna1> [<atributos_da_coluna1>],
...
<nome_da_coluna> <tipo_da_coluna> [<atributos_da_coluna>]
);
23
Aprenda fazendo
• Crie a tabela carro no banco de dados banco_1
CREATE TABLE carro
(
id_carro int not null auto_increment,
modelo varchar(50),
cor varchar(15),
ano smallint(4),
24
Inserir dados
• Após criar uma tabela no banco de dados, é possível inserir um ou
vários dados.
• Para inserir um registro na tabela serão utilizadas as palavras-chave
INSERT INTO e VALUES.
• As strings devem ser incluídas em pares de aspas simples ou dupla.
• Números Inteiros ou Flutuantes não necessitam de aspas.
• Sintaxe
INSERT INTO <nome_tabela>
( <campo1> , ... , <campoN>)
VALUES
( <valorCampo1> , ... , < valorCampoN> );
• Sintaxe alternativa
25
Aprenda fazendo
• Inseria os seguintes registros na tabela carro.
INSERT INTO carro ( modelo , cor , ano ) VALUES ( 'Corsa' , 'Vermelho' , 2003 );
INSERT INTO carro ( modelo , cor , ano ) VALUES ( 'Fusca' , 'Branco' , 1966 );
INSERT INTO carro ( modelo , cor , ano ) VALUES ( 'Palio' , 'Prata' , 2009 );
INSERT INTO carro ( modelo , cor , ano ) VALUES ( 'Gol' , 'Branco' , 2008 );
26
Recuperar dados
• Após inserir registros em uma tabela no banco de dados, é possível
recuperá-los de várias formas.
• Para recuperar registros de uma tabela serão utilizadas as palavras-
chave SELECT e FROM.
• Sintaxe
SELECT * FROM nome_tabela
• Sintaxe alternativa
SELECT <coluna1> , ... , <colunaN> FROM nome_tabela
27
Aprenda fazendo
• Recuperar todas as colunas da tabela carro.
SELECT * FROM carro
28
Recuperar dados específicos
• Para recuperar registros específicos em uma tabela serão utilizadas
as palavras-chave WHERE, OR e AND.
• Sintaxe
SELECT * FROM nome_tabela WHERE <condição>
• Sintaxe utilizando OR
– Pelo menos uma condição envolvida deve ser verdadeira.
29
Operadores de comparação para where
30
Aprenda fazendo
• Recuperar apenas os registros de carro brancos.
SELECT * FROM carro WHERE cor = 'Branco';
31
Alterar dados
• Após inserir dados na tabela, podemos alterar os mesmos, caso
necessário.
• Para altera registros em uma tabela serão utilizadas as palavras-
chave UPDATE e SET.
• Sintaxe
UPDATE <Nome da Tabela>
SET <Coluna 1> = ‘Valor Coluna 1‘ , <Coluna 1> = ‘Valor Coluna 1‘
WHERE <Condição>;
• Sintaxe alternativa
32
Aprenda fazendo
• Alterar o modelo do Gol para Gol 2008.
UPDATE carro SET modelo = 'Gol 2008‘ WHERE id_carro = 4;
• Alterar a cor de branco gelo para branco neve nos carros fabricados
a partir do ano 2000.
UPDATE carro SET cor = 'Branco Neve'
WHERE cor = 'branco gelo' AND ano >= 2000;
33
Excluir registro
• Após inserir dados na tabela, podemos excluí-los se for necessário.
• Para excluir registro(s) em uma tabela será utilizada a palavra-chave
DELETE.
• Sintaxe
• Sintaxe alternativa
34
Aprenda fazendo
• Excluir apenas o carro que tenha o código 4.
DELETE FROM carro WHERE id_carro = 4;
35
Exercícios (MySQL)
1. Crie um BD com nome Clinica
2. Crie as seguintes tabelas neste BD, considerando que os atributos
sublinhados são chaves primárias e os em itálico são chaves
estrangeiras:
– Ambulatorios: nroa (int), andar (numeric(3)) (não nulo), capacidade
(smallint)
– Medicos: codm (int), nome (varchar(40)) (não nulo), idade (smallint)
(não nulo), especialidade (char(20)), CPF (numeric(11)) (único),
cidade (varchar(30)), nroa (int)
– Pacientes: codp (int), nome (varchar(40)) (não nulo), idade
(smallint) (não nulo), cidade (char(30)), CPF (numeric(11)) (único),
doenca (varchar(40)) (não nulo)
– Funcionarios: codf (int), nome (varchar(40)) (não nulo), idade
(smallint), CPF (numeric(11)) (único), cidade (varchar(30)), salario
(numeric(10)), cargo (varchar(20))
– Consultas: codm (int), codp (int), data (date), hora (time)
3. Crie a coluna nroa (int) na tabela Funcionarios
4. Crie os seguintes índices:
– Medicos: CPF (único)
– Pacientes: doenca
5. Remover o índice doenca em Pacientes
6. Remover as colunas cargo e nroa da tabela de Funcionarios
Popular as tabelas:
Exercícios (MySQL)
Medicos
codm nome idade especialidade CPF cidade nroa
Ambulatorios
nroa andar capacidade 1 Joao 40 ortopedia 10000100000 Florianopolis 1
1 1 30
2 Maria 42 traumatologia 10000110000 Blumenau 2
2 1 50
3 2 40 3 Pedro 51 pediatria 11000100000 São José 2
4 2 25
4 Carlos 28 ortopedia 11000110000 Joinville
5 2 55
5 Marcia 33 neurologia 11000111000 Biguacu 3
Pacientes
codp nome idade cidade CPF doenca Consultas
39