ApresentacaoUTFPR Parte2 MySQL
ApresentacaoUTFPR Parte2 MySQL
ISSN - 0103-2585
Tutorial de MySQL
Enzo Seraphim
André Luís dos Santos Domingues
Adenilso da Silva Simão
No¯ 60
São Carlos
Mar/2003
Este material contém os slides utilizados nos cursos de exten-
são universitária sobre MySQL realizados no Instituto de Ciên-
cias Matemáticas e de Computação da Universidade de São Paulo
(ICMC/USP) nos períodos:
de 31 de março a 7 de abril de 2002; e
de 14 a 18 de setembro de 2002.
Sumário
1 Introdução 1
Histórico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Visão Geral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Arquitetura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
3 Sistema de Privilégios 2
Esquema Geral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Tabela host . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Tabela user . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Tabela db . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Tabela tables_priv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Tabela columns_priv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
5 DbTools 13
Visão Geral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Instalação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Tela Principal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
i
Gerenciador de Servidores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Características . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Gerenciamento de Tabelas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Propriedades das Tabelas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Criando Índices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Criando Chaves Estrangeiras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Editor de Consultas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Gerenciamento de Grupos e Usuários . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Editor de Consultas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Área de Tabela . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
A Lista de Exercícios 16
A.1 Descrição do Problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
A.2 Exercícios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
A.3 Respostas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
ii
1 Introdução
Histórico Histórico
Banco de Dados Relacional - Open Source A TcX usa o MySQL:
Criado pela empresa sueca T.c.X. DataKonsultAB: desde 1996
David Axmark mais de 40 banco de dados
Allan Larsson contendo 10.000 tabelas
Michael “Monty” Wiedenus 500 dessas tabelas têm mais de 7 milhões de
registros
Criado pela necessidade de um Servidor SQL:
totalizando aproximadamente 100 Gbytes de
que pudesse manipular grande quantidade de
dados
dados
com alta velocidade de acesso
Seraphim, Domingues e Simão – Tutorial de MySQL – p.3/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.4/83
Arquitetura
O Banco de Dados MySQL
Várias Bases de Dados
Várias Tabelas
Vários Registros
Várias Colunas
1
2 Programas e Comandos Administrativos
Programas Comandos
shell> service mysqld start& mysql> show databases;
Inicia o daemon MySQL (server) Linux RedHat Mostra todas as bases de dados criadas
shell> mysqladmin -u <usuário> -p ping mysql> use <base_de_dados>;
Verifica se o servidor está ativo Seleciona uma base de dados para manipular
Parâmetro (-p) para digitar a senha de usuário mysql> show tables from <base_de_dados>;
shell> mysqladmin -u <usuário> -p shutdown Mostra todas as tabelas de uma base de dados
Desliga o daemon do MySQL mysql> show columns from <tabela>; ou
shell> mysqladmin -u <usuário> -p reload mysql> desc <tabela>;
Recarrega as permissões dos usuários Mostra as colunas de uma tabela
shell> mysql -u <usuário> -p <base de dados>
Prompt de interação de comandos SQL
Seraphim, Domingues e Simão – Tutorial de MySQL – p.8/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.9/83
3 Sistema de Privilégios
Seraphim, Domingues e Simão – Tutorial de MySQL – p.10/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.11/83
Seraphim, Domingues e Simão – Tutorial de MySQL – p.12/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.13/83
2
Tabela tables_priv Tabela columns_priv
A tabela tables_priv contém as informações A tabela colunms_priv contém as informações
relativas a qual tabela de um banco de dados um relativas a qual coluna da tabela de um banco de
usuário de um certo host pode acessar. dados um usuário de um certo host pode acessar.
Estrutura de colunas Estrutura de colunas
host, db, user, table_name, grantor, host, db, user, table_name, column_name,
timestamp, table_priv, column_priv timestamp, column_priv
table_priv = [‘select’, ‘insert’, ‘update’, column_priv = [‘select’, ‘insert’, ‘update’,
‘delete’, ‘create’, ‘drop’, ‘grant’, ‘references’, ‘references’]
‘index’, ‘alter’]
column_priv = [‘select’, ‘insert’, ‘update’,
‘references’]
Seraphim, Domingues e Simão – Tutorial de MySQL – p.14/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.15/83
Seraphim, Domingues e Simão – Tutorial de MySQL – p.16/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.17/83
Seraphim, Domingues e Simão – Tutorial de MySQL – p.18/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.19/83
3
create table Exemplo
Cria uma nova tabela com seus campos e define as Criar a tabela autor
restrições de campo
1 create table autor (
Sintaxe completa 2 cod_autor integer(3) not null,
3 nome varchar(70) not null,
http://www.mysql.com/documentation/mysql/ 4 nascimento date not null,
bychapter/manual_Reference.html#CREATE_TABLE 5 primary key (
6 cod_autor) ,
7 unique (
8 nome ,
9 nascimento));
Seraphim, Domingues e Simão – Tutorial de MySQL – p.20/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.21/83
Exemplo Exemplo
Criar a tabela editora Criar a tabela livro
1 create table editora ( 1 create table livro (
2 cod_editora integer(3) not null, 2 titulo char(70) not null,
3 razao varchar(70) , 3 cod_autor integer(3) not null,
4 endereco char(70) , 4 cod_editora integer(3) not null,
5 cidade char(70) , 5 valor float(7,2) ,
6 primary key ( 6 comentario blob ,
7 cod_editora)); 7 publicacao date ,
8 volume integer(2) ,
9 primary key (
10 titulo ,
11 cod_autor) ,
12 foreign key (
13 cod_autor) references autor ,
14 foreign key (
15 cod_editora) references editora);
Seraphim, Domingues e Simão – Tutorial de MySQL – p.22/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.23/83
Seraphim, Domingues e Simão – Tutorial de MySQL – p.24/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.25/83
Seraphim, Domingues e Simão – Tutorial de MySQL – p.26/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.27/83
4
create index Exemplo
Cria um novo índice em uma tabela existente Criar um índice em ordem descendente para o
Sintaxe completa campo nome para a tabela autor
http://www.mysql.com/documentation/mysql/ 1 create index indNome on
bychapter/manual_Reference.html#CREATE_INDEX 2 autor (nome desc);
Seraphim, Domingues e Simão – Tutorial de MySQL – p.28/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.29/83
Seraphim, Domingues e Simão – Tutorial de MySQL – p.30/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.31/83
Seraphim, Domingues e Simão – Tutorial de MySQL – p.32/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.33/83
Exemplo Exemplo
Adicionar um registro na tabela autor Inserir na tabela autor2 os autores que nasceram
antes de 01/01/1960
1 insert into autor
2 (cod_autor, nome, nascimento) 1 create table autor2 (
3 values 2 cod_autor integer(3) not null,
4 (1, ’Ramakrishman, R.’, ’1960-01-01’); 3 nome varchar(70) not null,
4 nascimento date not null,
5 primary key (
Adicionar um registro na tabela editora 6 cod_autor) ,
7 unique (
1 insert into editora
8 nome ,
2 (cod_editora, razao, endereco, cidade)
9 nascimento));
3 values
4 (1, ’McGraw - Hill’, ’Av. Trab. S~
ao-Manuelense, 400’, ’S~
ao Manuel’);
Seraphim, Domingues e Simão – Tutorial de MySQL – p.34/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.35/83
5
Exemplo update
Inserir na tabela autor2 os autores que nasceram Altera valores de campos de em uma determinada
antes de 01/01/1970 tabela com base em critérios especificados
1 insert into autor2 Sintaxe completa
2 select * http://www.mysql.com/documentation/mysql/
3 from autor
4 where
bychapter/manual_Reference.html#UPDATE
5 nascimento < ’1970-01-01’;
Seraphim, Domingues e Simão – Tutorial de MySQL – p.36/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.37/83
Exemplo delete
Alterar o endereco e a cidade da tabela editora Remove registros de uma ou mais tabelas com base
com cod_editora = 1 em critérios especificados
1 update editora
Sintaxe completa
2 set http://www.mysql.com/documentation/mysql/
3 endereco = ’Av. S~
ao Carlos, 400’,
4 cidade = ’S~
ao Carlos’
bychapter/manual_Reference.html#DELETE
5 where
6 cod_editora = 1;
Seraphim, Domingues e Simão – Tutorial de MySQL – p.38/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.39/83
Exemplo select
Remover da tabela autor o registro com código Realiza busca em uma ou mais tabelas
igual a 1 Extrai determinadas colunas
1 delete Seleciona registros que atendam a determinados
2 from autor critérios
3 where
4 cod_autor = 1; Classifica ou agrupa registros resultantes em uma
determinada ordem
Remover todos os registros da tabela livro Sintaxe completa
http://www.mysql.com/documentation/mysql/
1 delete
2 from livro; bychapter/manual_Reference.html#SELECT
Seraphim, Domingues e Simão – Tutorial de MySQL – p.40/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.41/83
Seraphim, Domingues e Simão – Tutorial de MySQL – p.42/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.43/83
6
Exemplo Cláusula group by
Selecionar todos os livros com valor superior a Combina registros com valores idênticos em uma
R$60,00 determinada lista de campos em um único registro
1 select titulo, valor
Um valor de resumo é criado para cada registro se
2 from livro uma função agregada SQL for incluída na instrução
3 where select
4 valor > 60;
sum
count
Selecionar nome e titulo das tabelas autor e
livro
1 select nome, titulo
2 from autor, livro
3 where
4 autor.cod_autor = livro.cod_autor;
Seraphim, Domingues e Simão – Tutorial de MySQL – p.44/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.45/83
Seraphim, Domingues e Simão – Tutorial de MySQL – p.46/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.47/83
Seraphim, Domingues e Simão – Tutorial de MySQL – p.48/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.49/83
Exemplo Operador in
Seleciona os campos nome e nascimento da tabela Determina se o valor de uma expressão é igual a
autor ordenados pela idade algum dos vários valores em uma lista especificada
1 select nome, nascimento
Se a expressão for encontrada na lista de valores, o
2 from autor operador in retornará true, caso contrário,
3 order by retornará false.
4 nascimento desc;
Seraphim, Domingues e Simão – Tutorial de MySQL – p.50/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.51/83
7
Exemplo Operador between...and
Selecionar editoras localizada nas cidade de São Determina se o valor de uma expressão se situa
Paulo, São Carlos e São Manuel dentro de um determinado intervalo de valores
1 select *
Se o valor da expressão estiver entre v1 e v2
2 from editora (inclusive), o operador between...and retornará
3 where true, caso contrário, retornará false.
4 cidade in (’S~
ao Paulo’, ’S~
ao Carlos’, ’S~
ao Manuel’);
Seraphim, Domingues e Simão – Tutorial de MySQL – p.52/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.53/83
Seraphim, Domingues e Simão – Tutorial de MySQL – p.54/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.55/83
Seraphim, Domingues e Simão – Tutorial de MySQL – p.56/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.57/83
Seraphim, Domingues e Simão – Tutorial de MySQL – p.58/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.59/83
8
Exemplo Função count
Calcular o preço médio dos livros Conta o número de registros retornados por uma
consulta
1 select avg(valor) as Media
2 from livro; Não conta registros que tenham campos null,
exceto quando a expressão for o caractere curinga
Calcular o preço médio dos livros de cada editora asterisco (*)
Seraphim, Domingues e Simão – Tutorial de MySQL – p.60/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.61/83
Seraphim, Domingues e Simão – Tutorial de MySQL – p.62/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.63/83
Seraphim, Domingues e Simão – Tutorial de MySQL – p.64/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.65/83
Exemplo
Somar os valores dos livros da editora com código
igual a 1
1 select sum(valor)
2 from livro
3 where
4 cod_editora = 1;
9
5 DbTools
DbTools Requisitos
Ferramenta para gerenciamento de bancos de dados TCP/IP instalado e configurado adequadamente
Plataforma Windows Servidor de Banco de Dados instalado e pronto para
Suporte a MySQL e PostgreSQL aceitar conexões
Versão utilizada neste manual Usuário com privilégio para conectar ao Servidor de
Banco de Dados
1.0.15
localhost
%
Seraphim, Domingues e Simão – Tutorial de MySQL – p.67/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.68/83
Seraphim, Domingues e Simão – Tutorial de MySQL – p.69/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.70/83
Seraphim, Domingues e Simão – Tutorial de MySQL – p.71/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.72/83
10
Gerenciamento de Tabelas Propriedades das Tabelas
Seraphim, Domingues e Simão – Tutorial de MySQL – p.73/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.74/83
Seraphim, Domingues e Simão – Tutorial de MySQL – p.75/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.76/83
Seraphim, Domingues e Simão – Tutorial de MySQL – p.77/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.78/83
Seraphim, Domingues e Simão – Tutorial de MySQL – p.79/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.80/83
11
Editor de Consultas Editor de Consultas
Seraphim, Domingues e Simão – Tutorial de MySQL – p.81/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.82/83
Área de Tabela
12
A Lista de Exercícios
Aluno N
Matricula
Professor 1
Faz parte Curso
N
Contem
Disciplina N
Professor
numFunc nome admissao areapesquisa
45675 Abgair Simon Ferreira 10/04/92 Banco de Dados
45690 Ramon Travanti 20/05/93 Direito Romano
45691 Gustavo Golveia Netto 05/04/93 Sociologia
45692 Marcos Salvador 31/03/93 Matemática Financeira
45693 Cintia Falcão 15/02/93 Engenharia Software
13
Curso
numCurso nome totalcréditos
2142 Engenharia Civil 1500
2143 Ciência da Computação 2000
2144 Direito 1750
2145 Pedagogia 1500
2146 Odontologia 1600
Disciplina
numDiscip nome quantcreditos
1 Banco de Dados 30
2 Estrutura de Dados 30
3 Direito Penal 25
4 Cálculo Numérico 30
5 Psicologia Infantil 25
6 Direito Tributário 33
7 Engenharia de Software 27
DiscipCurso
numDiscip numCurso
1 2143
2 2143
3 2144
4 2143
4 2142
5 2145
6 2144
7 2143
7 2142
14
Aula
numAluno numDiscip numFunc semestre nota
111 1 45675 1/98 5,00
111 2 45675 1/98 6,00
111 2 45675 2/98 7,00
115 3 45690 1/98 8,00
115 3 45690 2/98 9,00
111 4 45692 1/98 10,00
112 4 45692 1/98 8,00
113 5 45691 1/98 8,00
114 1 45675 2/98 8,00
114 2 45675 1/98 9,00
112 1 45675 1/98 7,00
111 7 45693 1/98 10,00
115 6 45690 1/98 9,00
112 7 45693 1/98 5,00
114 4 45692 1/98 6,00
114 4 45692 2/98 8,00
116 4 45692 1/98 3,00
116 4 45692 2/98 9,00
114 7 45693 1/98 9,00
116 7 45693 1/98 8,00
Aluno
numAluno nome endereco cidade telefone numCurso
111 E.C.Silva Av.São Carlos,186 São Carlos (017) 276-9999 2143
112 J.B.Scapin R.José Bonifácio, 70 São Carlos — 2142
113 C.A.Silveira R.Luiz Camões, 120 Ibaté (017) 278-8568 2145
114 M.J.Casanova Av. São Carlos, 176 São Carlos — 2143
115 S.C.Lima R.Raul Junior, 180 São Carlos (017) 273-9865 2144
116 A.Castro R. Antonio Carlos, 1 Ibaté (017) 274-8568 2142
117 J.P.Figueira R. XV de Novembro, 871 São Carlos — 2145
15
A.2 Exercícios
1) Na base de dados do MySQL:
a) Criar as tabelas com as respectivas chaves;
b) Cadastrar os dados das tabelas.
2) Comandos para as seguintes consultas:
a) Todos os cursos da universidade;
b) Quais os nomes e telefones de alunos da cidade de São Carlos em ordem descendente de nome;
c) Quais os nomes de professores que foram contratados antes de 01/jan/1993;
d) Quais os nomes de alunos que iniciam com a letra ’J’;
e) Quais os nomes das disciplinas do curso de Ciência da Computação;
f) Quais os nomes dos cursos que possuem no curriculum a disciplina Cálculo Numérico;
g) Quais os nomes das disciplina que o aluno M.J.Casanova cursou no 1o semestre de 1998;
h) Quais os nomes das disciplinas em que o aluno A.Castro foi reprovado;
i) Quais os nomes dos alunos reprovados na disciplina de Cálculo Numérico no 1o semestre de 1998;
j) Quais os nomes das disciplinas ministradas pelo prof. Ramon Travanti;
k) Quais os nomes dos professores que já ministraram a disciplina de Banco de Dados;
l) Qual a maior e a menor nota na disciplina de Cálculo Numérico no 1o semestre de 1998;
m) Quais os nomes dos alunos, nomes das disciplinas e nomes dos professores no 1o semestre de
1998 em ordem ascendente de aluno;
n) Quais os nomes dos alunos, nomes das disciplinas e notas do 1o semestre de 1998 dos alunos do
curso de Ciência da Computação;
o) Qual a média de notas do professor Marcos Salvador;
p) Quais nomes de alunos, nomes de disciplinas e notas que tiveram nota entre 5.0 e 7.0 em ordem
de ascendente de disciplina;
q) Qual a média de notas da disciplina Cálculo Numérico no 1o semestre de 1998;
r) Quantos alunos o professor Abgair teve no 1o semestre de 1998;
s) Qual a média de notas e quantidade de aulas do aluno E.C.Silva;
t) Quais as médias por nome de disciplina de todos os cursos do 1o semestre de 1998 em ordem
ascendente de disciplina;
u) Quais as médias e quantidades das notas por nome de professor no 1o semestre de 1998;
v) Qual a média por disciplina no 1o semestre de 1998 do curso do Ciência da Computação;
w) Qual a quantidade de créditos concluídos (somente nas disciplinas aprovadas) pelo aluno E.C.Silva;
x) Quais nomes dos alunos, e respectiva quantidade de créditos, que completaram no mínimo 70
créditos (somente nas disciplinas aprovadas);
y) Quais nomes dos alunos do curso de Ciência da Computação, nomes das disciplinas e nomes dos
professores no 1o semestre de 1998 e que possuem nota superior a 8.0.
A.3 Respostas
1)
a)
16
1 create table aluno(
2 numAluno integer(5) not null,
3 nome char(50) not null,
4 endereco char(30),
5 cidade char(15),
6 telefone char(15),
7 numCurso integer(5),
8 primary key (numAluno),
9 foreign key (numCurso) references curso);
10
b)
1 insert into aluno values
2 (111,"E.C.Silva","Av.São Carlos, 186","São Carlos","(17)276-9999","2143"),
17
3 (112,"J.B.Scapin", "R.José Bonifácio, 70","São Carlos","","2142"),
4 (113,"C.A.Silveira","R.Luiz Camões, 120","Ibaté","(17)278-8568","2145"),
5 (114,"M.J.Casanova","Av. São Carlos, 176","São Carlos","","2143"),
6 (115,"S.C.Lima","R.Raul Junior, 180","São Carlos","(17)273-9865","2144"),
7 (116,"A.Castro","R. Antonio Carlos, 1","Ibaté","(17)274-8568","2142"),
8 (117,"J.P.Figueira","R. XV de Novembro, 871","São Carlos","","2145");
9
18
53 (3,"Direito Penal",25),
54 (4,"Cálculo Numérico",30),
55 (5,"Psicologia Infantil",25),
56 (6,"Direito Tributário",33),
57 (7,"Engenharia de Software",27);
58
2)
a) Consulta
1 select *
2 from curso;
Resultado:
numCurso nome totaldecreditos
2142 Engenharia Civil 1500
2143 Ciencia da Computação 2000
2144 Direito 1750
2145 Pedagogia 1500
2146 Odontologia 1600
b) Consulta
1 select nome, telefone
2 from aluno
3 where cidade = "São Carlos"
4 order by nome desc;
Resultado:
nome telefone
S.C.Lima (17)273-9865
M.J.Casanova
J.P.Figueira
J.B.Scapin
E.C.Silva (17)276-9999
c) Consulta
1 select nome
2 from professor
3 where admissao < "1993-01-01";
Resultado:
19
nome
Abgair Simon Ferreira
d) Consulta
1 select nome
2 from aluno
3 where nome like "J%";
Resultado:
nome
J.B.Scapin
J.P.Figueira
e) Consulta
1 select disciplina.nome
2 from curso, disciplina, discipCurso
3 where curso.numCurso = discipCurso.numCurso and
4 disciplina.numDiscip = discipCurso.numDiscip and
5 curso.nome = "Ciência da Computação";
Resultado:
nome
Banco de Dados
Estrutura de Dados
Cálculo Numérico
Engenharia de Software
f) Consulta
1 select curso.nome
2 from curso, discipCurso, disciplina
3 where curso.numCurso = discipCurso.numCurso and
4 disciplina.numDiscip = discipCurso.numDiscip and
5 disciplina.nome = "Cálculo Numérico";
Resultado:
nome
Engenharia Civil
Ciencia da Computação
g) Consulta
1 select disciplina.nome
2 from aluno, aula, disciplina
3 where aluno.numAluno = aula.numAluno and
4 disciplina.numDiscip = aula.numDiscip and
5 aluno.nome = "M.J.Casanova" and
6 aula.semestre = "1/98"
Resultado:
20
nome
Estrutura de Dados
Cálculo Numérico
Engenharia de Software
h) Consulta
1 select disciplina.nome
2 from aluno, aula, disciplina
3 where aluno.numAluno = aula.numAluno and
4 disciplina.numDiscip = aula.numDiscip and
5 aluno.nome = "A.Castro" and
6 aula.nota < 7;
Resultado:
nome
Cálculo Numérico
i) Consulta
1 select aluno.nome
2 from aluno, aula, disciplina
3 where aluno.numAluno = aula.numAluno and
4 disciplina.numDiscip = aula.numDiscip and
5 aula.nota < 7 and
6 disciplina.nome = "Cálculo Numérico" and
7 aula.semestre = "1/98";
Resultado:
nome
M.J.Casanova
A.Castro
j) Consulta
1 select disciplina.nome
2 from aula, disciplina, professor
3 where disciplina.numDiscip = aula.numDiscip and
4 professor.numFunc = aula.numFunc and
5 professor.nome = "Ramon Travanti"
6 group by disciplina.nome;
Resultado:
nome
Direito Penal
Direito Tributário
21
k) Consulta
1 select professor.nome
2 from aula, disciplina, professor
3 where disciplina.numDiscip = aula.numDiscip and
4 professor.numFunc = aula.numFunc and
5 disciplina.nome = "Banco de Dados"
6 group by professor.nome;
Resultado:
nome
Abgair Simon Ferreira
l) Consulta
1 select max(nota), min(nota)
2 from aula, disciplina
3 where disciplina.numDiscip = aula.numDiscip and
4 aula.semestre = "1/98" and
5 disciplina.nome = "Cálculo Numérico"
6 group by disciplina.nome;
Resultado:
max(nota) min(nota)
10 3
m) Consulta
1 select aluno.nome, disciplina.nome, professor.nome
2 from aluno, aula, disciplina, professor
3 where aluno.numAluno = aula.numAluno and
4 disciplina.numDiscip = aula.numDiscip and
5 professor.numFunc = aula.numFunc and
6 aula.semestre = "1/98"
7 order by aluno.nome asc;
22
Resultado:
nome nome nome
A.Castro Cálculo Numérico Marcos Salvador
A.Castro Engenharia de Software Cintia Falcão
C.A.Silveira Psicologia Infantil Gustavo Golveia Netto
E.C.Silva Banco de Dados Abgair Simon Ferreira
E.C.Silva Estrutura de Dados Abgair Simon Ferreira
E.C.Silva Cálculo Numérico Marcos Salvador
E.C.Silva Engenharia de Software Cintia Falcão
J.B.Scapin Cálculo Numérico Marcos Salvador
J.B.Scapin Engenharia de Software Cintia Falcão
M.J.Casanova Estrutura de Dados Abgair Simon Ferreira
M.J.Casanova Cálculo Numérico Marcos Salvador
M.J.Casanova Engenharia de Software Cintia Falcão
S.C.Lima Direito Penal Ramon Travanti
S.C.Lima Direito Tributário Ramon Travanti
n) Consulta
1 select aluno.nome, disciplina.nome, aula.nota
2 from aluno, aula, curso, discipCurso, disciplina
3 where aluno.numAluno = aula.numAluno and
4 curso.numCurso = aluno.numCurso and
5 curso.numCurso = discipCurso.numCurso and
6 disciplina.numDiscip = discipCurso.numDiscip and
7 disciplina.numDiscip = aula.numDiscip and
8 aula.semestre = "1/98" and
9 curso.nome = "Ciência da Computação"
Resultado:
nome nome nota
E.C.Silva Banco de Dados 5
E.C.Silva Estrutura de Dados 6
E.C.Silva Cálculo Numérico 10
E.C.Silva Engenharia de Software 10
M.J.Casanova Estrutura de Dados 9
M.J.Casanova Cálculo Numérico 6
M.J.Casanova Engenharia de Software 9
o) Consulta
1 select avg(aula.nota)
2 from aula, professor
3 where professor.numFunc = aula.numFunc and
4 professor.nome = "Marcos Salvador"
5 group by professor.nome;
Resultado:
23
avg(aula.nota)
7.3333
p) Consulta
1 select aluno.nome, disciplina.nome, aula.nota
2 from aluno, aula, disciplina
3 where aluno.numAluno = aula.numAluno and
4 disciplina.numDiscip = aula.numDiscip and
5 aula.nota between 5 and 7
6 order by disciplina.nome asc;
Resultado:
nome nome nota
E.C.Silva Banco de Dados 5
J.B.Scapin Banco de Dados 7
M.J.Casanova Cálculo Numérico 6
J.B.Scapin Engenharia de Software 5
E.C.Silva Estrutura de Dados 6
E.C.Silva Estrutura de Dados 7
q) Consulta
1 select avg(aula.nota)
2 from aula, disciplina
3 where disciplina.numDiscip = aula.numDiscip and
4 disciplina.nome = "Cálculo Numérico" and
5 aula.semestre = "1/98"
6 group by disciplina.nome;
Resultado:
avg(aula.nota)
6.7500
r) Consulta
1 select count(*)
2 from aula, professor
3 where professor.numFunc = aula.numFunc and
4 professor.nome like "Abgair%" and
5 aula.semestre = "1/98"
6 group by professor.nome;
Resultado:
count(*)
3
24
s) Consulta
1 select avg(aula.nota), count(*)
2 from aluno, aula
3 where aluno.numAluno = aula.numAluno and
4 aluno.nome = "E.C.Silva"
5 group by aluno.nome;
Resultado:
avg(aula.nota) count(*)
7.6000 5
t) Consulta
1 select disciplina.nome, avg(aula.nota)
2 from aula, disciplina
3 where disciplina.numDiscip = aula.numDiscip and
4 aula.semestre = "1/98"
5 group by disciplina.nome
6 order by disciplina.nome asc;
Resultado:
nome avg(aula.nota)
Banco de Dados 5.0000
Cálculo Numérico 6.7500
Direito Penal 8.0000
Direito Tributário 9.0000
Engenharia de Software 8.0000
Estrutura de Dados 7.5000
Psicologia Infantil 8.0000
u) Consulta
1 select professor.nome, avg(aula.nota), count(*)
2 from aula, professor
3 where professor.numFunc = aula.numFunc and
4 aula.semestre = "1/98"
5 group by professor.nome;
Resultado:
nome avg(aula.nota) count(*)
Abgair Simon Ferreira 6.6667 3
Cintia Falcão 8.0000 4
Gustavo Golveia Netto 8.0000 1
Marcos Salvador 6.7500 4
Ramon Travanti 8.5000 2
25
v) Consulta
1 select disciplina.nome, avg(aula.nota)
2 from aula, curso, discipCurso, disciplina
3 where curso.numCurso = discipCurso.numCurso and
4 disciplina.numDiscip = discipCurso.numDiscip and
5 disciplina.numDiscip = aula.numDiscip and
6 aula.semestre = "1/98" and
7 curso.nome = "Ciência da Computação"
8 group by disciplina.nome;
Resultado:
nome avg(aula.nota)
Banco de Dados 5.0000
Cálculo Numérico 6.7500
Engenharia de Software 8.0000
Estrutura de Dados 7.5000
w) Consulta
1 select sum(disciplina.quantcreditos)
2 from aluno, aula, disciplina
3 where aluno.numAluno = aula.numAluno and
4 disciplina.numDiscip = aula.numDiscip and
5 aluno.nome = "E.C.Silva" and
6 aula.nota >= 7
7 group by aluno.nome;
Resultado:
sum(disciplina.quantcreditos)
87
x) Consulta
1 select aluno.nome, sum(disciplina.quantcreditos)
2 from aluno, aula, disciplina
3 where aluno.numAluno = aula.numAluno and
4 disciplina.numDiscip = aula.numDiscip and
5 aula.nota >= 7
6 group by aluno.nome
7 having sum(quantcreditos) >= 70;
Resultado:
nome sum(disciplina.quantcreditos)
E.C.Silva 87
M.J.Casanova 117
S.C.Lima 83
26
y) Consulta
1 select aluno.nome, disciplina.nome, professor.nome
2 from aluno, aula, curso, discipCurso, disciplina, professor
3 where aluno.numAluno = aula.numAluno and
4 curso.numCurso = discipCurso.numCurso and
5 disciplina.numDiscip = aula.numDiscip and
6 disciplina.numDiscip = discipCurso.numDiscip and
7 professor.numFunc = aula.numFunc and
8 aula.nota >= 8 and
9 aula.semestre = "1/98" and
10 curso.nome = "Ciência da Computação";
Resultado:
nome nome nome
E.C.Silva Cálculo Numérico Marcos Salvador
E.C.Silva Engenharia de Software Cintia Falcão
J.B.Scapin Cálculo Numérico Marcos Salvador
M.J.Casanova Estrutura de Dados Abgair Simon Ferreira
M.J.Casanova Engenharia de Software Cintia Falcão
A.Castro Engenharia de Software Cintia Falcão
27