O documento descreve conceitos fundamentais de bancos de dados, incluindo instâncias, esquemas, independência de dados, modelos de dados, modelo entidade-relacionamento e a linguagem SQL.
1. INSTÂNCIAS E ESQUEMAS
• Instância: Os dados atuais armazenados no Banco
de Dados em um momento particular. Também
chamado estado do banco de dados.
• Esquema: Descrição da estrutura de um Banco de
Dados. Pode ser textual ou gráfico. Conhecido
também como o projeto geral do banco de dados.
2. INDEPENDÊNCIA DE DADOS
• Capacidade de modificar os esquemas de um banco
de dados sem afetar um esquema de nível superior.
Existem dois níveis de independência:
• Física: capacidade de modificar o esquema físico sem que
haja qualquer necessidade de reescrever alguma aplicação.
Usada para promover melhorias no desempenho.
• Lógica: capacidade de modificar o esquema lógico sem que
haja qualquer necessidade de reescrever alguma aplicação.
Necessárias quando uma estrutura lógica é alterada (ex:
inserção de novas moedas num sistema)
3. MODELO DE DADOS
• Conceituais (Alto Nível)
• Entidade-Relacionamento
• Objeto-Relacional (BDII)
• Orientado a Objeto (BDII)
• Implementação (Lógicos)
• Relacional
• Rede (BD mais antigos)
• Hierárquico (BD mais antigos)
• Físicos
4. MODELO ENTIDADE-
RELACIONAMENTO
• Modelo proposto por Peter Chen, baseado na
percepção do mundo real.
• Formado por um conjunto de objetos básicos
denominados entidades e nos relacionamentos entre
tais objetos.
• Tal modelo permite especificar a estrutura lógica do
banco de dados.
5. MODELO ENTIDADE-
RELACIONAMENTO
• O Diagrama Entidade-Relacionamento (DER)
permite representar graficamente a estrutura lógica
de um banco de dados.
• De um modo geral, para nos auxiliar na elaboração
de um DER, podemos dizer que os substantivos de
uma frase são as entidades e os verbos são os
relacionamentos entre as entidades.
7. LINGUAGEM SQL
COMANDOS DDL
• Usados para criar bancos de dados e tabelas, além de
alteração na estrutura das tabelas (acrescentar um campo,
mudar as características de um campo, excluir um campo)
• Não trabalham com dados
• Principais instruções:
• CREATE
• ALTER
• DROP
8. LINGUAGEM SQL - DDL
• Criação de um banco de dados
create database nome do banco;
• Criação de uma tabela
create table nome da tabela (descrição dos campos);
• Na descrição dos campos, especificamos o nome do
campo, tipo de dado, tamanho(se necessário) e
restrições
9. LINGUAGEM SQL - DDL
Algumas restrições:
• primary key: define o campo como chave primária
• not null: define que o campo deverá ser de preenchimento
obrigatório
• auto_increment: define que o campo será autoincrementado
(autonumeração)
• Foreign key – define o campo como chave estrangeira
10. TIPOS DE DADOS
Numéricos Inteiros
• Tinyint ( pequeno de -128 a 127)
• Smallint ( pequeno -32768 a 32768 )
• Int ( normal – de –8388608 a 8388607 )
• Bigint
• Numéricos Decimais
• Float
• Double
• Decimal
11. TIPOS DE DADOS
Data e hora
• Date
data no formato ano-mês-dia
• Datetime
combinação de data e hora (aa-mm-dd hh:mm:ss)
• Timestamp
combinação de data e hora com formato variado
• Time
hora no formato hh:mm:ss
• Year
armazena um ano
12. TIPOS DE DADOS
Caracter
• Char(n)
Conjunto de caracteres com tamanho fixo(n)
• Varchar(n)
Conjunto de caracteres de tamanho variável
13. EXEMPLO
CREATE DATABASE ESCOLA;
USE ESCOLA;
CREATE TABLE Aluno (
IDAluno Int PRIMARY KEY not null auto_increment,
NomeAluno Varchar(60) not null,
Sexo Char not null,
DataNascimento Date,
Telefone Varchar(15));
14. EXEMPLO
CREATE TABLE Professor (
IDProfessor Int PRIMARY KEY not null auto_increment,
NomeProfessor Varchar(60) not null,
CTPS Varchar(6) not null,
Email Varchar(200));
CREATE TABLE Curso (
IDCurso Int PRIMARY KEY not null auto_increment,
NomeCurso Varchar(30) not null,
Horas Int not null,
IDProfessor Int not null,
FOREIGN KEY(IDProfessor) REFERENCES Professor
(IDProfessor));
15. EXEMPLO
CREATE TABLE Estuda (
IDEstuda Int PRIMARY KEY not null auto_increment,
IDCurso Int not null,
IDAluno Int not null,
NotaAlunoCurso Double not null,
FOREIGN KEY(IDCurso) REFERENCES Curso (IDCurso),
FOREIGN KEY(IDAluno) REFERENCES Aluno (IDAluno));
16. LINGUAGEM SQL - DDL
• Exclusão de um banco de dados
drop database nome do banco;
• Exclusão de uma tabela
drop table nome da tabela;
Exemplos:
drop database Escola;
drop table Aluno;
drop table Professor;
17. LINGUAGEM SQL - DDL
Alteração das colunas de uma tabela
• Acrescentar um campo
alter table nome da tabela
add campo/especificações;
• Remover um campo
alter table nome da tabela
drop campo;
• Alterar um campo
alter table nome da tabela
change campo novas especificações;
18. EXEMPLO
• Adicionar um campo chamado Celular à tabela
Professor:
alter table Professor add Celular varchar(15);
• Adicionar um campo chamado RG à tabela Aluno:
alter table ALuno add RG varchar(10);
• Adicionar um campo chamado NumDependentes à
tabela Professor:
alter table Professor add NumDependentes tinyint not null;
19. EXEMPLO
• Alterar o tamanho do campo Email para 150 caracteres:
alter table Professor change Email Email varchar(150);
• Alterar o nome do campo Telefone na tabela Aluno para
TelefoneAluno
alter table Aluno change Telefone TelefoneAluno varchar(15);
20. EXEMPLO
• Remover da tabela Professor o campo Email:
alter table Professor drop Email;
• Remover da tabela Aluno o campo DataNascimento:
alter table Aluno drop DataNascimento;
21. LINGUAGEM SQL – DML
• Inserção de dados em uma tabela
insert into nome da tabela values(lista de valores);
Obs.:
• Os valores devem estar separados por vírgulas e
devem respeitar a ordem dos campos na tabela.
• Quando um campo for auto_increment, seu valor deve
ser substituído pela sentença null
22. EXEMPLO
• Inserir dados na tabela ALUNO
insert into ALUNO values (null,”DANIELA DIAS”,”F”,”1989-04-
11”,”(31)32224411”);
insert into ALUNO values (null,”JULIANO DO CARMO”,”M”,”1989-
11-03”,”(31)33339987”);
insert into ALUNO values (null,”ISABEL MENDES”,”F”,”1990-01-
03”,”(31)37412200”);
insert into ALUNO values (null,”CARLOS PEIXOTO”,”M”,”1988-10-
01”,”(31)33347411”);
23. EXEMPLO
Inserir dados na tabela PROFESSOR
insert into PROFESSOR values
(null,”ALEXANDRE”,”123456”,”alexandre@yahoo.com.br”);
insert into PROFESSOR values
(null,”MARIA”,”111111”,”maria@terra.com.br”);
insert into PROFESSOR values
(null,”EDUARDO”,”123456”,”eduardo@ig.com.br”);
insert into PROFESSOR values
(null,”LUCIANA”,”938826”,”luciana@gmail.com”);
24. EXEMPLO
Inserir dados na tabela CURSO
insert into CURSO values (null,”VB.NET”,60,1);
insert into CURSO values (null,”PHP”,120,3);
insert into CURSO values (null,”JAVA”,80,4);
insert into CURSO values (null,”SQL”,40,1);
insert into CURSO values (null,”LÓGICA”,60,2);
25. EXEMPLO
Inserir dados na tabela ESTUDA
insert into ESTUDA values (null,3,1,70);
insert into ESTUDA values (null,3,2,75);
insert into ESTUDA values (null,1,4,90);
insert into ESTUDA values (null,1,2,55);
insert into ESTUDA values (null,2,3,50);
26. LINGUAGEM SQL – DML
• Alteração de dados em uma tabela
UPDATE tabela SET coluna = novo_valor_armazenado
• WHERE coluna = valor_filtro;
• ‘
27. LINGUAGEM SQL – DML
Exclusão de dados em uma tabela
delete from nome da tabela where condição;
Obs.:
• A condição dever ser representada por uma expressão
lógica que consiga localizar o registro a ser excluído
• Caso a condição localize mais de um registro, eles
serão excluídos.
• A condição é opcional. Se não for especificada, serão
excluídos TODOS os registros da tabela.
28. EXEMPLO
• Excluir o aluno cuja matrícula seja 7
delete from ALUNO where IDAluno=7;
• Excluir o professor de nome “ALEXANDRE”
delete from PROFESSOR where NomeProfessor =
“ALEXANDRE”;
• Excluir os cursos que tenham carga horária inferior
a 30
delete from CURSO where HORAS<30;
29. EXEMPLO
• Excluir todos os alunos cadastrados
delete from ALUNO;
• Excluir todos os cursos com mais de 60 horas
ministrados pelo professor com código 1
delete from CURSO where Horas>60 And IDProfessor = 1;
• Excluir todos os cursos que tenham a palavra
“CLIPPER” em qualquer lugar do nome
delete from CURSO where NomeCurso like “%CLIPPER%”;
30. LINGUAGEM SQL - DQL
• Parte da linguagem SQL destinada a executar
operações de consultas (recuperação) de registros,
ou seja, permite visualizar o conteúdo parcial ou
total de tabelas.
• Representada pela instrução SELECT.
• Como o formato desta instrução é muito extenso,
vamos apresentando suas sentenças aos poucos.
31. LINGUAGEM SQL - DQL
• select campos from nome da tabela;
• Neste formato, podemos visualizar alguns ou todos
os campos de todos os registros de uma tabela.
• No lugar de campos, descrevemos o nome da cada
campo que deve aparecer na listagem, separados
por vírgulas.
• Caso queira que todos os campos apareçam na
listagem, use o caracter *
32. EXEMPLO
• Visualizar código e nome de todos os alunos
cadastrados
select IDAluno, NomeAluno from ALUNO;
• Visualizar código, nome e carga horária de todos os
cursos cadastrados
select IDCurso, NomeCurso, Horas from CURSO;
• Visualizar nome e email de todos os professores
cadastrados
select NomeProfessor, Email from PROFESSOR;
33. EXEMPLO
• Visualizar todos os campos dos alunos cadastrados
select * from ALUNO;
• Visualizar todos os campos dos cursos cadastrados
select * from CURSO;
• Visualizar todos os campos dos professores
cadastrados
select * from PROFESSOR;
34. LINGUAGEM SQL - DQL
A sentença WHERE
• Vem após a especificação do nome da tabela
• Permite criar uma ou mais condições, que serão usadas para
selecionar os registros retornados pela consulta
• Aceita os operadores lógicos AND, OR, NOT
35. EXEMPLO
• Visualizar todos os campos dos alunos do sexo feminino
(F)cadastrados
select * from ALUNO where SEXO = “F”;
• Visualizar todos os campos dos cursos que tenham
carga horário igual ou superior a 80 horas
select * from CURSO where HORAS >= 80;
• Visualizar todos os campos dos cursos lecionados pelo
professor de código 2 que tenham até 40 horas
select * from CURSO where IDPROFESSOR = 2 and HORAS <=40;
36. LINGUAGEM SQL - DQL
• A sentença ORDER BY
• Numa consulta, os registros são apresentados conforme
ordem de armazenamento na tabela
• Através da sentença ORDER BY, é possível definir novos
campos e forma de ordenação(crescente/decrescente)
• Deve ser colocada após a sentença WHERE
• Podem ser definidos quantos campos o usuário quiser. Caso
haja coincidência de valores no primeiro campo, a
ordenação será feita pelo segundo. Isso vale para os demais
campos citados.
• Para ordenação decrescente, deve ser usada a sentença
DESC
37. EXEMPLO
• Visualizar todos os campos dos alunos do sexo feminino
(F)cadastrados
select * from ALUNO where SEXO = “F” order by NOMEALUNO;
• Visualizar todos os campos dos cursos que tenham
carga horário igual ou superior a 80 horas
select * from CURSO where HORAS >= 80 order by NOMECURSO;
• Visualizar todos os campos dos cursos lecionados pelo
professor de código 2 que tenham até 40 horas
select * from CURSO where IDPROFESSOR = 2 and HORAS <=40
order by NOMECURSO desc;
38. LINGUAGEM SQL - DDL
• Operadores IN, LIKE e BETWEEN
• São usados nas comparações definidas na sentença
WHERE.
• IN : Testa se o valor do campo está contido numa
lista de valores pré-estabelecidos. Pode substituir
uma sequência de condições, com o mesmo campo,
que utilize o operador OR.
• BETWEEN: Testa se o valor do campo está no
intervalo definido
• LIKE: faz comparação aproximada, localizando parte
de uma sequência de caracteres em um campo.
39. EXEMPLOS
• Listar todos os dados dos cursos que tenham carga
horária de 40, 60 ou 80 horas
select * from CURSOS where HORAS in (40,60,80);
• Listar todos os dados dos cursos que tenham a
palavra “PROGRAMAÇÃO” no nome
select * from CURSOS where NOMECURSO like
“%PROGRAMAÇÃO%”;
• Listar todos os dados dos cursos que tenham carga
horária entre 50 e 90 horas
select * from CURSOS where HORAS between 50 and 90;
40. LINGUAGEM SQL - DQL
• Funções de agregação
• São funções da linguagem que servem para agrupar
informações, agregando numa única linha o conteúdo de
vários registros
• Principais funções de agregação:
• COUNT
• MIN
• MAX
• SUM
• AVG
41. LINGUAGEM SQL - DQL
• COUNT
• Retorna a quantidade de registros existentes
• MIN
• Retorna o menor valor de um campo em um grupo de registros
• MAX
• Retorna o maior valor de um campo em um grupo de registros
• SUM
• Retorna a soma dos valores de um campo em um grupo de
registros
• AVG
• Retorna a média dos valores de um campo em um grupo de
registros
42. EXEMPLOS
• Contar o número de cursos
select count(*) from curso;
• Contar o número de cursos que tem número de
horas igual ou superior a 80
select count(*) from curso where horas>=80;
• Retornar a menor quantidade de horas,
considerando todos os cursos
select min(horas) from curso;
• Retornar a menor quantidade de horas,
considerando todos os cursos com número de horas
acima de 50
select min(horas) from curso where horas > 50;
43. EXEMPLOS
• Retornar a maior quantidade de horas, considerando
todos os cursos
select max(horas) from curso;
• Retornar a nota média dos alunos que estão
matriculados no curso 1
select avg(NotaAlunoCurso) from estuda where idcurso=1;
• Retornar a soma das notas do aluno de matrícula 1:
select sum(NotaAlunoCurso) from estuda where idaluno = 1;
44. GROUP BY
• Esta cláusula serve para agrupar os registros, a partir do
campo especificado. Assim, o resultado de uma consulta
é dado em função destes grupos. Com os grupos
formados é possível aplicar outras funções de agregação
(sum, count, max, etc)
45. EXEMPLO
• Mostrar a quantidade de alunos, por sexo
select sexo, count(*) from aluno group by sexo;
• Mostrar a nota média dos alunos, por curso
select idcurso, avg(notaalunocurso) from estuda group by
idcurso;
• Mostrar a quantidade de alunos, por curso
select idcurso, count(*) from estuda group by idcurso;
46. HAVING
• Funciona como uma sentença WHERE, mas é
aplicada ao grupo de registros selecionado pela
sentença GROUP BY
• Permite especificar uma ou mais condições que serão
analisadas após o agrupamento dos registros pelo
GROUP BY. Só serão selecionados os grupos que
atenderem às condições estabelecidas.
• IMPORTANTE: Quando usamos a cláusula HAVING, a
seleção não é feita registro a registro, mas sim grupo a
grupo.
47. EXEMPLO
• Mostrar a quantidade de alunos por sexo, apenas quando
essa quantidade for superior a 5
select idcurso, count(*) from estuda group by idcurso having
count(*) > 5
• Mostrar a nota média dos alunos, por curso, somente quando
esta média for igual ou superior a 70
select idcurso, avg(notaalunocurso) from estuda group by idcurso
having avg(notaalunocurso) >=70;
• Mostrar a quantidade de alunos, por curso, considerando apenas
os cursos com 6 ou mais alunos
select sexo, count(*) from aluno group by sexo having count(*) > 6;
48. SUBCONSULTAS
• Consiste em uma instrução SELECT adicionada
dentro de outra instrução SELECT
• A segunda instrução é executada e retorna um valor,
que servirá de entrada para a primeira consulta
• Assim, numa subconsulta, temos dois “momentos”:
no primeiro, a consulta mais interna é executada e
retorna um ou mais valores; no segundo, é
executada a consulta principal, retornando os
registros que atendam às condições que utilizam os
valores retornados na primeira consulta
49. SUBCONSULTAS
• Uma subconsulta é utilizada quando não se sabe os
valores a serem usados na criação das condições
• Devemos observar a compatibilidade entre o campo
usado na comparação e o valor retornado
• Uma subconsulta pode retornar mais de um valor;
neste caso, na comparação da consulta principal,
devemos usar o operador IN
50. EXEMPLOS
• Listar código e nome dos cursos que são lecionados
pelo mesmo professor que leciona o curso “PHP”
select idcurso, nomecurso from curso where idprofessor = (select
idprofessor from curso where nomecurso = "PHP");
• Listar nome e carga horária dos cursos que tem
carga horária igual ou superior ao curso “JAVA”
select nomecurso, horas from curso where horas > (select
horas from curso where nomecurso = "JAVA");
51. EXEMPLOS
• Listar código de aluno e código de curso dos alunos
matriculados no(s) mesmo(s) curso(s) que o aluno
de matricula 1
select idaluno, idcurso from estuda where idcurso in (select idcurso
from estuda where idaluno = 1);