---
# System prepended metadata

title: "\n BD Essencial - Aula 4\n"

---

<p><img src="https://i.imgur.com/D01Fpky.png" alt="" title="Entre no nosso site e veja nossos cursos"></p>
<h1>
<img class="emoji" alt="" src="https://image.flaticon.com/icons/png/128/2906/2906274.png"> BD Essencial - Aula 4
</h1>

<p>O objetivo desse curso &eacute; capacitar o aluno a entrar no mercado de trabalho executando as atividades primordiais que s&atilde;o solicitadas no desenvolvimento, manuten&ccedil;&atilde;o, ou atualiza&ccedil;&atilde;o de bancos de dados dos mais diferentes tipos de sistemas.</p>
<p>Focamos na execu&ccedil;&atilde;o, e n&atilde;o em cria&ccedil;&atilde;o de diagramas - atividade essa que &eacute; desenvolvida por profissionais mais experientes.</p>
<p>Nas nossas prieiras aulas, utilizamos o Gerenciador de Bancos de Dados Relacionais <strong>MySQL</strong> nesse nosso curso de Banco de Dados Essencial, porque essa ferramenta &eacute; gratuita e de f&aacute;cil utiliza&ccedil;&atilde;o - entretanto, todo o nosso conte&uacute;do pode ser aplicado em qualquer Gerenciador de Bancos de Dados Relacionais, apenas com algumas m&iacute;nimas diferen&ccedil;as.</p>
<p>Na segunda parte do curso, utilizamos o Gerenciador de Bancos de Dados Relacionais <strong>PostgreSQL</strong>.</p>

<blockquote style="border-left-color: red;">
<p><span class="color" data-color="red"></span><span> </span><small><i class="fa fa-user"></i> Prof Fernando Gomes - fernandojnr@gmail.com</small></p></blockquote>


<h2 id="-Tema-da-aula" data-id="-Tema-da-aula"><a class="anchor hidden-xs" href="#-Tema-da-aula" title="-Tema-da-aula"><span class="octicon octicon-link"></span></a><img class="emoji" alt=":book:" src="https://cdn.jsdelivr.net/npm/@hackmd/emojify.js@2.1.0/dist/images/basic/book.png">
<span> Tema da aula:</span></h2><span>
<p>Nessa quarta aula, vamos fazer exercícios com os principais comandos SQL já estudados, e também vamos falar sobre</p>
<ul>
<li>Números com casas decimais, como em valor monetário;</li>
<li>Float;</li>
<li>ifnull;</li>
<li>IS NOT NULL;</li>
</ul>
<p>&nbsp;</p>

```sql=
use banco5;


create table cargo(idCargo int primary key,
    nome varchar (35),
    salario dec (15,2));


create table funcionario(idFuncionario int 
	primary key auto_increment,
   nome varchar (50) not null,
   sexo enum('m','f') not null,
   id_cargo int,
    foreign key(id_cargo) references cargo(idCargo));

-- para simplificar, vamos considerar q o conjuge 
-- nao eh funcionario
create table conjuge(
    idConjuge int primary key auto_increment,
    nome varchar (55) not null,
    cpf varchar (15) not null unique, 
    id_funcionario int,
    foreign key(id_funcionario) 
    references funcionario(idFuncionario)); 
   


create table projeto(idProjeto int 
        primary key auto_increment,
     nome varchar (30) not null,
     valor float ,
     datainicio date,
     tempPrev int,
     porcentBonus float);



create table FuncionarioAlocado(
      id_func int not null,
      id_proj int not null,
  primary key(id_func, id_proj),
  foreign key(id_func) 
        references funcionario(idFuncionario),
  foreign key(id_proj) 
        references projeto(idProjeto));
    
   


insert into cargo(idCargo, nome, salario) values 
 (1000,'estagio',1800),
 (4000,'programador junior', 2500),
 (2000,'programador pleno', 3800),
 (3000,'programador senior', 8000);


insert into funcionario(idFuncionario,nome,sexo,id_cargo)
 values (5001,'lu','f',2000),
	(5002,'marcel','m',3000),
     (5003,'fabio','m',4000),
     (5004,'globinho','m',4000);


insert into conjuge (idConjuge,nome, cpf, id_funcionario) 
 values (6000,'marcela','222222',5004),
    (6001,'fabiana','333333',5003);


insert into projeto values
(null,'academico',150000,'2015-01-15',
 260, 0.01);

insert into projeto values
(null,'ecommerce',350000,'2016-03-15',
 360, 0.005);

select * from funcionario;  

+---------------+----------+------+----------+
| idFuncionario | nome     | sexo | id_cargo |
+---------------+----------+------+----------+
|          5001 | lu       | f    |     2000 |
|          5002 | marcel   | m    |     3000 |
|          5003 | fabio    | m    |     4000 |
|          5004 | globinho | m    |     4000 |
+---------------+----------+------+----------+

select * from projeto;

+-----------+-----------+--------+------------+
| idProjeto | nome      | valor  | datainicio |
+-----------+-----------+--------+------------+
|         1 | academico | 150000 | 2015-01-15 |
|         2 | ecommerce | 350000 | 2016-03-15 |
+-----------+-----------+--------+------------+

----------+--------------+
 tempPrev | porcentBonus |
----------+--------------+
      260 |         0.01 |
      360 |        0.005 |
----------+--------------+


insert into FuncionarioAlocado(id_func, id_proj) 
values(5001,1), (5001,2), 
(5002,1),(5003,1),(5004,2);


select * from FuncionarioAlocado;

+---------+---------+
| id_func | id_proj |
+---------+---------+
|    5001 |       1 |
|    5001 |       2 |
|    5002 |       1 |
|    5003 |       1 |
|    5004 |       2 |
+---------+---------+


-- View com os seguintes campos
-- (nomefuncionario, cargo, salario, nomeesposa)
create or replace view v$FuncionarioConjuge as
 select f.nome as nomeFunc, c.nome as cargo, c.salario, 
	con.nome as nomeConjuge  from funcionario f 
    inner join cargo c
   on c.idCargo = f.id_cargo 
    inner join conjuge con
   on con.id_funcionario = f.idFuncionario;

MariaDB [banco5]> select * from v$FuncionarioConjuge;
+----------+--------------------+---------+-------------+
| nomeFunc | cargo              | salario | nomeConjuge |
+----------+--------------------+---------+-------------+
| globinho | programador junior | 2500.00 | marcela     |
| fabio    | programador junior | 2500.00 | fabiana     |
+----------+--------------------+---------+-------------+

-- select com nome do funcionario, 
-- cargo, salario, nome do conjuge
-- e nome do projeto a q esta alocado
 select f.nome as nomeFunc, c.nome as cargo, c.salario, 
	con.nome as nomeConj , proj.nome from funcionario f 
    inner join cargo c
   on c.idCargo = f.id_cargo 
    left join conjuge con
   on con.id_funcionario = f.idFuncionario
   inner join FuncionarioAlocado faloc
   on f.idFuncionario = faloc.id_func
   inner join projeto proj
   on proj.idProjeto = faloc.id_proj;
  
+----------+--------------------+---------+----------+-----------+
| nomeFunc | cargo              | salario | nomeConj | nome      |
+----------+--------------------+---------+----------+-----------+
| globinho | programador junior | 2500.00 | marcela  | ecommerce |
| fabio    | programador junior | 2500.00 | fabiana  | academico |
| lu       | programador pleno  | 3800.00 | NULL     | academico |
| marcel   | programador senior | 8000.00 | NULL     | academico |
| lu       | programador pleno  | 3800.00 | NULL     | ecommerce |
+----------+--------------------+---------+----------+-----------+

-- select com nome funcionario, cargo, salario
-- e nome do conjuge
 select f.nome as nomeFuncionario, c.nome as cargo, c.salario, 
	con.nome as nomeConjuge  from funcionario f 
    inner join cargo c
   on c.idCargo = f.id_cargo 
    left join conjuge con
   on con.id_funcionario = f.idFuncionario;


+-----------------+--------------------+---------+-------------+
| nomeFuncionario | cargo              | salario | nomeConjuge |
+-----------------+--------------------+---------+-------------+
| globinho        | programador junior | 2500.00 | marcela     |
| fabio           | programador junior | 2500.00 | fabiana     |
| lu              | programador pleno  | 3800.00 | NULL        |
| marcel          | programador senior | 8000.00 | NULL        |
+-----------------+--------------------+---------+-------------+



create table totais(idTotal int primary key auto_increment,
    valor float, 
    data date,
    curso varchar (15),
    professor varchar (35));

set autocommit = 0;

 insert into totais values (1000, 3800,'2016-08-08',
 'java developer','rodrigo');
 insert into totais values (1001, 3800,'2016-07-08',
 'java developer','wallace');  
 insert into totais values (1002, 3800,'2016-11-10',
 'java developer','lu');  
 insert into totais values (1003, 5000,'2016-11-10',
 'oracle','wallace');  
 insert into totais values (1004, 5000,'2016-12-10',
 'oracle','lu');  
 insert into totais values (1005, 12000,'2016-12-10',
 'java certif','rodrigo');  
 insert into totais values (1006, null,'2017-01-10',
 'linux',null);

commit;

--lista de professores e abaixo, a lista de cursos
select distinct ifnull(professor,'Professor inexistente') 
		as "professor" ,'' as curso from totais

 union 

select '',curso  from totais;

+-----------------------+----------------+
| professor             | curso          |
+-----------------------+----------------+
| rodrigo               |                |
| wallace               |                |
| lu                    |                |
| Professor inexistente |                |
|                       | java developer |
|                       | oracle         |
|                       | java certif    |
|                       | linux          |
+-----------------------+----------------+

-- lista de professores
select distinct professor from totais
where professor is not null;

+-----------+
| professor |
+-----------+
| rodrigo   |
| wallace   |
| lu        |
+-----------+

-- lista de cursos q tem professores
select professor, curso
from totais
where professor is not null
order by curso;

-- qual eh o faturamento total com os cursos
select sum(valor) from totais;
+------------+
| sum(valor) |
+------------+
|      33400 |
+------------+

-- faturamento total de cada curso
select sum(valor), curso
from totais
where professor is not null
group by curso;
-- group by sempre por ultimo

+------------+----------------+
| sum(valor) | curso          |
+------------+----------------+
|      12000 | java certif    |
|      11400 | java developer |
|      10000 | oracle         |
+------------+----------------+




```

<!--
<h3>
Tipos de Dados Numéricos do MySQL
</h3>

<p>
Na tabela abaixo vemos os tipos da dados numéricos aceitos no MySQL. Utilizamos, BIT ou TINYINT(1) para armazenar um campo booleano. Além dessa situação, os mais utilizados são TINYINT, INT, e DOUBLE. Por padrão, os campos admitem números com sinal, portanto, o padrão [default] é SIGNED.
</p>

![](https://i.imgur.com/ctbQVW0.png)
-->

<blockquote style="border-left-color: red;">
<p><span class="color" data-color="red"></span><span> </span><small><i class="fa fa-user"></i> Prof Fernando Gomes - fernandojnr@gmail.com</small></p></blockquote>

<br>
<div class="alert alert-info">
<blockquote style="border-left-color: blue;">
<p><span class="color" data-color="blue"></span><span> </span><small><i class="fa fa-user"></i> E.B. Cursos https://www.cursoseb.com.br/</small><br>
<span class="color" data-color="blue"></span><span> </span><small><i class="fa fa-user"></i> E.B. Cursos EAD https://edsonbelemtreinamento.com.br/ead/</small></p>
</blockquote>
</div>




