Você está na página 1de 39

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)
)

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
)
SQL – Alter Table
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 ...]
Exemplos de Alteração de Tabelas
ALTER TABLE Ambulatórios
ADD nome VARCHAR(30)

ALTER TABLE Médicos DROP PRIMARY KEY

ALTER TABLE Pacientes DROP COLUMN doenca,


DROP COLUMN cidade

ALTER TABLE Funcionários


ADD FOREIGN KEY(nroa)REFERENCES Ambulatórios

ALTER TABLE Funcionarios


ADD constraint fk_nroa
FOREIGN KEY(nroa) REFERENCES Ambulatorios
SQL – Índices
• Definidos sobre atributos para acelerar
consultas a dados
• Índices são definidos automaticamente para
chaves primárias
• Operações
CREATE [UNIQUE] INDEX nome_índice ON
nome_tabela (nome_atributo_1[{, nome_atributo_n }])

DROP INDEX nome_índice ON nome_tabela

• 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

INSERT INTO Ambulatorios VALUES (1, 1, 30)


INSERT INTO Medicos
(codm, nome, idade, especialidade, CPF, cidade)
VALUES (4, ‘Carlos’, 28,’ortopedia’,
11000110000, ‘Joinville’);
SQL – DML
• Alteração de dados
UPDATE nome_tabela
SET nome_atributo_1 = Valor
[{, nome_atributo_n = Valor}]
[WHERE condição]

• 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

DELETE FROM Medicos


WHERE especialidade = ‘cardiologia’
or cidade < > ‘Florianopolis’
MySQL
• Utiliza a linguagem SQL comum a maioria dos bancos de dados
relacionais.
• Desenvolvido pela SUN, o software é livre com código aberto.
• As informações contidas neste material referisse ao MySQL 5.1.

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;

CREATE SCHEMA 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

• Como boas práticas é preferível definir o nome todo em caixa


baixa, sem acentos e se for necessário ter palavras compostas,
separá-las com underline.

CREATE DATABASE nome_do_banco_de_dados;


17
Aprenda fazendo
• Crie um banco de dados com o nome:
banco 1

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

Tipo Faixa Descrição


FLOAT Utilizado para números de ponto
flutuante duplo ou simples

20
Tipos de dados SQL
• Strings

Tipo Faixa Descrição


VARCHAR(N) 1 a 255 caracteres
TEXT 0 a 65.535 caracteres Campo TEXT de tamanho normal

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),

primary key (id_carro)


)

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

INSERT INTO <nome_tabela> VALUES ( <valorCampo1> , ... , < valorCampoN> );

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

• Recuperar apenas as colunas modelo e ano da tabela carro.


SELECT modelo , ano 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 AND


– Todas as condições envolvidas devem ser verdadeiras.

SELECT * FROM nome_tabela WHERE <condição> AND <condição>

• Sintaxe utilizando OR
– Pelo menos uma condição envolvida deve ser verdadeira.

SELECT * FROM nome_tabela WHERE <condição> OR <condição>

29
Operadores de comparação para where

Nome Operador Exemplo Descrição

Igualdade = valor_coluna = 5 Verificar se os dois valores são


iguais.
Maior que > valor_coluna > 30 Verificar se o valor da esquerda é
maior que o da direita.
Menor que < valor_coluna < 45 Verificar se o valor da esquerda é
menor que o da direita.
Maior ou igual >= valor_coluna >= 12 Verificar se o valor da esquerda é
maior ou igual ao da direita.
Menor ou igual <= valor_coluna <= 94 Verificar se o valor da esquerda é
menor ou igual ao da direita.
Desigualdade != ou <> valor_coluna != 2009 Verificar se os dois valores são
diferentes.

30
Aprenda fazendo
• Recuperar apenas os registros de carro brancos.
SELECT * FROM carro WHERE cor = 'Branco';

• Recuperar apenas os registros de carro brancos do ano 1966.


SELECT * FROM carro WHERE cor = 'Branco' AND ano = 1966;

• Recuperar apenas os registros de carro brancos ou pratas.


SELECT * FROM carro WHERE cor = 'Branco' OR cor = ‘Prata';

• Recuperar apenas carros produzidos a partir do ano 2000.


SELECT * FROM carro WHERE ano >= 2000;

• Recuperar apenas carros que não foram produzidos em 2009.


SELECT * FROM carro WHERE ano != 2009;

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

UPDATE <Nome da Tabela>


SET <Coluna 1> = ‘Valor Coluna 1‘ , <Coluna 1> = ‘Valor Coluna 1‘

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 todos os carros brancos para branco gelo.

UPDATE carro SET cor = 'Branco Gelo' WHERE cor = 'branco‘;

• 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;

• Alterar a cor de todos os carros para Cinza.


UPDATE carro SET cor = ‘Cinza‘;

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

DELETE FROM <Nome da Tabela> WHERE <Condição>

• Sintaxe alternativa

DELETE FROM <Nome da Tabela>

34
Aprenda fazendo
• Excluir apenas o carro que tenha o código 4.
DELETE FROM carro WHERE id_carro = 4;

• Excluir todos os registros de carro.


DELETE FROM carro

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

1 Ana 20 Florianopolis 20000200000 gripe codm codp data hora

2 Paulo 24 Palhoca 20000220000 fratura 1 1 2006/06/12 14:00


1 4 2006/06/13 10:00
3 Lucia 30 Biguacu 22000200000 tendinite
2 1 2006/06/13 9:00
4 Carlos 28 Joinville 11000110000 sarampo
2 2 2006/06/13 11:00
Funcionarios
2 3 2006/06/14 14:00
codf nome idade cidade salario CPF
2 4 2006/06/14 17:00
1 Rita 32 Sao Jose 1200 20000100000
3 1 2006/06/19 18:00
2 Maria 55 Palhoca 1220 30000110000
3 3 2006/06/12 10:00
3 Caio 45 Florianopolis 1100 41000100000
3 4 2006/06/19 13:00
4 Carlos 44 Florianopolis 1200 51000110000 4 4 2006/06/20 13:00
5 Paula 33 Florianopolis 2500 61000111000 4 4 2006/06/22 19:30
Exercícios (MySQL)
Realizar as seguintes atualizações no BD:
1) O paciente Paulo mudou-se para Ilhota
2) A consulta do médico 1 com o paciente 4 passou para às
12:00 horas do dia 4 de Julho de 2006
3) A paciente Ana fez aniversário e sua doença agora é
cancer
4) A consulta do médico Pedro (codf = 3) com o paciente
Carlos (codf = 4) passou para uma hora e meia depois
5) O funcionário Carlos (codf = 4) deixou a clínica
6) As consultas marcadas após as 19 horas foram
canceladas
7) Os pacientes com câncer ou idade inferior a 10 anos
deixaram a clínica
8) Os médicos que residem em Biguacu e Palhoca deixaram
a clínica
Referência bibliográficas
• http://www.mysql.com [acessado em 1 de maio de 2009 as 21Hrs]
• http://dev.mysql.com [acessado em 1 de maio de 2009 as 20Hrs]
• http://www.w3schools.com/sql [acessado em 1 de maio de 2009 as 21Hrs]

39

Você também pode gostar