<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 é capacitar o aluno a entrar no mercado de trabalho executando as atividades primordiais que são solicitadas no desenvolvimento, manutenção, ou atualização de bancos de dados dos mais diferentes tipos de sistemas.</p>
<p>Focamos na execução, e não em criação de diagramas - atividade essa que é 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 é gratuita e de fácil utilização - entretanto, todo o nosso conteúdo pode ser aplicado em qualquer Gerenciador de Bancos de Dados Relacionais, apenas com algumas mínimas diferenç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> </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>

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