Buscar

TesteSQL_Denise Lima Miranda

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 118 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 118 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 118 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Testando o SQL 
Apresentação, instalação e outras dicas. 
Este documento é um exercício sobre o SQL:1992. Você PODE testá-lo em qualquer SGBD relacional. Aqui fizemos nossos testes em um SGBD MySQL, versão 5.1.41. 
Como este documento é um exercício VÁLIDO PARA NOTA, por favor, preencha os nomes e matrículas dos alunos do grupo na tabela abaixo. 
DEPOIS de resolvido o TESTESQL TROQUE o nome do arquivo para:TESTESQL-NomeDoAluno.pdf e envie-o para joao.hypolito@fatec.sp.gov.br. 
 
No assunto escreva: TESTESQL-NomeDoAluno (Escreva SEU como no exemplo: José da Silva  Jose_da_Silva) 
 
Nome e matrícula do aluno: 
 Matrícula Nome 
 
 
Ambiente de Trabalho. 
Nós vamos usar o pacote XAMPP versão 1.7.4 (já existe versão mais recente, mas a 1.7.4 tem tudo o que precisamos). 
Este pacote está disponível para download em ( http://www.apachefriends.org/pt_br/xampp-windows.html#2287 ), (existem opções de pegar o programa instalador ou 
versões ZIPADAS, escolha a sua). Ou, se você preferir pode usar outro pacote desde que contenha as versões dos seguintes programas: 
 SGBD MySQL versão 5.x Não use versão a versão 4.x (que ainda podem ser encontrada em alguns pacotes) e nem baixe a versão 6.x (o site do MySQL recomenda 
que esta versão seja instalada em ambientes de teste). 
 Linguagem PHP versão 5.x. Você pode usar a versão 4, mas, mais adiante usaremos funções que só vão funcionar na versão 5, mas que tem a equivalência na 
versão 4. Quando isso acontecer, se você estiver usando a versão 4 deverá trocar a especificação da função. 
 Servidor de páginas. Pode ser o Apache ou TomCat ou mesmo o IIS (um pouco mais raro de encontrar). 
 
Depois de baixado o pacote instale-o seguindo as instruções de instalação padrão. O procedimento coloca o XAMPP no diretório C:\XAMPP. Lá são criados os subdiretórios: 
 Apache 2.2.17 (Servidor de página do pacote – seu navegador terá um endereço http://localhost que responde pelas páginas gravadas em c:\xampp\htdocs); 
 MySQL 5.5.8 (o SGBD mais flexível e que vem crescendo em uso em ambientes de diversos portes); 
 PHP 5.3.5 (uma linguagem computacional ampla, poderosa e muito interessante para desenvolvimento de sistemas); 
 phpMyAdmin 3.3.9 (o administrador de bases de dados em MySQL – não é o único programa com esta função mas é um dos interface mais intuitiva e de fácil uso), 
se você quiser pode usar o HeideiSQL versão 6.0 (procure a build mais recente); 
 FileZilla FTP Server 0.9.37 (um servidor de FTP – embora nós não venhamos a usar este produto); 
 Tomcat 7.0.3 (um outro servidor de página para trabalhar sob servidor Proxy sem muitos ajustes). 
 
O procedimento também instala o painel de controle que permite administrar os serviços instalados no XAMPP. 
 
Denise
Typewriter
Denise
Typewriter
1120145-2
Denise
None set by Denise
Denise
Typewriter
Denise Lima Miranda
Denise
Typewriter
Denise
Typewriter
Denise
Typewriter
Denise
Typewriter
Denise
Typewriter
Denise
Typewriter
Denise
Typewriter
O XAMP foi escrito com o intuito de facilitar a instalação de programas que permitam o desenvolvimento de sistemas em camadas. Acho, entretanto, que está evoluindo 
para ser um pacote de “Servidor WEB de bolso”. Fácil de instalar e que dá o inicio para um servidor WEB (é claro que outros aspectos devem ser considerados no Server), 
mas o XAMP já ajuda em um bocado de coisa. 
 
Depois de instalado o pacote o XAMP disponibiliza um painel de controle bem simples. 
 
Neste pequeno tutorial vamos iniciar o funcionamento do XAMP e depois mostrar o inicio do uso do phpmyadmin. 
 
O XAMPP instala os programas de um servidor WEB, mas NÃO ativa estes programas como serviço do Windows. Para tornar estes programas como serviços o XAMP tem 
um painel de controle que permite 'ativar' os programas como serviços. Note bem, ativar programa como serviço vai consumir mais recursos de máquina. Se seu 
computador tiver muitos programas instalados pode ser que o desempenho fique um pouco a dever. Se isso acontecer você pode também 'desligar' alguns serviços. Para 
nossa disciplina precisamos ter tudo 'ligado'. 
 
Começamos escrevendo a parte de ativação do servidor de páginas no XAMPP. 
 
 
No seu ambiente do Windows vá para INICIAR+Xampp e escolha o "Painel de Controle", você verá a seguinte tela. 
 
Para ativar o Apache e o MySQL basta clicar nos botões START ao lado do nome de cada programa. 
 
Se você quiser que os programas sejam iniciados ao ligar seu computador marque os itens Svc no lado esquerdo do 
nome de cada programa. Recomendo que sejam iniciados o Apache e o MySQL. 
Note que isso pode "consumir" recursos do seu computador. Você pode escolher somente iniciar os serviços a cada 
vez que for usar o MySQL. 
 
Vamos ativar o Apache e a seguir o MySQL. Basta clicar nos botões "Start" ao lado de cada serviço. 
 
Precisamos ter o Apache e o MySQL funcionando. 
 
Se você quiser pode marcar os campos SVC para ativar os programas como serviço do windows. Ao reiniciar o 
computador estes programas já estarão 'ativos'. 
 
 
A tela deve ficar assim: 
 
 
Pronto! 
Agora vamos carregar o navegador (use o Firefox ou Internet Explorer). Na barra de endereços escreva: 
http://localhost Veja que está escrito SEM o www. 
Você vai ver uma tela que permite a escolha do IDIOMA do ambiente Xampp. Escolha o Português(Brasil). 
 
Você vai ver a seguinte tela: 
 
 
 
No lado esquerdo da tela, no item "Ferramentas", escolha o subitem: phpmyadmin. 
A tela fica assim: 
 
No computador de onde tirei esta imagem já existem bases de dados instaladas. Portanto, existem mais itens do lado esquerdo do que no seu computador. 
 
Criando a Base de Dados 
Vamos criar uma base de dados: 
PRIMEIRO escolha o Collation de conexão do MySQL, abra a caixa de seleção e escolha UTF8-bin. 
Assim: 
 
 
Depois no campo COLLATION escolha também uft8-bin. No nome da base escreva: "adm_exerc_sql", idêntico ao que você está lendo, POR FAVOR. 
 
Depois da escolha certa, clique em CRIAR. 
 
A tela deve ficar assim: 
 
Note que, quando uma mensagem aparecer no quadro da direita em cor VERDE é que a ação foi executada com sucesso. 
 
 
Agora vamos executar um SCRIPT de criação das tabelas e importação dos dados. O script que cria as tabelas da base de dados está disponível para os alunos da disciplina 
de Modelagem de Banco de Dados 2 no site do 4Shared. Se você ainda não tem este script, pare aqui, providencie o script e depois continue deste ponto 
 
Clique no Botão IMPORTAR, no menu no alto da tela. Você a seguinte tela: 
 
 
Clique em "SELECIONAR ARQUIVO". Na janela de navegação localize o arquivo de script de criação das tabelas da base de dados. 
 
Você deve ver uma tela assim: 
Depois de localizado o arquivo marque-o e clique em ABRIR. A seguir clique no Botão EXECUTAR (no lado direito inferior na tela). 
 
A tela de processamento pode mostrar uma mensagem assim: 
 Depois que o processo é executado CLIQUE no nome da Base (no menu do lado esquerdo). 
 
 
Você vê a tela assim: 
 
 
Nesta base de dados temos várias tabelas que vamos usar para explorar os comandos do SQL. NOTE BEM: estamos usando o SGBD MySQL que PODE ter alguns comandos 
diferentes da SQL Padrão ANSI:1992. Por isso é importante estar atento a ter que realizar pesquisas na Internet sobre os comandos do MySQL. 
 
O que devemos fazer? 
Este trabalho é dividido em 4 (QUATRO) partes: 
1. Acerto do Dicionário de Dados da base (usando o SGBD MySQL). 
2. Prática dos comandos SQL. 
3. Tradução de Álgebra Relacional  SQL. 
4. Resolução de Perguntas com Álgebra Relacional e SQL. 
 
Estas partes devem ser feitas na ordem que estão apresentadas. 
 
O Acerto do dicionário de dados da base DEVE SER FEITO considerando CERTO o dicionário que está neste texto. De outro modo, a Base de Dados que vocês receberam 
está com DEFEITOS, ora falta campo em tabela ora a definição de um campo está errada ou então falta uma tabela inteira. Novamente afirmo: o que está CORRETO é o que 
está escrito neste documento.Portanto vocês devem acertar a base de dados. 
No segundo passo vocês devem testar e INTERPRETAR o resultado dos comandos SQL tanto no MySQL como no PostgreSQL. Os comandos foram escritos para uma base 
com o dicionário de dados CERTO. Muitos destes comandos devem ser executados em sequencia, pois o grau de dificuldade é crescente e, portanto, a interpretação fica 
mais complexa. PORTANTO NÃO PULE COMANDOS. Execute-os na ordem proposta. 
No terceiro passo (Tradução ARSQL) faça primeiro a tradução literal do comando proposto na AR para o SQL correspondente. DEPOIS, tente otimizar o comando MAS 
DEIXE O QUE FOI ESCRITO CERTO NO LUGAR. Note que este passo deve ser executado nos dois SGBDs. 
No quarto passo (Resolução de Perguntas com ARSQL) ESCREVA A ÁLGEBRA RELACIONAL e depois passe para o SQL. Finalmente, tente otimizar o que for possível mas 
DEIXE A AR e o SQL ESCRITOS. 
 
Este é um trabalho extenso. Faça-o com cuidado e atenção. 
 
Vamos ao trabalho! 
 
Acerto do Dicionário de Dados (no SGBD MySQL) 
Modelo de dados 
O modelo de dados e a Base de Dados adm_exerc_sql foram desenvolvidos com o objetivo de praticar os comandos em SQL. O Modelo de Dados NÃO representa nenhuma 
realidade por isso foi sendo "montado" com a colagem de vários segmentos de modelos de outros sistemas. À medida que foi aumentando foi-se percebendo que existem 
três entidades com um grande número de relacionamentos. A entidade CIDADES 'empresta' seu atributo identificador para várias outras, do mesmo modo a entidade 
TIPOS_TELEFONES. A entidade FUNCIONÁRIOS tem atributos de ligação e seu atributo identificador aparece em várias outras entidades. Por este motivo o Modelo de 
Dados foi dividido em três diagramas. A base tem 74 tabelas sendo que três delas apresentam uma quantidade maior de relacionamentos. Sendo assim centramos os 
diagramas "em torno" destas entidades. Note que quando existe uma entidade que se relaciona com duas ou mais destas três principais elas são representadas em dois 
diagramas. 
O primeiro diagrama mostra como centro a entidade 
cidades. 
 
 
 
 
 
 
 
 
Modelo de Dados com referência em logradouros, bairros e cidades. 
 
 
 
 
logradouros
seguradoras
planos_de_saude
instituicoes_ensino
armazens
empresas
professores
autores clientes
editoras
fornecedores fabricantes
1 N
1 N
N 1
N 1
N 1
N
1
1
N
N
1
N
1
1
N
1
N
bairrosN 1 cidadesN 1
O segundo modelo é centrado em TIPOS_TELEFONES e apresentam as entidades de relacionamentos N:M já prontas para implementação em um SGBD Relacional. 
 
Modelo de Dados com referência em TIPOS_TELEFONES. 
 
 
 
 
O terceiro modelo é centrado na entidade FUNCIONÁRIOS e apresenta a maior parte do Modelo de Dados, com os 'submodelos' juntos em um diagrama. 
nf_vendas_itens nf_vendasN N 1
duplicatas
funcionarios
armazens
produtos
movimentos
funcoesdepartamentos
editoras
N
1
1
N
1
N
1
N 1
1 N
11
N
1
historico_profissional
niveis_de_educacao
habilitacoes
consultas
funcionarios_planos
cores
instituicoes_ensino
autorias
fornecimentos
autores
atividades
area_estudo_disciplinas
N1
professores
passagens onibus
veiculos modelos_veiculos
inventarios
medicos
empresas
livros
atuacoes
capacitacoes
bibliografia
atribuicoes
area_estudo_cursos
ord_de_comprasord_compras_itens
movimentos_tipos
setores_de_atuacao
marcas_veiculos
espec_medicas
fabricantesseguros
palavras_livros
palavras_chaves
disciplinas
cursosarea_estudo_livros
area_estudo
viagens
tarefas_projetostarefas
rotas_viarias
tipos_veiculos
projetos
N
1
1N
cidades
1N
1N
N 1
1N
N1
N1
N1
N
N
1
N1
fornecedores1N
planos_de_saude
1
1N
N
1
N
1
N 11 N
N 1N 1
1
N
N
1
N
1
N
1
N
1
N
1
N 1
N
1
1
N
N1
N 1
1
N
N 1
N
1
N 1
N
1
N
1
N 1
seguradoras1N
N
1
N
1
1 N
N1
N
1
N
1
N1
1 N
N 11 N
1
N
N 1
N 1
N
1
1 N
N1
N
1
N 1
N 1
N 1
1 N
N
1
N
1
funcionarios_tarefprojs N
1
N
1
cursosN 1
sinistros
sinistros_veiculos
1
N
N
1
N 1
nf_comprasnf_compras_itens 1N 1NN1
clientes
1
N
faturas
1
N
N 1
logradouros
N 1
N 1
titulos
titulacoesN1
1
N
 
 
Modelo de Dados com referência em FUNCIONARIOS. 
 
 
 
 
Dicionário de dados 
O dicionário de dados desta base é apresentado na tabela 1. 
1. area_estudo 
Campo Tipo PK FK Ind. Nulo Padrão 
id_area_estudo int(3) S Prim Não PK da Tabela 
tx_nome_area varchar(250) Não Nome da area de conhecimento 
tx_descricao_area text(2500) Não Descrição detalhada e completa de uma Área de Estudo. 
dt_cadastro date Sim NULL Data de geração do registro 
2. area_ estudo _cursos 
Campo Tipo PK FK Ind. Nulo Padrão 
id_curso int(5) S S Sim Não Parte da PK e FK indicando o código do Curso 
id_area_ estudo int(3) S S Sim Não Parte da PK e FK indicando o código da Área de Estudo 
dt_cadastro date Sim NULL Data de geração do registro 
3. area_estudo_disciplinas 
Campo Tipo PK FK Ind. Nulo Padrão 
id_disciplina int(4) S S Sim Não Parte da PK e FK indicando o código da Disciplina. 
id_area_estudo int(3) S S Sim Não Parte da PK e FK indicando o cód. Área de Estudo. 
dt_cadastro Date Não Data de geração do registro 
4. area_ estudo _livros 
Campo Tipo PK FK Ind. Nulo Padrão 
id_livro int(9) S S Sim Não Parte da PK e FK indicando o código do livro 
id_area_ estudo int(3) S S Sim Não Parte da PK e FK indicando o código da Área de Estudo 
nu_grau_influencia int(3) Sim NULL Percentagem de cobertura da Área de Estudo no livro (num. inteiro) 
dt_cadastro date Sim NULL Data de geração do registro 
5. armazens 
Campo Tipo PK FK Ind. Nulo Padrão 
id_armazem int(4) S Prim Não PK da Tabela 
tx_nome_armazem varchar(20) Não Nome curto ou usual. 
tx_descricao_geral text(2000) Sim NULL Texto para descrição geral do armazém. 
id_logradouro int(6) S Sim Sim FK indicando o bairro da cidade onde se localiza o armazém. 
tx_complemento Varchar(25) Sim NULL 
id_cliente int(6) S Sim Não FK indicando o cliente que é dono ou aluga o armazém. 
nu_telefone char(12) Sim NULL Numero de telefone no formato OP-DD-TTTT-RRRR, sem o ZERO no inicio 
nu_cep char(8) Sim NULL CEP do endereço (sem traço) 
qt_area double(15,2) Não Número inteiro indicando a área total. 
dt_cadastro date Não Data de geração do registro 
 
 
 
 
 
Denise
Typewriter
Denise
Typewriter
Denise
Typewriter
Denise
Typewriter
6. atividades 
Campo Tipo PK FK Ind. Nulo Padrão 
id_atividade int(4) S Prim Não PK da Tabela 
tx_nome_atividade varchar(40) Não Nome curto ou usual. 
tx_descricao varchar(200) Sim NULL Descrição detalhada e completa de uma atividade profissional. 
dt_cadastro date Não Data de geração do registro 
7. atribuicoes 
Campo Tipo PK FK Ind. Nulo Padrão 
id_professor int(3) S S Sim Não Parte da PK e FK indicando o código do professor 
id_disciplina int(4) S S Sim Não Parte da PK e FK indicando o código da disciplina 
qt_horas_atribuidas int(5) Não Quantidade de horas de uma disciplina atribuídas ao professor. 
dt_atribuicao Date Sim NULL Data de atribuição da disciplina ao professor 
8. atuacoes 
Campo Tipo PK FK Ind. Nulo Padrão 
id_projeto char(6) S S Sim Não Parte da PK e FK indicando o código de projeto 
id_funcionario int(6) S S Sim Não Parte da PK e FK indicando o código de funcionário 
dt_inicio date S Não 0000-00-00 Parte da PK é a Data de inicio de atuação do Funcionário no projeto 
dt_termino date Sim NULL Data de término de atuação do funcionário no projeto 
qt_tempo_duracao decimal(5,2) Sim NULL Quantidade de horas de duração da participação do funcionário no projeto. 
dt_cadastro date Não Data de geração do registro 
9. autores 
Campo Tipo PK FK Ind. Nulo Padrão 
id_autor int(6) S Prim Não PK da Tabela 
tx_nome_autor char(90) Não Nome completo do autor. 
id_logradouro int(6) S Sim SimNULL FK com o código do bairro da cidade. 
tx_complemento Varchar(25) Sim NULL 
nu_cep char(8) Sim NULL CEP do endereço (sem traço) 
dt_nascimento date Sim NULL Data de nascimento do autor 
dt_cadastro date Não Data de geração do registro 
10. autores_tels 
Campo Tipo PK FK Ind. Nulo Padrão 
id_autor_tel int(5) S Prim Não PK da Tabela 
id_autor int(6) S Sim Não FK para a tabela autores 
id_tipo_telefone int(2) S Sim Sim NULL FK para a tabela tipos_telefones 
nu_telefone char(15) Não Número do telefone (somente os números) 
11. autorias 
Campo Tipo PK FK Ind. Nulo Padrão 
id_livro int(9) S S Sim Não Parte da PK e FK indicando o código do livro 
id_autor int(6) S S Sim Não Parte da PK e FK indicando o código do autor 
dt_cadastro date Não Data de geração do registro 
 
12. bairros 
Campo Tipo PK FK Ind. Nulo Padrão 
id_bairro int(6) S S Sim Não Parte da PK e FK indicando o código da disciplina 
tx_nome_bairro varchar(100) Sim NULL Texto com o bairro. 
id_cidade int(4) S Sim Sim NULL FK com o código da cidade. 
dt_cadastro date Não Data de geração do registro 
13. bibliografia 
Campo Tipo PK FK Ind. Nulo Padrão 
id_disciplina int(4) S S Sim Não Parte da PK e FK indicando o código da disciplina 
id_livro int(9) S S Sim Não Parte da PK e FK indicando o código do livro 
ao_tipo char(1) Não Letra indicando o tipo de bibliografia Básico ou Complementar 
dt_adocao_do_livro date Não Data de geração do registro 
14. capacitacoes 
Campo Tipo PK FK Ind. Nulo Padrão 
id_curso int(5) S S Sim Não Parte da PK e FK indicando o código do curso 
id_funcionario int(6) S S Sim Não Parte da PK e FK indicando o código do funcionário. 
dt_capacitacao date S Não Parte da PK é a data de capacitação do funcionário (quando terminou o curso) 
dt_registro date Não Data de registro do diploma do funcionário (em órgão público competente) 
dt_cadastro date Não Data de geração do registro (no Banco de Dados) 
15. cidades 
Campo Tipo PK FK Ind. Nulo Padrão 
id_cidade int(4) S Prim Não PK da Tabela 
tx_nome_cidade varchar(250) Sim NULL Nome completo da cidade 
tx_forma_acesso text(2000) Sim NULL Descrição das formas de acesso à cidade (hidrovias, estrada, ferrovias, etc) 
qt_populacao double(10) Sim NULL População estimada 
qt_area double(6,0) Não Area total municipal 
dt_cadastro date Não Data de geração do registro 
16. clientes 
Campo Tipo PK FK Ind. Nulo Padrão 
id_cliente int(6) S Prim Não PK da Tabela 
tx_nome_cliente varchar(250) Não Nome usual completo (sem abreviações) do cliente 
tx_razao_social varchar(250) Sim NULL Razão social completa do Cliente 
id_logradouro int(4) S Sim Sim NULL FK com o código do logradouro de residência do cliente 
tx_complemento Varchar(25) Sim NULL 
nu_cep char(8) Sim NULL Número do CEP 
vl_limite_compra double(15,2) Não Valor limite de compra para o cliente 
dt_cadastro date Não Data de geração do registro 
 
 
 
 
17. clientes_tels 
Campo Tipo PK FK Ind. Nulo Padrão 
id_cliente_tel int(5) S Prim Não PK da Tabela 
id_cliente int(6) S Sim Não FK para a tabela clientes 
id_tipo_telefone int(2) S Sim Sim NULL FK para a tabela tipos_telefones 
nu_telefone char(15) Não Número do telefone (somente os números) 
18. consultas 
Campo Tipo PK FK Ind. Nulo Padrão 
id_funcionario int(6) S S Sim Não Parte da PK e FK indicando o código do funcionário. 
id_medico int(6) S S Sim Não Parte da PK e FK indicando o código do médico. 
dt_hora_consulta datetime S Não Parte da PK é a Data e hora da consulta (programada). 
dt_hora_realizada datetime Sim NULL Data de hora de realização da consulta. 
id_plano_de_saude int(4) S Sim Não FK com o código do plano de saúde. 
ao_situacao_consulta char(1) Não Atributo Operacional indicando Agendada, Realizada ou Cancelada 
dt_cadastro date Não Data de geração do registro 
19. cores 
Campo Tipo PK FK Ind. Nulo Padrão 
id_cor int(6) S Prim Não PK da Tabela 
tx_nome_cor varchar(250) Não Nome usual completo (sem abreviações) 
nu_pantone int(6) Não Número da cor na tabela Pantone (indicativo de cor) 
dt_cadastro date Não Data de geração do registro 
20. cursos 
Campo Tipo PK FK Ind. Nulo Padrão 
id_curso int(5) S Prim Não PK da Tabela 
tx_nome_curso varchar(200) Não Nome usual completo (sem abreviações) 
id_instituicao int(3) S Sim Não FK com o código da instituição de ensino. 
qt_carga_horaria int(3) Não Quantidade de horas do curso 
dt_cadastro date Não Data de geração do registro 
21. departamentos 
Campo Tipo PK FK Ind. Nulo Padrão 
id_depto char(3) S Prim Não PK da Tabela 
tx_nome_depto varchar(36) Não Nome usual completo (sem abreviações) 
id_funcionario_gerente int(6) S Sim Sim NULL FK com o código do funcionário gerente do departamento. 
id_depto_superior char(3) S Sim Sim NULL FK indicando a PK na mesma tabela. Código do departamento superior na empresa. 
tx_localizacao varchar(80) Sim NULL Descrição da localização do departamento (Bloco, andar, sala,etc) 
qt_area_total int(6) Sim NULL Quantidade da área ocupada pelo departamento 
dt_criacao_depto date Sim NULL Data da criação do departamento na empresa 
dt_cadastro date Não Data de geração do registro 
 
 
 
22. departamentos_tels 
Campo Tipo PK FK Ind. Nulo Padrão 
id_depto_tel int(5) S Prim PK da Tabela 
id_depto char(3) S Sim Não FK para a tabela departamentos 
id_tipo_telefone int(2) S Sim Não FK para a tabela tipos_telefones 
nu_telefone char(15) Não Número do telefone (somente os números) 
23. disciplinas 
Campo Tipo PK FK Ind. Nulo Padrão 
id_disciplina int(4) S Prim Não PK da Tabela 
id_curso int(5) S Sim Não FK para a tabela cursos 
tx_nome varchar(250) Não Nome usual completo (sem abreviações) 
tx_ementa varchar(250) Sim NULL Texto com a ementa disciplinar 
qt_horas int(4) Não Quantidade de horas-aulas (de 60 min.) que ocupa e disciplina 
dt_cadastro date Não Data de geração do registro 
24. duplicatas 
Campo Tipo PK FK Ind. Nulo Padrão 
id_duplicata int(7) S Prim Não PK da Tabela 
id_nf_venda int(6) S Sim Não FK para a tabela nf_vendas 
dt_vencimento Date Não Data de vencimento da duplicata 
vl_duplicata Double(10,2) Sim NULL Valor da Duplicata 
vl_desconto Double(10,2) Não Valor de Desconto 
vl_liquido Double(11,2) Não Valor Líquido da Duplicata 
vl_multa Double(10,2) Não Valor da Multa por atraso de pagamento da Duplicata 
25. editoras 
Campo Tipo PK FK Ind. Nulo Padrão 
id_editora int(5) S Prim Não PK da Tabela 
tx_nome_editora char(70) Não Nome usual completo (sem abreviações) 
tx_razao_social varchar(250) Sim NULL Razão social completa. 
id_logradouro int(4) S Sim Sim NULL FK com o código do logradouro da editora 
tx_complemento Varchar(25) Sim NULL 
nu_cep char(8) Sim NULL Número do CEP 
dt_cadastro Date Não Data de geração do registro 
26. editoras_tels 
Campo Tipo PK FK Ind. Nulo Padrão 
id_editora_tel int(5) S Prim PK da Tabela 
id_editora int(5) S Sim Não FK para a tabela editoras 
id_tipo_telefone int(2) S Sim Não FK para a tabela tipos_telefones 
nu_telefone char(15) Não Número do telefone (somente os números) 
 
 
 
27. empresas 
Campo Tipo PK FK Ind. Nulo Padrão 
id_empresa int(5) S Prim Não PK da Tabela 
tx_nome_usual varchar(100) Não Nome usual completo (sem abreviações) 
tx_razao_social varchar(250) Não Razão social completa 
id_logradouro int(6) S Sim Sim NULL FK com o código do logradouro da empresa 
tx_complemento Varchar(25) Sim NULL 
nu_cep char(8) Sim NULL Número do CEP 
id_setor_atuacao int(4) S Sim Sim NULL FK com o código do setor de atuação da empresa. 
dt_cadastro DateNão Data de geração do registro 
28. empresas_tels 
Campo Tipo PK FK Ind. Nulo Padrão 
id_empresa_tel int(5) S Prim PK da Tabela 
id_empresa int(5) S Sim Não FK para a tabela empresas 
id_tipo_telefone int(2) S Sim Sim NULL FK para a tabela tipos_telefones 
nu_telefone char(15) Não Número do telefone (somente os números) 
29. espec_medicas 
Campo Tipo PK FK Ind. Nulo Padrão 
id_especialidade int(4) S Prim Não PK da Tabela 
tx_nome_especialidade varchar(200) Não Nome usual completo (sem abreviações) 
dt_cadastro date Não Data de geração do registro 
30. fabricantes 
Campo Tipo PK FK Ind. Nulo Padrão 
id_fabricante int(3) S Prim Não PK da Tabela 
tx_nome varchar(250) Não Nome usual completo (sem abreviações) 
tx_razao_social varchar(250) Não Razão social completa. 
id_logradouro int(4) S Sim Sim NULL FK com o código do logradouro do fabricante 
tx_complemento Varchar(25) Sim NULL 
nu_cep char(8) Sim NULL Número do CEP 
dt_cadastro date Não Data de geração do registro 
31. fabricantes_tels 
Campo Tipo PK FK Ind. Nulo Padrão 
id_fabricante_tel int(5) S Prim PK da Tabela 
id_fabricante int(3) S Sim Não FK para a tabela fabricantes 
id_tipo_telefone int(2) S Sim Sim NULL FK para a tabela tipos_telefones 
nu_telefone char(15) Não Número do telefone (somente os números) 
 
 
 
 
 
32. fornecedores 
Campo Tipo PK FK Ind. Nulo Padrão 
id_fornecedor int(6) S Prim Não PK da Tabela 
tx_nome varchar(250) Sim NULL Nome usual completo (sem abreviações) 
tx_razao_social varchar(250) Sim NULL Razão social completa. 
id_logradouro int(4) S Sim Sim NULL FK com o código do logradouro do fabricante 
tx_complemento Varchar(25) Sim NULL 
nu_cep char(8) Sim NULL Número do CEP 
vl_limite_venda double(15,2) Não Valor limite de venda do fornecedor 
dt_cadastro date Não Data de geração do registro 
33. fornecedores_tels 
Campo Tipo PK FK Ind. Nulo Padrão 
id_fornecedor_tel int(6) S Prim PK da Tabela 
id_fornecedor int(5) S Sim Não FK para a tabela fornecedores 
id_tipo_telefone int(2) S Sim Sim NULL FK para a tabela tipos_telefones 
nu_telefone char(15) Não Número do telefone (somente os números) 
34. fornecimentos 
Campo Tipo PK FK Ind. Nulo Padrão 
id_produto int(6) S S Sim Não Parte da PK e FK indicando o código do produto. 
id_fornecedor int(5) S S Sim Não Parte da PK e FK indicando o código do fornecedor. 
dt_ultimo_fornecimento date Não Data do ultimo fornecimento consultado para compra. 
vl_ultimo_fornecimento double(15,2) Não Valor do ultimo fornecimento consultado para compra. 
dt_cadastro date Não Data de geração do registro 
35. funcionarios_planos 
Campo Tipo PK FK Ind. Nulo Padrão 
id_funcionario int(6) S S Sim Não Parte da PK e FK indicando o código do funcionário. 
id_plano_de_saude int(4) S S Sim Não Parte da PK e FK indicando o código do plano de saúde. 
dt_vinculacao date S Não Parte da PK é a Data de vinculação do funcionário ao plano de saúde. 
dt_desligamento date Não Data de desligamento do funcionário ao plano de saúde 
36. funcionarios_tarefprojs 
Campo Tipo PK FK Ind. Nulo Padrão 
id_functarefprojs int(6) S Prim. Não PK da tabela 
id_funcionario int(6) S Sim Não FK indicando o código de funcionário que trabalha em tarefas de projetos 
id_tarefprojeto int(6) S Sim Não FK indicando o código de Tarefa-Projeto 
dt_inicio date Não 0000-00-00 Data de inicio de atuação do Funcionário no projeto 
dt_termino date Sim NULL Data de término de atuação do funcionário no projeto 
qt_tempo_duracao decimal(5,2) Sim NULL Quantidade de horas de duração da participação do funcionário no projeto. 
dt_cadastro date Não Data de geração do registro 
 
 
 
37. funcionarios 
Campo Tipo PK FK Ind. Nulo Padrão 
id_funcionario int(6) S Prim Não PK da Tabela 
tx_primeiro_nome varchar(12) Não Primeiro nome usual completo (sem abreviações) 
tx_iniciais_medias char(1) Sim NULL Iniciais dos nomes do meio 
tx_sobre_nome varchar(15) Não Sobrenome completo (sem abreviações) 
id_depto char(3) S Sim Sim NULL FK com o código do departamento onde trabalha 
id_funcao int(3) S Sim Sim NULL FK com o código da função 
nu_ramal char(4) Sim NULL Número do ramal telefônico do funcionario 
id_logradouro int(6) S Sim Sim NULL FK com o código do Logradouro de moradia do Funcionário 
tx_complemento Varchar(25) Sim NULL 
dt_contratacao date Sim NULL Data de contratação 
id_nivel_educacao int(2) S Sim Sim NULL FK com o código do nível de educação (escolaridade) 
ao_sexo char(1) Sim NULL Atributo Operacional indicando o Sexo como Masculino e Feminino 
dt_nascimento date Sim NULL Data de nascimento 
tx_resenha text (3000) Sim NULL Texto descrevendo a personalidade e dinâmica profissional do funcionário 
vl_salario decimal(9,2) Sim NULL Valor do salário. 
vl_bonus decimal(9,2) Sim NULL Valor do Bônus de ganho (se não houver deve ser 0-Zero). 
vl_comissao decimal(9,2) Sim NULL Valor de Comissão (se não houver deve ser 0-Zero) 
nu_cep char(8) Sim NULL Número do CEP 
dt_cadastro date Não Data de geração do registro 
38. funcionarios_tels 
Campo Tipo PK FK Ind. Nulo Padrão 
id_funcionario_tel int(5) S Prim PK da Tabela 
id_funcionario int(6) S Sim Não FK para a tabela funcionarios 
id_tipo_telefone int(2) S Sim Sim NULL FK para a tabela tipos_telefones 
nu_telefone char(15) Não Número do telefone (somente os números) 
39. funcoes 
Campo Tipo PK FK Ind. Nulo Padrão 
id_funcao int(3) S Prim Não PK da Tabela 
tx_nome_funcao varchar(60) Não Nome completo e sem abreviações 
dt_cadastro date Não Data de geração do registro 
40. habilitacoes 
Campo Tipo PK FK Ind. Nulo Padrão 
id_curso int(5) S S Sim Não Parte da PK e FK indicando o código do curso. 
id_professor int(3) S S Sim Não Parte da PK e FK indicando o código do professor. 
dt_habilitacao date S Não Parte da PK é a Data de habilitação do professor para ministrar a disciplina. 
dt_capacitacao date Não Data quando o professor conseguiu a capacitação para ministrar a disciplina. 
dt_cadastro date Não Data de geração do registro 
 
 
41. historico_profissional 
Campo Tipo PK FK Ind. Nulo Padrão 
id_historico int(6) S Prim Não PK da Tabela 
id_funcionario int(6) S Sim Não FK para tabela funcionários. 
id_empresa int(5) S Sim Sim NULL FK para tabela empresas. 
id_atividade int(4) S Sim Não FK para tabela atividades. 
dt_inicio date Não Data de inicio de atividade do funcionário na empresa (na atividade) 
dt_termino date Não Data de termino de atividade do funcionário na empresa (na atividade) 
dt_cadastro date Não Data de geração do registro 
42. instituicoes_ensino 
Campo Tipo PK FK Ind. Nulo Padrão 
id_instituicao int(3) S Prim Não PK da Tabela 
tx_nome_instituicao varchar(200) Não Nome usual completo (sem abreviações) 
id_logradouro int(6) S Sim Sim NULL FK com o código do logradouro da instituição de ensino. 
tx_complemento Varchar(25) Sim NULL 
nu_cep char(8) Sim NULL Número do CEP 
dt_cadastro date Não Data de geração do registro 
43. instituicoes_tels 
Campo Tipo PK FK Ind. Nulo Padrão 
id_instituicao_tel int(5) S Prim PK da Tabela 
id_instituicao int(3) S Sim Não FK para a tabela instituições de ensino 
id_tipo_telefone int(2) S Sim Sim NULL FK para a tabela tipos_telefones 
nu_telefone char(15) Não Número do telefone (somente os números) 
44. inventarios 
Campo Tipo PK FK Ind. Nulo Padrão 
id_produto int(6) S S Sim Não 0 Parte da PK e FK indicando o código do produto. 
id_funcionario int(6) S S Sim Não 0 Parte da PK e FK indicando o código do funcionário. 
dt_inventario date S Não Parte da PK é a Data de realização do inventário de estoque.qt_estoque decimal(12,2) Não Quantidade contabilizada do item de produto. 
tx_local varchar(128) Sim NULL Local de realização do Inventário 
dt_cadastro date Não Data de geração do registro 
45. livros 
Campo Tipo PK FK Ind. Nulo Padrão 
id_livro int(9) S Prim Não PK da Tabela 
tx_titulo_acervo varchar(90) Não Texto com o título do acervo 
id_editora int(5) S Sim NULL FK com o código da editora que publicou o livro. 
dt_publicacao date Sim NULL Data de publicação do Livro 
nu_ano_publicacao year(4) Sim NULL Ano de Publicação do Livro 
qt_exemplares_acervo int(3) Sim NULL Quantidade total do livro no acervo, é alterada no movimento de retirada 
qt_exemplares_consulta int(2) Sim NULL Quantidade mínima (em consulta) para o livro no acervo 
dt_cadastro date Não Data de geração do registro 
Denise
Typewriter
Denise
Typewriter
Denise
Typewriter
46. logradouros 
Campo Tipo PK FK Ind. Nulo Padrão 
id_logradouro int(6) S S Sim Não 0 PK da tabela. 
tx_nome_logradouro varchar(120) Não Texto com o nome do logradouro com o tipo (praça, rua, etc.) indicado. 
id_bairro int(6) S Sim Sim NULL FK para a tabela de Bairros. 
dt_cadastro date Data de geração do registro 
47. marcas_veiculos 
Campo Tipo PK FK Ind. Nulo Padrão 
id_marca int(6) S Prim Não PK da Tabela. 
tx_nome_marca varchar(90) Não Nome completo e sem abreviações 
id_fabricante int(3) S Sim Não FK com o código do fabricante da marca. 
dt_cadastro date Não Data de geração do registro 
48. medicos 
Campo Tipo PK FK Ind. Nulo Padrão 
id_medico int(6) S Prim Não PK da Tabela 
tx_nome_medico varchar(200) Não Nome completo e sem abreviação 
nu_crm int(8) Uniq Não Número do registro do médico no Conselho Regional dos médicos. 
id_especialidade int(4) S Sim Não FK com o código da especialidade médica 
id_logradouro_moradia int(6) S Sim Sim NULL FK com o código do Logradouro de moradia do Médico 
tx_complemento_moradia Varchar(25) Sim NULL 
id_logradouro_clinica int(6) S Sim Sim NULL FK com o código do Logradouro da Clínica Principal do Médico 
tx_complemento_clinica Varchar(25) Sim NULL 
dt_cadastro date Não Data de geração do registro 
49. modelos_veiculos 
Campo Tipo PK FK Ind. Nulo Padrão 
id_modelo int(4) S Não PK da Tabela 
id_marca int(6) S Sim Não FK com o código da marca de veiculos feitos por fabricantes 
tx_descricao_modelo varchar(250) Não Texto com a descrição do modelo 
ao_tipo_combustivel char(1) Não Atributo Operacional: tipo de combustível Álcool, Gasolina, Diesel, GáS ou Flex 
dt_cadastro date Não Data de geração do registro 
50. movimentos 
Campo Tipo PK FK Ind. Nulo Padrão 
id_movimento int(6) S Não PK da Tabela 
id_livro int(9) S Sim Sim NULL FK com o código do livro movimentado 
id_funcionario int(5) S Sim Sim NULL FK com o código do funcionário que faz o movimento 
dt_movimento date Não Data de realização do movimento 
id_tipo_movimento int(3) S Sim Sim NULL FK com o código do tipo de movimento 
dt_prevista_devolucao date Sim NULL Data prevista de devolução do livro 
dt_real_devolucao date Sim NULL Data real da devolução 
dt_cadastro date Não Data de geração do registro 
 
51. movimentos_tipos 
Campo Tipo PK FK Ind. Nulo Padrão 
id_tipo_movimento int(3) S Não PK da Tabela 
tx_nome_tipomov varchar(80) Não Nome do tipo de movimento (sem abreviações). 
ao_permiteretirada char(1) Não Assume S ou N para tipo de movimento que permita ou não retirada 
dt_cadastro date Não Data de geração do registro 
52. nf_compras 
Campo Tipo PK FK Ind. Nulo Padrão 
id_nf_compra int(6) S Prim Não PK da Tabela 
id_fornecedor int(6) S Sim Não FK com o código do fornecedor da Nota de Compra. 
dt_nf_compra date Sim NULL Data de realização da venda que gera a nota de venda 
id_funcionario int(6) S Sim Sim NULL FK com o código do funcionário. 
vl_total_nf_compra double(15,2) Sim NULL Valor total da Nota de Compra 
ao_situacao char(1) Sim NULL Indicador da situação da Nota como "A" (a pagar) ou "P" (paga). 
tx_comentarios varchar(1000) Sim NULL Comentário geral sobre a Nota de Compra 
dt_cadastro date Não Data de geração do registro 
53. nf_compras_itens 
Campo Tipo PK FK Ind. Nulo Padrão 
id_nf_compra int(6) S S Sim Não Parte da PK e FK com o código da nota fiscal de venda 
id_produto int(4) S S Sim Não Parte da PK e FK com o código do produto na nota 
qt_vendida int(8) Não Quantidade de produto vendida 
vl_unitario double(10,2) Não Valor unitário do produto na Nota de venda (pode ser ≠ do valor do estoque) 
54. nf_vendas 
Campo Tipo PK FK Ind. Nulo Padrão 
id_nf_venda int(6) S Prim Não PK da Tabela 
id_cliente int(4) S Sim Sim NULL FK com o código do Cliente da venda. 
id_funcionario int(6) S Sim Sim NULL FK com o código do funcionário. 
id_armazem int(4) S Sim Sim NULL FK com o código do armazém de destino da nota 
vl_total_nf_venda double(15,2) Sim NULL Valor total da nota fiscal de venda 
dt_venda date Não 0000-00-00 Data de realização da venda que gera a nota de venda 
dt_emissao date Não 0000-00-00 Data de emissão da nota de venda 
dt_cadastro date Não Data de geração do registro 
55. nf_vendas_itens 
Campo Tipo PK FK Ind. Nulo Padrão 
id_nf_venda int(6) S S Sim Não Parte da PK e FK com o código da nota fiscal de venda 
id_produto int(4) S S Sim Não Parte da PK e FK com o código do produto na nota 
qt_vendida int(8) Não Quantidade de produto vendida 
vl_unitario double(10,2) Não Valor unitário do produto na Nota de venda (pode ser ≠ do valor do estoque) 
 
 
 
56. niveis_de_educacao 
Campo Tipo PK FK Ind. Nulo Padrão 
id_nivel_educacao int(2) S Não PK da Tabela 
tx_nome_comum varchar(30) Não Nome do nível de educação (sem abreviações). 
qt_anos_de_estudo int(2) Não Quantidade de anos de duração do nível 
dt_cadastro date Não Data de geração do registro 
57. onibus 
Campo Tipo PK FK Ind. Nulo Padrão 
id_onibus int(6) S Prim Não PK da Tabela 
id_placa char(7) Não Placa do carro (somente letras e números) 
tx_apelido Varchar(60) Sim Nome de apelido do ônibus 
id_modelo int(4) S Sim Sim NULL FK indicando o código do modelo. 
id_cor int(11) S Sim Sim NULL FK indicando o código da cor. 
qt_capacidade int(2) Não Quantidade de acentos no ônibus 
nu_ano_fabricacao year(4) Não Ano de fabricação do carro 
dt_cadastro date Não Data de geração do registro 
58. ord_compras 
Campo Tipo PK FK Ind. Nulo Padrão 
id_ordem_compra int(7) S Não PK da Tabela 
id_fornecedor int(6) S Sim Sim NULL FK com o código do fornecedor 
dt_ordem_compra date Sim NULL Data de realização da Compra 
id_funcionario int(6) S Sim Sim NULL FK com o código do funcionário. 
vl_total_ordem_compra double(15,2) Sim NULL Valor total da ordem de compra 
ao_situacao char(1) Sim NULL Atributo Operacional indicando: Aberto, Entregue Pago 
tx_comentarios varchar(1000) Sim NULL Texto com comentários complementares da ordem de compra. 
dt_cadastro date Não Data de geração do registro 
59. ord_compras_itens 
Campo Tipo PK FK Ind. Nulo Padrão 
id_ordem_compra int(7) S S Sim Não Parte da PK e FK com o código da Ordem de Compra 
id_produto int(6) S S Sim Não Parte da PK e FK com o código do produto 
qt_comprada int(5) Não Quantidade comprada 
vl_unitatio double(10,2) Não Valor unitário negociado com o fornecedor 
60. palavras_chaves 
Campo Tipo PK FK Ind. Nulo Padrão 
id_palavra int(6) S Prim Não PK da Tabela 
tx_nome_palavra varchar(15) Não Palavra-chave de pesquisa complete e se abreviações 
dt_cadastro date Não Data de geração do registro 
 
 
 
 
61. palavras_livros 
Campo Tipo PK FK Ind. Nulo Padrão 
id_palavra int(6) S S Sim Não Parte da PK e FKcom o código da Palavra-Chave de Pesquisa 
id_livro int(9) S S Sim Não Parte da PK e FK com o código do livro 
dt_cadastro date Não Data de geração do registro 
62. passagens 
Campo Tipo PK FK Ind. Nulo Padrão 
id_viagem int(4) S Prim Não PK da Tabela - FK apontando para a Tabela Viagens 
id_poltrona Int(2) Não Pk da Tabela (indica o número da poltrona do ônibus) 
id_funcionario int(6) S Sim Sim NULL FK com o código do funcionário. 
dt_cadastro date Não Data de geração do registro 
63. planos_de_saude 
Campo Tipo PK FK Ind. Nulo Padrão 
id_plano_de_saude int(4) S Prim Não PK da Tabela 
tx_nome_plano varchar(200) Não Nome completo e usual para o plano de saúde 
tx_razao_social varchar(250) Sim NULL Razão social completa. 
id_logradouro Int(6) Sim NULL FK com o código do logradouro do escritório do Plano de Saúde. 
tx_complemento Varchar(25) Sim NULL 
nu_cep char(8) Sim NULL Número do CEP 
dt_cadastro date Não Data de geração do registro 
64. planos_tels 
Campo Tipo PK FK Ind. Nulo Padrão 
id_planos_tel int(5) S Prim PK da Tabela 
id_plano_de_saude int(4) S Sim Não FK para a tabela planos de saúde 
id_tipo_telefone int(2) S Sim Sim NULL FK para a tabela tipos_telefones 
nu_telefone char(15) Não Número do telefone (somente os números) 
65. produtos 
Campo Tipo PK FK Ind. Nulo Padrão 
id_produto int(6) S Prim Não PK da Tabela 
tx_nome varchar(128) Sim NULL Nome completo e usual 
vl_preco decimal(12,2) Sim NULL Valor do preço 
vl_preco_promocao decimal(12,2) Sim NULL Valor do preço de venda para promoção (com desconto máximo) 
vl_preco_minimo double(13,2) Sim NULL Valor do preço mínimo (contabilizando os custos de produção) 
qt_estoque double(15,2) Sim NULL Quantidade do produto em estoque. 
qt_dias_promocao int(3) Sim NULL Quant. De dias para execução de uma promoção do produto 
tx_descricao_completa varchar(2000) Sim NULL Texto com a descrição complete do produto. 
dt_cadastro date Não Data de geração do registro 
 
 
 
 
66. professores 
Campo Tipo PK FK Ind. Nulo Padrão 
id_professor int(3) S Prim Não PK da Tabela 
tx_nomeprofessor varchar(250) Não Nome complete e sem abreviações 
id_logradouro int(6) S Sim Sim NULL FK com o código do Logradouro de residência do Professor. 
tx_complemento Varchar(25) Sim NULL 
nu_cep char(8) Sim NULL Número do CEP 
dt_nascimento date Sim NULL Data de nascimento 
dt_cadastro date Sim NULL Data de geração do registro 
67. professores_tels 
Campo Tipo PK FK Ind. Nulo Padrão 
id_professor_tel int(4) S Prim PK da Tabela 
id_professor int(3) S Sim Não FK para a tabela professores 
id_tipo_telefone int(2) S Sim Sim NULL FK para a tabela tipos_telefones 
nu_telefone char(15) Não Número do telefone (somente os números) 
68. projetos 
Campo Tipo PK FK Ind. Nulo Padrão 
id_projeto char(6) S Prim Não PK da Tabela 
tx_nome_projeto varchar(24) Não Nome complete e sem abreviações 
id_depto char(3) S Sim Sim NULL FK com o código do departamento que lidera ou coordena o projeto 
id_funcionario_responsavel int(6) S Sim Sim NULL FK com o código do funcionário responsável pelo projeto 
vl_estimado decimal(5,2) Sim NULL Valor estimado do projeto 
dt_inicio date Sim NULL Data de inicio do projeto (após conclusão de estudos de viabilidade) 
dt_termino date Sim NULL Data de término do projeto (após a conclusão dos testes) 
id_projeto_superior char(6) S Sim Sim NULL FK com o código de projeto superior. 
dt_cadastro date Não Data de geração do registro 
69. rotas_viarias 
Campo Tipo PK FK Ind. Nulo Padrão 
id_rota int(5) S Prim Não PK da Tabela. 
tx_nome_rota varchar(60) Não Nome completo e sem abreviações. 
tx_descr_periodo varchar(250) Não Texto com a descrição do período de ocorrência de viagens na rota viária 
id_cidade_origem int(4) S Sim Sim NULL FK com o código da cidade de origem da rota viária 
id_cidade_destino int(4) S Sim Sim NULL FK com o código da cidade de destino da rota viária 
dt_cadastro date Não Data de geração do registro 
 
 
 
 
 
 
 
70. seguradoras 
Campo Tipo PK FK Ind. Nulo Padrão 
id_seguradora int(4) S Prim Não PK da Tabela. 
tx_nome_seguradora varchar(250) Não Nome completo e sem abreviações. 
id_logradouro int(6) S S Sim NULL Texto com o endereço de residência. 
tx_complemento Varchar(25) Sim NULL 
nu_cep char(8) Sim NULL Número do CEP 
dt_cadastro date Não Data de geração do registro 
71. seguradoras_tels 
Campo Tipo PK FK Ind. Nulo Padrão 
id_seguradora_tel int(5) S Prim PK da Tabela 
id_seguradora int(4) S Sim Não FK para a tabela seguradoras 
id_tipo_telefone int(2) S Sim Sim NULL FK para a tabela tipos_telefones 
nu_telefone char(15) Não Número do telefone (somente os números) 
72. seguros 
Campo Tipo PK FK Ind. Nulo Padrão 
id_numero_apolice int(6) S Prim Não PK da Tabela. 
id_veiculo int(6) S Sim Não FK com o código do veículo. 
id_seguradora int(4) S Sim Não FK com o código da Seguradora 
dt_contratacao date Não Data da contratação 
dt_limite_cobertura date Não Data limite da cobertura do seguro. 
vl_cobertura double(15,2) Não Valor da cobertura da apólice de seguro 
dt_cadastro date Não Data de geração do registro 
73. setores_de_atuacao 
Campo Tipo PK FK Ind. Nulo Padrão 
id_setor_atuacao int(4) S Prim Não PK da Tabela. 
tx_nome_curto varchar(90) Não Nome completo e sem abreviações 
tx_descricao varchar(250) Não Texto descrevendo o setor de atuação 
dt_cadastro date Não Data de geração do registro 
74. sinistros 
Campo Tipo PK FK Ind. Nulo Padrão 
id_sinistro int(4) S Prim Não PK da Tabela. 
tx_nome_sinistro varchar(90) Não Nome completo e sem abreviações 
id_logradouro_principal int(6) S Sim Sim NULL FK com o código do Logradouro principal da ocorrência do sinistro. 
id_logradouro_sedundario int(6) S Sim Sim NULL FK com o código do Logradouro secundário da ocorrência do sinistro 
tx_descricao varchar(250) Não Texto descrevendo o sinistro que pode ocorrer em um veículo (incêndio, roubo, etc) 
dt_cadastro date Não Data de geração do registro 
 
 
 
 
75. sinistros_veiculos 
Campo Tipo PK FK Ind. Nulo Padrão 
id_ocorrencia int(4) S Prim Não PK da Tabela. 
id_sinistro int(4) S Não FK indicando o código do sinistro 
id_veiculo int(6) S Não FK indicando o código do veículo que sofreu o sinistro 
id_numero_apolice int(6) S Não FK indicando o código do seguro que cobre o sinistro do veículo 
tx_logradouro_ocorrencia varchar(250) Texto descrevendo os logradouros e localidade da ocorrência do sinistro. 
dt_cadastro date Não Data de geração do registro 
76. tarefas 
Campo Tipo PK FK Ind. Nulo Padrão 
id_tarefa int(4) S Prim Não PK da Tabela 
tx_nome_tarefa char(15) Não Nome curto da ação de projeto 
tx_descricao_tarefa varchar(250) Não Descrição completa de uma ação que é usada em projetos. 
qt_horas_padrao int(4) Sim NULL Quantidade de Horas padrão para a ação em qualquer projeto. 
dt_cadastro date Sim NULL Data de geração do registro 
77. tarefas_projetos 
Campo Tipo PK FK Ind. Nulo Padrão 
id_tarefprojeto int(6) S Prim Não PK da tabela 
id_projeto char(6) S Sim Não FK indicando o código do projeto 
id_tarefa int(4) S Sim Não FK indicando o código da tarefas de projeto 
qt_horas_envolvidas int(3) Não Quantidade de horas comprometidas da ação no projeto 
nu_ordem_acao int(11) Sim NULL Número de ordem da tarefa dentro do projeto 
dt_cadastro date Sim NULL Data de geração do registro 
78. tipos_telefones 
Campo Tipo PK FK Ind. Nulo Padrão 
id_tipo_telefone int(6) S Prim Não PK da Tabela 
tx_descricao varchar(35) Não Texto descrevendo o tipo de telefonedt_cadastro date Não Data de geração do registro 
79. tipos_veiculos 
Campo Tipo PK FK Ind. Nulo Padrão 
id_tipo_veiculo int(6) S Prim Não PK da Tabela 
tx_descricao varchar(250) Não Texto descrevendo o tipo de veiculo (carro, caminhonete, motocicleta, etc) 
dt_cadastro date Não Data de geração do registro 
80. titulacoes 
Campo Tipo PK FK Ind. Nulo Padrão 
id_professor Int(3) S S Sim Não FK para professores e parte da PK da tabela 
id_titulo int(4) S S Sim Não FK para titulos e parte da PK da tabela 
dt_cadastro date Não Data de cadastro da titulação 
 
 
 
81. titulos 
Campo Tipo PK FK Ind. Nulo Padrão 
id_titulo int(4) S Prim Não Pk da tabela 
tx_nome_titulo varchar(150) Não Descrição do Título 
dt_cadastro date Não Data de cadastro do título 
82. veiculos 
Campo Tipo PK FK Ind. Nulo Padrão 
id_veiculo int(6) S Prim Não PK da Tabela 
id_placa char(7) Não Placa do carro (somente letras e números) 
id_funcionario int(6) S Sim Não FK indicando o código do funcionário. 
id_tipo_veiculo int(6) S Sim Não FK indicando o código do tipo de veiculo. 
id_modelo int(4) S Sim Sim NULL FK indicando o código do modelo. 
id_cor int(11) S Sim Sim NULL FK indicando o código da cor. 
ao_status char(1) Não Indica o status do veículo do Funcionário (P=Principal e S=Secundário). 
nu_ano_fabricacao year(4) Não Ano de fabricação do carro 
dt_cadastro date Não Data de geração do registro 
83. viagens 
Campo Tipo PK FK Ind. Nulo Padrão 
id_viagem int(6) S Prim Não PK da Tabela 
id_onibus int(6) S Sim Não FK com o código do ônibus que realiza a Viagem. 
id_rota int(5) Sim NULL FK com o código da rota viária da viagem. 
dt_viagem date Não Data de realização da viagem 
hr_saida time Não Hora de saída da viagem 
 
Tabela 1. - Dicionário de dados da Base de Exercício em SQL. 
 
Este dicionário de dados apresenta DIFERENÇAS em relação ao que foi desenvolvido na base adm_exerc_sql. Considere tudo o que está neste dicionário como CERTO. 
Portanto, acerte as estruturas de TODAS as tabelas de sua base de dados MySQL. 
Aconselho que este trabalho seja feito em dupla. Enquanto um trabalha editando os campos das tabelas o outro fica com o dicionário aberto e verificando o andamento do 
trabalho de acerto da base. Isso pode ser feito até que se conclua o acerto do dicionário de dados da Base. Depois que a base estiver CERTA exportem as definições e 
prossigam separadamente com o trabalho. 
 
 
 
Prática de Comandos SQL 
Podemos explorar o ambiente com comandos SQL. Para isso, acesse o phpmyadmim, depois acesse a base de dados adm_exerc_sql. Clique no botão SQL no alto do menu 
do lado esquerdo. Uma janela vai aparecer sobreposta e "solta" do phpmyadmin. Esta janela "envia" os comandos para a outra. Deste modo podemos escrever os 
comandos na janela flutuante e o resultado do comando será visto na janela fixa. Teste alguns comandos. 
 
 Vamos fazer assim: Você testa os comandos propostos neste documento E escreve no espaço abaixo as suas observações. No fim da sua jornada espero que você tenha 
aprendido muita coisa sobre o SQL. NOTE: Execute o comando mesmo. Esta É A MELHOR FORMA DE APRENDER: PRATICANDO! 
 
Como vocês estão trabalhando com a versão PDF aconselho que os comentários sejam escritos usando o programa FOXIT 
(http://cdn01.foxitsoftware.com/pub/foxit/reader/desktop/win/4.x/4.3/enu/FoxitReader431_enu_Setup.exe ). Este programa permite colocar janela de texto sobre os 
PDF. Se você conhece outro que faça isso, tudo bem. Use-o, mas saiba que seu trabalho será corrigido com o programa FOXIT, ou seja: 
 TESTE seu PDF de resposta antes de me enviar. 
 
Note: alguns comandos podem estar ERRADOS. Podem estar com falta de algum campo ou parte necessária para a execução. Interprete-os mesmo assim e apresente a 
versão CORRETA dos comandos na área de interpretação. 
 
Vocês devem testar estes comandos tanto em MySQL como no PostgreSQL. ACONSELHO que vocês façam o trabalho andando lado a lado, ou de outra forma: teste o 
comando no MySQL e o mesmo comando no PotgreSQL. 
 
Para testar os comandos você pode usar a janela de comandos que o phpmyadmin e o phppgadmin disponibilizam. Em ambos os programas, depois de acessado a base de 
dados, vocês podem encontrar um acesso para uma janela onde é possível escrever comandos SQL e na janela principal visualizar o resultado (dados ou mensagens de 
erro). 
 
NOTE: vocês da equipe deverão apresentar somente UM arquivo PDF com as respostas tanto do ambiente MySQL como do ambiente do PostgreSQL. Por isso, mesmo que 
vocês respondam de modo separado as perguntas, depois copiem as respostas em um só arquivo. Sinceramente eu acho mais prático fazer assim: um dos alunos acessa 
um computador com a base MySQL e abre também o TESTESQL, outro acessa um outro computador com a base PostgreSQL, os testes devem ocorrer em paralelo e as 
interpretações escritas no computador com o TESTESQL aberto. Acho que deste modo será mais produtivo. 
 
 
Bem, vamos aos comandos em SQL. 
 
1. 
SELECT * FROM funcionarios WHERE id_depto='A01'; 
(*) existe diferença entre as letras maiúsculas ou minúsculas (execute o mesmo comando com letras 
diferentes para os nomes de tabelas, campos e parâmetro de comparação)? 
Interpretação (MySQL): 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Denise
Typewriter
Denise
Typewriter
Através de uma seleção, feita na tabela funcionarios, será mostrado as tuplas do atributo id_depto que possuem valor 'A01'. O tipo de letra, não interfere no resultado solicitado apenas para tabelas ou para campos. Já para parâmetro de comparação, os resultados se alteram, ou seja, há diferenças quando você muda a letra de maiúscula para minúscula
Denise
Typewriter
Denise
Typewriter
Denise
Typewriter
Denise
Typewriter
2. 
SELECT tx_primeiro_nome, dt_nascimento 
 FROM funcionarios 
 ORDER BY id_depto, id_funcao; 
Interpretação (MySQL): 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Denise
Typewriter
Denise
Typewriter
O resultado dos campos solicitados serão referente à tabela funcionarios aparecerá ordenadamente, através de uma projeção. Primeiro será 
selecionado, em ordem, os valores do atributo id depto. Depois, será selecionado, em ordem, os valores do atributo id funcao, mas 
apenas se os valores de id depto forem iguais.
Denise
Typewriter
3. 
SELECT id_depto, id_funcao, tx_primeiro_nome, tx_sobre_nome, dt_nascimento 
 FROM funcionarios 
 WHERE id_depto BETWEEN 'A01' AND 'D01' 
 ORDER BY id_depto, id_funcao; 
Interpretação (MySQL): 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Denise
Typewriter
O resultado dos campos solicitados referente a tabela funcionarios aparecerá ordenadamente, através de uma projeção. Primeiro será 
selecionado, em ordem, os valores do atributo id_depto que estão dentro de um intervalo fechado ['A01', 'D01']. Depois, será 
selecionado, em ordem, os valores do atributo id_funcao, mas apenas se os valores de id_depto forem iguais.
Denise
Typewriter
Denise
Typewriter
Denise
Typewriter
4. 
Veja este comando: 
SELECT id_depto, id_funcao, tx_primeiro_nome, tx_sobre_nome, dt_nascimento 
 FROM funcionarios 
 WHERE id_depto BETWEEN 'A01' AND 'D11' 
 ORDER BY id_depto, id_funcao; 
 
Agora se escrevermos: 
SELECT id_depto, id_funcao, tx_primeiro_nome, tx_sobre_nome, dt_nascimento 
 FROM funcionarios 
 WHERE id_depto IN ('A01','D11') 
 ORDER BY id_depto, id_funcao; 
Interprete os comandos e a diferença entre eles. 
Interpretação (MySQL): 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Denise
Typewriter
PRIMEIRO: O resultado dos campos da tabela funcionarios aparecerá em ordem, através de uma projeção. Primeiro será selecionado 
os valores do atributo id_depto que estão no intervalo fechado ['A01', 'D11']. Depois, será selecionado os valores do atributoid_funcao, 
mas caso os valores de id_depto forem iguais.
 
SEGUNDO: Com uma projeção, os resultados da tabela funcionario aparecerão em ordem. Primeiro será selecionado os valores do
atributo id_depto que estão no conjunto ('A01','D11') e depois os valores do atributo id_funcao.
 
A diferença entre os dois é que um mostra resultados de um intervalo fechado e o outro mostra os resultados de um conjunto de valores.
Denise
Typewriter
Denise
Typewriter
5. 
ALTER TABLE funcionarios 
 ADD COLUMN id_chefe int(6) NOT NULL AFTER id_funcionario; 
Interpretação (MySQL): 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Denise
Typewriter
 Comando faz uma alteração na tabela funcionarios, e acrescenta, depois da coluna id_funcionario, a coluna id_chefe.
Denise
Typewriter
6. 
ALTER TABLE nf_vendas ADD FOREIGN KEY (id_armazem) 
 REFERENCES armazens (id_armazem) 
 ON DELETE CASCADE 
 ON UPDATE CASCADE; 
O Comando tratado aqui é o ALTER TABLE, vale um comentário: 
 
Sintaxe: 
ALTER TABLE <TAB> 
ADD FOREIGN KEY ( <CampoDaTab> ) 
REFERENCES <TAB da CE> (<CAMPO CE>) 
ON DELETE [cascade |set null | no action | restrict] 
ON UPDATE [cascade |set null | no action | restrict] 
 
(*) O estudo de cada ação do UPDATE ou DELETE é particular para cada tabela. 
Teste comandos para tabelas diferentes construindo diferentes FK. Faça uma consulta nas notas_fiscais_vendas com o 
código de armazém igual a '3'. Mais tarde aprenderemos a alterar valores em campos. O que será que vai acontecer se 
trocarmos o valor de '3' para '4' na tabela armazens? Mais tarde implemente e interprete este comando. 
(**) Execute o comando ALTER TABLE ADD FOREIGN KEY para TODAS as tabelas que apresentem relacionamentos. Este 
trabalho vai se refletir no Script que você vai gerar no final do trabalho e no tratamento de consistência de 
valores quando você estiver escrevendo seu programa aplicativo. 
Interpretação (MySQL): 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Denise
Typewriter
Para alterar a tabela e adicionar uma FK precisa fazer referencia a tabela armazem. Fazendo essa referencia, poderá fazer o delete ou update normalmente, mas assim que fizer uma dessas alterações, não pode esquecer de alterar a tabela que foi referenciada.
Denise
Typewriter
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7. 
ALTER TABLE funcionarios 
 DROP COLUMN id_chefe; 
Interpretação (MySQL): 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Denise
Typewriter
Primeiro altera-se a tabela funcionarios, em seguida, exclui a coluna id_chefe
Denise
Typewriter
8. 
SELECT * 
 FROM funcionarios 
 WHERE id_depto='A01' AND 
 id_nivel_educacao>15 OR 
 dt_contratacao<'2000-01-01'AND 
 tx_sobre_nome LIKE "%E%"; 
Tente usar () delimitando ou agrupando condições e observe o resultado. Veja como funciona a combinação 
dos operadores lógicos AND e OR quando contidos entre (). 
No operador LIKE teste as seguintes situações; 
- com EM, como argumento de pesquisa 
- com um UNDERLINE "_" no lugar do % da esquerda na pesquisa 
- com DOIS UNDERLINE "_" no lugar do % da esquerda na pesquisa 
- com um UNDERLINE "_" no lugar do % da direita na pesquisa 
- com uma LETRA no lugar do % da direita na pesquisa 
Interpretação (MySQL): 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Denise
Typewriter
A seleção executará as tuplas da tabela funcionarios que possuem a coluna id_depto='A01' e id_nivel_educacao>15, ou dt_contratacao<'2000-01-01' e tx_sobre_nome com a letra E. 
Se colocar o () ele irá alterar a ordem dos comandos AND e OR. Se colocar o EM no lugar de E, ele irá localizar tuplas com EM; se 
colocar o '_', ele deixará de procurar algo que pode ter um número qualquer de caracteres anteriores ou posteriores ao caracter "E" para especificar a quantidade de caracteres de acordo o número de "_"; e '%' mostrará tuplas com qualquer letra.
Denise
Typewriter
Denise
Typewriter
Denise
Typewriter
Denise
Typewriter
Denise
Typewriter
Denise
Typewriter
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9. 
SELECT * FROM funcionarios 
 WHERE id_funcionario IN (SELECT id_funcionario_gerente FROM departamentos); 
Dica: execute primeiro o comando da sub-query. Interprete este resultado e depois escreva o comando 
completo. 
Interpretação (MySQL): 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Denise
Typewriter
Nesse comando é possível realizar uma subquery em id_funcionario_gerente da tabela departamentos. Depois, o resultado será 
mostrado se o valor das tuplas estiverem nos campos id_funcionario da tabela funcionarios e id_funcionario_gerente da tabela 
departamentos ao mesmo tempo.
Denise
Typewriter
Denise
Typewriter
10. 
SELECT * FROM funcionarios, departamentos 
 WHERE 
 funcionarios.id_depto=departamentos.id_depto depto AND 
 funcionarios.id_funcionario IN (10,80,170,280); 
Interpretação (MySQL): 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Denise
Typewriter
O comando terá que juntar as duas tabelas, funcionarios e departamentos, e mostrar os id_depto que estão presentes nas duas tabelas
ao mesmo tempo. Só poderá mostrar que estão presentes no conjunto (10,80,170,280).
Denise
Typewriter
11. 
SELECT * FROM funcionarios, atuacoes, projetos 
 WHERE 
 funcionarios.id_funcionario=atuacoes.id_funcionario AND 
 atuacoes.id_projeto=projetos.id_projeto; 
Interpretação (MySQL): 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Denise
Typewriter
Esse comando irá juntar as tabelas funcionarios, atuacoes e projetos, Depois irá mostrar os funcionarios que estiverem nas tabelas 
funcionarios e atuacoes ao mesmo tempo, e os projetos que estiverem nas tabelas atuacoes e projetos ao mesmo tempo. O resultado
será os dados completos dos funcionarios e de suas atuaçoes em cada projeto.
Denise
Typewriter
12. 
CREATE TABLE func1 AS (SELECT * FROM funcionarios WHERE id_depto IN ('A01','E21')); 
CREATE TABLE func2 AS (SELECT * FROM funcionarios WHERE funcionarios.dt_contratacao<'2000-01-01'); 
CREATE TABLE dept AS (SELECT * FROM departamentos WHERE id_depto IN ('A01','D11')); 
Interpretação (MySQL): 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Denise
Typewriter
Os 3 comandos possibilitam criar tabelas: 
- a primeira com nome func1, irá mostrar os funcionários que possuem valor igual a 'A01' ou 'E21';
- a segunda com nome func2, irá mostrar os funcionários que foram contratados antes do dia 01/01/2000;
- e a terceira com nome dept, irá mostrar os departamentos com valores iguais a 'A01' ou 'D11' 
Denise
Typewriter
13. 
SELECT * FROM funcoes, 
 funcionarios as func1, 
 (SELECT * FROM departamentos WHERE id_depto_superior='A01') as dept 
 WHERE funcoes.id_funcao=func1.id_funcao AND 
 func1.id_depto=dept.id_depto; 
Interpretação (MySQL): 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Denise
Typewriter
O comando pede para juntar as tabelas funcoes, funcionarios e dept. As tabelas funcoes e funcionarios deverão ser renomeadas para 
func1, e a tabela dept surgirá a partir de uma seleçao feita na tabela departamentos, onde mostra as tuplas do campo id_depto_superior
que possuem valores 'A01'.
Feito isso, o resultado irá conter os valores do campo id_funcao desde que pertença às tabelas funcoes e func1, e mostrar também os 
valores de id_depto desde que esteja nas tabelas func1 e dept.
Denise
Typewriter
Denise
Typewriter
Denise
Typewriter
Denise
Typewriter
14. 
SELECT funcoes.id_funcao, funcoes.tx_nome_funcao, 
 func1.id_funcionario, tx_primeiro_nome, tx_sobre_nome, func1.id_depto, 
 dept.id_depto, tx_nome_depto 
 FROM funcoes, func1, departamentos as dept 
 WHERE funcoes.id_funcao=func1.id_funcao AND 
 func1.id_depto=dept.id_depto; 
(*) Por que algunscampos apresentados entre o SELECT e o FROM têm a indicação do nome da tabela e outros 
não? 
Interpretação (MySQL): 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Denise
Typewriter
Assim que projetar as colunas id_funcao e tx_nome_funcao da tabela funcoes; id_funcionario, tx_primeiro_nome, tx_sobre_nome e
id_depto da tabela func1; e id_depto e tx_nome_depto da tabela departamentos, deverá juntar as tabelas funcoes, func1 e departamentos,
e depois mudar seu nome para dept. 
A junção resultará nas colunas com as tuplas do campo id_funcao da tabela funcoes e da tabela func1; e nas colunas com as tuplas do campo id_depto da tabela func1 e da tabela dept. Em outras palavras, irá obter dados dos funcionários e suas funçoes em cada departamento.
15. 
SELECT * FROM 
 funcoes INNER JOIN func1 ON funcoes.id_funcao=func1.id_funcao 
 INNER JOIN dept ON func1.id_depto=dept.id_depto 
Interpretação (MySQL): 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Denise
Typewriter
Pede-se que junte a tabela funcoes, func1 e dept. O resultado terá que mostrar as tuplas do campo id_funcao da tabela funcoes, mas essa
mesma tupla tem que estar na tabela func1; e terá que mostrar também as tuplas do campo id_depto da tabela func1, mas essa mesma 
tupla tem que estar na tabela dept também.
Denise
Typewriter
16. 
Select * FROM func1 UNION ALL (Select * FROM func2) 
(*) O que acontece se tiramos a palavra ALL? Quantas Linhas são recuperadas em cada um dos comandos? 
Interpretação (MySQL): 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Denise
Typewriter
A partir de uma união feita com as tabelas, o comando irá mostrar uma soma entre as tuplas de func1 e func2.
Assim que retirar a palavra ALL do comando, ele irá eliminar aquelas tuplas que aparecem mais de uma vez, mostrando elas apenas 
uma vez e assim, com menos tuplas do que o comando original apresentou.
17. 
SELECT id_funcionario, tx_primeiro_nome, tx_iniciais_medias, 
 tx_sobre_nome, id_depto, nu_telefone, dt_contratacao 
 FROM 
 (Select * FROM func1 UNION (Select * FROM func2) ) AS T1; 
Interpretação (MySQL): 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Denise
Typewriter
O comando pede para que una as tabelas func1 e func2, e faça uma projeção dos campos citados acima. A coluna nu_telefone terá que 
ser renomeada para nu_ramal porque não existe no dicionário de dados.
Denise
Typewriter
18. 
Select * FROM funcionarios 
 WHERE id_funcionario NOT IN 
 (Select id_funcionario FROM func2); 
Interpretação (MySQL): 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Denise
Typewriter
O comando projeta todos os campos da tabela funcionarios, trazendo as tuplas que nao apresentam o valor id_funcionario presente no conjunto de valores id_funcionario da tabela func2.
Denise
Typewriter
19. 
SELECT * FROM funcionarios 
 WHERE id_funcionario NOT IN 
 (SELECT T1.id_funcionario FROM 
 (SELECT * from func1 UNION (SELECT * FROM func2)) AS T1); 
Tente escrever as expressões da álgebra relacional que poderia ser traduzida neste comando SQL. 
Interpretação (MySQL): 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Denise
Typewriter
Assim que for feita a união entre as tabelas func1 e func2, o comando irá fazer uma projeção com os campos da tabela funcionarios, e 
depois irá trazer as tuplas que não possuem o valor da coluna id_funcionario presentes no conjunto que será obtidos a partir dessa união.
20. 
SELECT * FROM funcionarios INNER JOIN func1 USING (id_funcionario); 
Interpretação (MySQL): 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Denise
Typewriter
Com uma junção natural entre as tabelas, o resultado mostrará o valor de id_funcionario, cada um em uma tupla, mesmo se ele for o 
mesmo valor para as duas tabelas, ou seja, não importa se tiver valores repetidos.
Denise
Typewriter
Denise
Typewriter
21. 
SELECT * FROM funcionarios 
 LEFT JOIN dept ON funcionarios.id_depto=dept.id_depto 
 UNION 
 (SELECT * FROM funcionarios 
 RIGHT JOIN dept ON funcionarios.id_depto=dept.id_depto); 
Interpretação (MySQL): 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Denise
Typewriter
O comando irá fazer uma união com o resultado obtido entre os dois tipos de junções que deverá ser feita: primeiro é feita uma junção aberta pela esquerda com as tabelas funcionarios e depto, e depois, é feita uma junção aberta pela direita com essas mesmas tabelas. Em cada junção feita, será usada a coluna id_depto.
Denise
Typewriter
22. 
SELECT funcionarios.id_funcionario, funcionarios.tx_primeiro_nome, dept.id_depto, dept.tx_nome_depto 
 FROM funcionarios, dept 
 WHERE funcionarios.id_depto=dept.id_depto; 
Compare o comando acima com os seguintes abaixo (comente as diferenças); 
SELECT funcionarios.id_funcionario, funcionarios.tx_primeiro_nome, dept.id_depto, dept.tx_nome_depto 
 FROM funcionarios 
 LEFT JOIN dept ON funcionarios.id_depto=dept.id_depto; 
Ou ainda: 
SELECT funcionarios.id_funcionario, funcionarios.tx_primeiro_nome, dept.id_depto, dept.tx_nome_depto 
 FROM funcionarios 
 LEFT JOIN dept ON funcionarios.id_depto=dept.id_depto 
 ORDER BY dept.id_depto DESC; 
Interpretação (MySQL): 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Denise
Typewriter
O primeiro comando é uma junção completa. O segundo e o terceiro são uma junção aberta pela esquerda, a diferença entre os dois é 
que, no terceiro comando seu resultado deverá aparecer em ordem decrescente.No primeiro e no segundo comando, o resultado será as
tuplas dos campos id_funcionario e tx_primeiro_nome da tabela funcionarios e as tuplas do campo id_depto e tx_nome_depto da tabela
dept. E no terceiro comando, o resultado será as tuplas do campo os valores de id_depto, da tabela dept, em ordem decrescente.
Denise
Typewriter
Denise
Typewriter
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23. 
Qual a diferença entre os seguintes comandos? 
 
SELECT * FROM dept RIGHT JOIN funcionarios ON funcionarios.id_depto=dept.id_depto; 
SELECT * FROM funcionarios RIGHT JOIN dept ON funcionarios.id_depto=dept.id_depto 
Interpretação (MySQL): 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Denise
Typewriter
A diferença entre os dois comandos são: o primeiro projeta as colunas da junção das tabelas dept e funcionarios, sendo uma junção aberta pela direita e pela tabela funcionarios, e mostra as tuplas da coluna id_depto. Já o segundo, projeta as mesmas colunas da junção das
tabelas dept e funcionarios, mas ela é aberta pela tabela dept.
Denise
Typewriter
Denise
Typewriter
24. Comente a diferença entre os seguintes comandos: 
 
SELECT * FROM tarefas, tarefas_projetos, projetos 
 WHERE tarefas.id_tarefa = tarefas_projetos.id_tarefa AND 
 tarefas_projetos.id_projeto=projetos.id_projeto; 
 
SELECT * FROM tarefas JOIN tarefas_projetos ON tarefas.id_tarefa=tarefas_projetos.id_tarefa 
 JOIN projetos ON tarefas_projetos.id_projeto=projetos.id_projeto; 
Interpretação (MySQL): 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Denise
Typewriter
A partir de uma projeção de todos os campos das tabelas: tarefas, tarefas_projetos e projetos, e a partir da junção natural entre elas, utilizando como condição de emparelhamento entre as tabelas tarefas e tarefas_projetos o campo id_tarefa e entre acoes_projetos e projetos o campo id_projeto.
Denise
Typewriter
Denise
Typewriter
Denise
Typewriter
25. 
SELECT * FROM tarefas, tarefas_projetos, projetos 
 WHERE tarefas.id_tarefa=tarefas_projetos.id_tarefa 
 AND 
 tarefas_projetos.id_projeto=projetos.id_projeto 
 ORDER BY projetos.id_projeto asc; 
Teste mudanças na ordenação com ASC ou DESC 
Interpretação (MySQL):Denise
Typewriter
Através de uma junção natural entre as tabelas tarefas, tarefas_projetos e projetos, pede-se as tuplas do campo id_projeto em ordem
ascendente.
O DESC irá trocar a ordem dos resultados, que aparecerá em ordem decrescente.
Denise
Typewriter
26. 
SELECT * FROM 
 tarefas, tarefas_projetos, projetos 
 WHERE 
 tarefas.id_tarefa=tarefas_projetos.id_tarefa 
 AND 
 tarefas_projetos.id_projeto=projetos.id_projeto 
 GROUP BY projetos.id_projeto 
 ORDER BY projetos.id_projeto asc; 
Experimente este comando sem o "Group by" e sem o "Order by" depois execute o mesmo comando com estes dois complementos. Comente a diferença. 
Interpretação (MySQL): 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Denise
Typewriter
Com uma junção natural entre as tabelas citadas, o resultado deverá ser as tuplas do campo id_projeto, da tabela projetos. Ele deve estar 
agrupado e em ordem ascendente. 
O ''GROUP BY'' retira o resultado do grupo, e o "ORDER BY" não mostra o resultado ordenado.
Denise
Typewriter
27. 
SELECT * FROM (select id_projeto as idp, tx_nome_projeto from projetos) as p1, 
 atuacoes, 
 (select id_funcionario as idf, tx_primeiro_nome from funcionarios) as f1 
 WHERE p1.idp=atuacoes.id_projeto AND 
 atuacoes.id_funcionario=f1.idf; 
Para estudar este comando escreva antes este: 
SELECT * FROM projetos, atuacoes, funcionários WHERE projetos.id_projeto=atuacoes.id_projeto AND atuacoes.id_funcionario=funcionarios.id_funcionario e veja a 
estrutura de campos montada, repare nos nomes de campos repetidos. Depois execute e analise o comando proposto acima. 
Interpretação (MySQL): 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Denise
Typewriter
O comando pede para que renomeie o campo id_projeto por idp e id_funcionario por idf. Depois, ele pede para que selecione os campos 
idp e tx_nome_projeto da tabela projetos, e renomeie-os para p1. Depois, ele pede para que selecione os campos idf e tx_primeiro_nome
da tabela funcionarios, e renomeie-os para f1. Depois, ele pede para que faça uma junção entre as tabelas p1, f1 e atuacoes. Com isso,
será feito uma junção nas tuplas de idp e id_projeto das tabelas p1 e atuacoes, e id_funcionario e idf das tabelas atuacoes e f1.
Denise
Typewriter
Denise
Typewriter
Denise
Typewriter
Denise
Typewriter
Denise
Typewriter
Denise
Typewriter
Denise
Typewriter
Denise
Typewriter
Denise
Typewriter
Denise
Typewriter
28. 
SELECT id_depto, (vl_salario+vl_bonus+vl_comissao) as Remuneracao 
 FROM 
 funcionarios 
 WHERE (vl_salario+vl_bonus+vl_comissao) > 80000 
 GROUP BY id_depto ORDER by id_depto 
Interpretação (MySQL): 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Denise
Typewriter
Esse comando projeta o id_depto e a remuneração total de um funcionario de um departamento. Essa remuneração total é calculada com
base na soma de vl_salario, vl_bonus e vl_comissao. Os resultados serão agrupados e ordenados com as remunerações totais maiores que 
80000.
Denise
Typewriter
Denise
Typewriter
29. 
SELECT id_depto, (vl_salario+vl_bonus+vl_comissao) as Remuneracao 
 FROM 
 funcionarios 
 GROUP BY id_depto 
 HAVING Remuneracao>80000 
 ORDER by id_depto 
Comente o uso do subcomando HAVING 
Interpretação (MySQL): 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Denise
Typewriter
Esse comando projeta o id_depto e a remuneração total de um funcionario de um departamento. Essa remuneração total é calculada com
base na soma de vl_salario, vl_bonus e vl_comissao. Os resultados serão as tuplas de cada departamento com os dados do funcionário
que tem remuneração maior que 80000. Essas tuplas serão agrupadas e ordenadas.
Denise
Typewriter
30. 
SELECT id_funcionario as CodFunc, 
 vl_salario as Salario, 
 (vl_salario * 1.2314521) as SalCorr1, 
 TRUNCATE(vl_salario * 1.2314521,1 ) as SalCorr2 
 FROM 
 funcionarios 
 WHERE 
 vl_salario < 60000 
 ORDER BY 
 id_funcionario 
 Dê atenção ao uso da função TRUNCATE. Interprete e depois troque a função TRUNCATE por ROUND. 
Interpretação (MySQL): 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Denise
Typewriter
O comando projeta as colunas id_funcionario renomeadas para CodFunc, e vl_salario renomeadas para Salario. 
A condição pede que calcule duas vezes o vl_salario multiplicado por 1.2314523: uma será renomeado para SalCorr1 e a outra será renomeada para SalCorr2, onde registrará sua soma com uma casa decimal. Ele irá ordenar somente as tuplas que apresentam um valor 
na coluna vl_salario < 60000. Quando trocamos o TRUNCATE por ROUND conseguimos arredondar o valor da multiplicação e também 
deixá-los com uma casa decimal.
Denise
Typewriter
31. 
SELECT SUBSTR(tx_primeiro_nome,2, 5) FROM funcionarios; 
Mude os valores 2 e 5 e interprete a mudança 
PESQUISE e escreva pelo menos mais 5 (CINCO) funções de tratamento de textos no MySQL e no PostgreSQL 
Interpretação (MySQL): 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Denise
Typewriter
Esse comando irá mostrar os nomes dos funcionários, com 5 letras cada e a partir da 2ª letra, da tabela funcionário.
O número 2 indica onde o nome começará a ser exibido, e o número 5 indica a quantidade de letras de cada nome.Portanto, se alterar
esses números, ele irá mostrar a partir de outra letra e com outra quantidade de letras.
Denise
Typewriter
Denise
Typewriter
32. 
SELECT SUM(vl_salario) AS "Total", 
 AVG(vl_salario) AS "Média", 
 MIN(vl_salario ) AS "MIN", 
 MAX(vl_salario) AS "MAX", 
 COUNT(*) AS "Conta", 
 id_depto AS "Dept." 
 FROM funcionarios GROUP BY id_depto ORDER BY id_depto 
Execute este comando sem o GROUP BY e avalie a diferença 
Interpretação (MySQL): 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Denise
Typewriter
Nesse comando, é necessário que faça com os salários a soma, a média, os valores maximo e minimo e a quantidade de funcionários.
Feito os cálculos, é necessário que mude os nomes para "Total" quando fizer a soma, "Média" quando achar a média, "MIN" quando 
achar o valor mínimo, "MAX" quando achar o valor máximo e "Conta" para mostrar a quantidade de funcionários. O "Dept" serve para 
mostrar os departamentos. Feito isso, as tuplas deverão ser agrupadas em ordem.
33. 
SELECT count(tarefas_projetos.id_tarefa) as 'qtd acao', projetos.id_projeto 
 FROM 
 tarefas, tarefas_projetos, projetos 
 WHERE 
 tarefas.id_tarefa=tarefas_projetos.id_tarefa AND 
 tarefas_projetos.id_projeto=projetos.id_projeto 
 GROUP BY projetos.id_projeto HAVING count(tarefas_projetos.id_tarefa)>=10 
 ORDER BY projetos.id_projeto asc; 
Teste este comando tirando o subcomando HAVING e avalie a diferença. 
Interpretação (MySQL): 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Denise
Typewriter
O comando mostra a quantidade de tarefas de cada projeto, através de uma junção feita com as tabelas tarefas, tarefas_projetos e projetos. Essa quantidade de tarefas será ordenada pelo resultado das tuplas de id_projeto de maneira ascendente.
34. 
SELECT id_depto, ao_sexo, sum( vl_salario ) 
 FROM funcionarios 
 GROUP BY (concat( id_depto, ao_sexo )) 
 ORDER BY id_depto, ao_sexo 
Teste este comando com ORDER BY concat( id_depto, ao_sexo ) e avalie a diferença. 
Interpretação (MySQL): 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Denise
Typewriter
O comando mostra as tuplas de id_depto, ao_sexo e a soma as tuplas do campo vl_salario, da tabela funcionarios. O concat ajudará a
mostrar os resultados de maneira que, separe as tuplas do sexo masculino com as tuplas do sexo feminino. Essas tuplas serão agrupadas
e ordenadas a partir das tuplas das colunas id_depto e ao_sexo. 
Denise
Typewriter
35. 
SELECT id_depto,

Continue navegando