0% acharam este documento útil (0 voto)
10 visualizações31 páginas

ApresentacaoUTFPR Parte2 MySQL

O documento é um tutorial sobre MySQL, utilizado em cursos de extensão no Instituto de Ciências Matemáticas e de Computação da USP. Ele abrange tópicos como arquitetura, comandos administrativos, sistema de privilégios e SQL, além de ferramentas de gerenciamento de banco de dados. O material foi produzido por Enzo Seraphim, André Luís dos Santos Domingues e Adenilso da Silva Simão em março de 2003.

Enviado por

lucasfarias.2024
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
10 visualizações31 páginas

ApresentacaoUTFPR Parte2 MySQL

O documento é um tutorial sobre MySQL, utilizado em cursos de extensão no Instituto de Ciências Matemáticas e de Computação da USP. Ele abrange tópicos como arquitetura, comandos administrativos, sistema de privilégios e SQL, além de ferramentas de gerenciamento de banco de dados. O material foi produzido por Enzo Seraphim, André Luís dos Santos Domingues e Adenilso da Silva Simão em março de 2003.

Enviado por

lucasfarias.2024
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 31

Instituto de Ciências Matemáticas e de Computação

ISSN - 0103-2585

Tutorial de MySQL

Enzo Seraphim
André Luís dos Santos Domingues
Adenilso da Silva Simão

No¯ 60

NOTAS DIDÁTICAS DO ICMC

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

2 Programas e Comandos Administrativos 2


Programas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

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

4 SQL – Structured Query Language 4


Comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Exemplo de um Controle Acadêmico . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Comandos DDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
create table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
alter table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
drop table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
create index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
drop index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Comandos DML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
insert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
update . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
select . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Cláusula where . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Cláusula group by . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Cláusula having . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Cláusula order by . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Operador in . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Operador between...and . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Operador like . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Operador is null . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Função avg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Função count . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Funções min e max . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Função sum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

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

Visão Geral Visão Geral


Servidor de banco de dados SQL multi-usuário e Trabalha com diferentes plataformas: Linux,
multi-threaded FreeBSD, NetBSD, Solaris, SCO Unix, Win32,
Alta velocidade de execução WindowsNT e OS/2
Tabelas de disco sob a forma b-tree com Sistema de privilégios flexível, simples, eficiente e
compressão de índices seguro
Alocação de memória extremamente rápida Manipula grandes bancos de dados com vastos
Possui APIs C, C++, Eiffel, Java, Perl, PHP, Python, volumes de informações, na ordem de 50.000.000
TCL e ODBC registros
Escrita em C e C++. Testada com diferentes
compiladores
Clientes podem conectar-se ao servidor MySQL
utilizando conexões TCP/IP
Seraphim, Domingues e Simão – Tutorial de MySQL – p.5/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.6/83

Arquitetura
O Banco de Dados MySQL
Várias Bases de Dados
Várias Tabelas
Vários Registros
Várias Colunas

Seraphim, Domingues e Simão – Tutorial de MySQL – p.7/83

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

Privilégios Tabela host


Atribuição de um conjunto de privilégios A tabela host determina quais os hosts que estão
Um usuário habilitados a acessar o servidor MySQL
Em um determinado host Estrutura de colunas
Pode executar comandos host, db, select_priv, insert_priv,
base de dados, tabelas ou colunas update_priv, delete_priv, create_priv,
Este conjunto de privilégios pode ser drop_priv
Selecionar, inserir, atualizar e excluir As duas primeiras colunas estabelecem de qual
informações de uma tabela host o banco de dados pode ser acessado e as
colunas terminadas em priv são privilégios de
Criar, modificar ou excluir tabelas
acesso especificados com Y ou N (o default é N)
Esses privilégios são dados em cinco tabelas
host, user, db, tables_priv e column_priv

Seraphim, Domingues e Simão – Tutorial de MySQL – p.10/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.11/83

Tabela user Tabela db


A tabela user determina os usuários que podem A tabela db contém as informações relativas a qual
acessar o servidor e suas senhas de identificação a banco de dados um usuário de um certo host pode
partir de um host. acessar.
Estrutura de colunas Estrutura de colunas
host, user, password, select_priv, host, db, user, select_priv, insert_priv,
insert_priv, update_priv, delete_priv, update_priv, delete_priv, create_priv,
create_priv, drop_priv, reload_priv, drop_priv
shutdown_priv, process_priv, file_priv

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

4 SQL – Structured Query Language

SQL – Structured Query Language Exemplo


Os comandos podem ser agrupados em 3 classes Modelo Entidade-Relacionamento
DDL – Data Definition Language
Comandos para a Definição de Relações
DML – Data Manipulation Language
Comandos para a Manipulação de Relações
DCL – Data Control Language
Comandos para controle do Gerenciador,
Conexão e Usuário

Seraphim, Domingues e Simão – Tutorial de MySQL – p.16/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.17/83

Exemplo Comandos DDL


Modelo Relacional create [database|table|index]
autor = {cod_autor, nome, nascimento} Cria uma definição
alter [table]
livro = {titulo, cod_autor, cod_editora,
valor_real, publicacao, volume} Altera uma definição
drop [database|table|index]
editora = {cod_editora, razao, endereco, cidade} Exclui uma definição

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

alter table Exemplo


Altera as definições de campos e de restrições de Adicionar o campo e-mail na tabela autor depois
uma tabela da coluna nome
Sintaxe completa 1 alter table autor
http://www.mysql.com/documentation/mysql/ 2 add
3 email varchar(30)
bychapter/manual_Reference.html#ALTER_TABLE 4 after
5 nome;

Modificar o tamanho do campo nome na tabela


autor
1 alter table autor
2 modify
3 nome varchar(75) not null;

Seraphim, Domingues e Simão – Tutorial de MySQL – p.24/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.25/83

drop table Exemplo


Exclui uma tabela existente de um banco de dados Apagar as tabelas autor, editora e livro
Sintaxe completa 1 drop table autor;
http://www.mysql.com/documentation/mysql/ 2 drop table editor;
bychapter/manual_Reference.html#DROP_TABLE 3 drop table livro;

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

Função dos índices


Auxiliar o gerenciador em uma pesquisa e/ou Criar um índice em ordem ascendente para os
ordenação de um ou mais campos na base de campos cidade e razao para a tabela editora
dados
1 create index indCidadeRazao on
2 editora (cidade, razao);

Seraphim, Domingues e Simão – Tutorial de MySQL – p.28/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.29/83

drop index Exemplo


Exclui um índice existente de uma tabela Apagar o índice indNome da tabela autor e o índice
Sintaxe completa indCidadeRazao da tabela editora
http://www.mysql.com/documentation/mysql/ 1 drop index indNome on autor;
bychapter/manual_Reference.html#DROP_INDEX 2 drop index indCidadeRazao on editora;

Seraphim, Domingues e Simão – Tutorial de MySQL – p.30/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.31/83

Comandos DML insert


insert Adiciona um ou múltiplos registros a uma tabela
Adiciona registros a uma tabela Sintaxe completa
update http://www.mysql.com/documentation/mysql/
Altera valores de campos de uma tabela bychapter/manual_Reference.html#INSERT
delete
Remove registros de uma tabela
select
Procura registros em uma tabela

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;

Reajustar o valor de todos os livros em 10%


1 update livro
2 set
3 valor = valor * 1.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

Exemplo Cláusula where


Selecionar todos os registros da tabela autor Especifica quais registros das tabelas listadas na
cláusula from são afetados por uma instrução
1 select * select, update ou delete
2 from autor;
Não sendo especificada uma cláusula where, a
Selecionar os campos nome e nascimento da tabela instrução usuará todos os registros da tabela
autor
1 select nome, nascimento
2 from autor;

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

Exemplo Cláusula having


Selecionar todas as editoras que publicaram algum Especifica quais registros agrupados são exibidos na
livro instrução select com uma cláusula group by
1 select razao
2 from livro, editora
3 where
4 livro.cod_editora=editora.cod_editora
5 group by
6 razao;

Seraphim, Domingues e Simão – Tutorial de MySQL – p.46/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.47/83

Exemplo Cláusula order by


Selecionar todas as editoras que publicaram mais do Ordena os registros resultantes de uma consulta por
que 5 livros um ou mais campos em ordem crescente ou
decrescente
1 select razao
2 from livro, editora Os registros são classificados pelo primeiro campo
3 where listado após a cláusula order by
4 livro.cod_editora=editora.cod_editora
5 group by Os registros que têm valores iguais naquele campo
6 razao
serão então classificados pelo valor no segundo
7 having
8 count(razao) > 5; campo

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

Exemplo Operador like


Selecionar livros com valores entre R$50,00 e Compara uma expressão de seqüência com um
R$60,00 padrão em uma expressão SQL
1 select titulo, valor
Por padrão, pode-se utilizar caracteres
2 from livro curinga (por exemplo, like ‘Mak%’, para
3 where
‘MakromBooks’)
4 valor between 50 and 60;
isolados (por exemplo, like ‘_ose’, para ‘Jose’ e
‘Rose’)

Seraphim, Domingues e Simão – Tutorial de MySQL – p.54/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.55/83

Exemplo Operador is null


Selecionar o nome de um autor que comece com a Determina se o valor de uma expressão é nulo
letra ‘E’
1 select nome
2 from autor
3 where
4 nome like ’E%’;

Seraphim, Domingues e Simão – Tutorial de MySQL – p.56/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.57/83

Exemplo Função avg


Selecionar editora com comentário nulo Calcula a média aritmética de um conjunto de
valores contido em um determinado campo
1 select titulo
2 from livro
3 where
4 comentario is null;

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

1 select razao, avg(valor) as Media


2 from editora, livro
3 where
4 editora.cod_editora = livro.cod_editora
5 group by
6 razao;

Seraphim, Domingues e Simão – Tutorial de MySQL – p.60/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.61/83

Exemplo Funções min e max


Contar o número de autores que nasceram antes de Retornam o mínimo e o máximo de um conjunto de
01/01/1970 valores contido em um determinado campo,
respectivamente.
1 select count(*)
2 from autor
3 where
4 nascimento < ’1970-01-01’;

Contar o número de livros que não possuem


publicação nula
1 select count(publicacao)
2 from livro;

Seraphim, Domingues e Simão – Tutorial de MySQL – p.62/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.63/83

Exemplo Função sum


Selecionar o livro mais caro Retorna a soma de um conjunto de valores contidos
em um determinado campo
1 select max(valor)
2 from livro; Ignora os registros que contenham campos null.

Selecionar o livro mais barato


1 select min(valor)
2 from livro;

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;

Somar os valores dos livros de cada editora


1 select razao, sum(valor)
2 from editora, livro
3 where
4 editora.cod_editora = livro.cod_editora
5 group by
6 razao;

Seraphim, Domingues e Simão – Tutorial de MySQL – p.66/83

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

Instalação Tela Principal


Download
http://www.dbtools.com.br/EN/downloads.php
Executar setup.exe
Iniciar DbTools e clicar no botão Server Manager
na barra de ferramentas
Adicionar as informações necessárias para o
Servidor de Banco de Dados
Adicionar diversos servidores

Seraphim, Domingues e Simão – Tutorial de MySQL – p.69/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.70/83

Gerenciador de Servidores Características


Criar, excluir e gerenciar
Banco de dados
Tabelas
Colunas
Índices
Restrições (chaves estrangeiras e validações)

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

Criando Índices Criando Chaves Estrangeiras

Seraphim, Domingues e Simão – Tutorial de MySQL – p.75/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.76/83

Editor de Relacionamentos Características


Gerenciamento de grupos e usuários
Suporte aos privilégios

Seraphim, Domingues e Simão – Tutorial de MySQL – p.77/83 Seraphim, Domingues e Simão – Tutorial de MySQL – p.78/83

Gerenciamento de Grupos e Usuários Características


Editor de consultas
Visão tabular
Edição dos dados

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

Seraphim, Domingues e Simão – Tutorial de MySQL – p.83/83

12
A Lista de Exercícios

A.1 Descrição do Problema


Uma universidade oferece vários cursos superiores para alunos que completaram o 2o grau. Para um
aluno concluir um curso, ele deve cumprir todas as disciplinas contidas no curso. Para cumprir uma
disciplina, o aluno precisa obter nota igual ou superior a 7. Toda disciplina é ministrada por um único
professor. Foi criado o seguinte ME-R da especificação:

Aluno N
Matricula

Professor 1
Faz parte Curso
N

Contem
Disciplina N

A partir do ME-R foi criado seguinte Modelo Relacional:

Aluno: { numAluno, nome, endereco, cidade, telefone, numCurso }

Disciplina: { numDiscip, nome, quantcreditos }

Professor: { numFunc, nome, admissao, areapesquisa }

Curso: { numCurso, nome, totalcréditos }

Aula: { numAluno(Aluno.numAluno), numDiscip(Disciplina.numDiscip), numFunc(Professor.numFunc),


semestre, nota }

DiscipCurso: {numDiscip(Disciplina.numDiscip), numCurso(Curso.numCurso) }

Na base estão cadastrados os seguintes registros:

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

11 create table aula(


12 numAluno integer(5) not null,
13 numDiscip integer(5) not null,
14 numFunc integer(5) not null,
15 semestre char(4) not null,
16 nota integer(2),
17 primary key (numAluno, numDiscip, numFunc, semestre),
18 foreign key (numAluno) references aluno,
19 foreign key (numDiscip) references disciplina,
20 foreign key (numFunc) references professor);
21

22 create table curso(


23 numCurso integer(5) not null,
24 nome char(25) not null,
25 totaldecreditos integer(10),
26 primary key (numCurso));
27

28 create table discipCurso(


29 numDiscip integer(5) not null,
30 numCurso integer(5) not null,
31 primary key (numDiscip, numCurso),
32 foreign key (numDiscip) references disciplina,
33 foreign key (numCurso) references curso);
34

35 create table disciplina(


36 numDiscip integer(5) not null,
37 nome char(30),
38 quantcreditos integer(5),
39 primary key (numDiscip));
40

41 create table professor(


42 numFunc integer(5) not null,
43 nome char(50) not null,
44 admissao date,
45 areapesquisa char (25),
46 primary key (numFunc));

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

10 insert into aula values


11 (111,1,45675,"1/98",5),
12 (111,2,45675,"1/98",6),
13 (111,2,45675,"2/98",7),
14 (115,3,45690,"1/98",8),
15 (115,3,45690,"2/98",9),
16 (111,4,45692,"1/98",10),
17 (112,4,45692,"1/98",8),
18 (113,5,45691,"1/98",8),
19 (114,1,45675,"2/98",8),
20 (114,2,45675,"1/98",9),
21 (112,1,45675,"2/98",7),
22 (111,7,45693,"1/98",10),
23 (115,6,45690,"1/98",9),
24 (112,7,45693,"1/98",5),
25 (114,4,45692,"1/98",6),
26 (114,4,45692,"2/98",8),
27 (116,4,45692,"1/98",3),
28 (116,4,45692,"2/98",9),
29 (114,7,45693,"1/98",9),
30 (116,7,45693,"1/98",8);
31

32 insert into curso values


33 (2142,"Engenharia Civil",1500),
34 (2143,"Ciencia da Computação",2000),
35 (2144,"Direito",1750) ,
36 (2145,"Pedagogia",1500),
37 (2146,"Odontologia",1600);
38

39 insert into discipCurso values


40 (1,2143),
41 (2,2143),
42 (3,2144),
43 (4,2143),
44 (4,2142),
45 (5,2145),
46 (6,2144),
47 (7,2143),
48 (7,2142);
49

50 insert into disciplina values


51 (1,"Banco de Dados",30),
52 (2,"Estrutura de Dados",30),

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

59 insert into professor values


60 (45675,"Abgair Simon Ferreira","1992-04-10","Banco de Dados"),
61 (45690,"Ramon Travanti","1993-05-20","Direito Romano"),
62 (45691,"Gustavo Golveia Netto","1993-04-05","Sociologia"),
63 (45692,"Marcos Salvador","1993-03-31","Matemática Financeira"),
64 (45693,"Cintia Falcão","1993-02-15","Engenharia Software");

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

Você também pode gostar