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