---
# System prepended metadata

title: "\n BD Essencial - Aula 8 \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 8 
</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 oitava aula e na próxima, vamos fazer exercícios de <strong>SQL</strong></p>
<p>
Também vamos abordar os seguintes assuntos e comandos:
</p>
<ul>
<li>Alter Table, ADD CONSTRAINT;</li>
<li>initcap, lower, upper;</li>
<li>to_char, to_date;</li>
<li>HAVING;</li>
<li>create unique index;</li>
<li>create user, grant;</li>
<li>grant a sequências para valores de chaves primárias;</li>
<li>revoke;</li>
</ul>


```postgre=
drop database if exists banco40;
create database banco40;
\c banco40
select current_database();


begin;

CREATE TABLE empregado_ex (
 codEmp SERIAL primary key,
 nome VARCHAR(45),
 dataNasc DATE,
 endereco VARCHAR(90),
 sexo CHAR(1),
 salario DEC(10,2),
 codSuperv INT,
 codDepto INT
);

CREATE TABLE departamento_ex (
 codDepto SERIAL primary key,
 nome VARCHAR(45),
 gerente INT,
 dataGerente DATE
);

CREATE TABLE projeto_ex (
 codProj SERIAL primary key,
 titulo VARCHAR(45),
 codDepto INT
);

CREATE TABLE trabalhaEm_ex (
 codEmp INT NOT NULL,
 codProj INT NOT NULL,
 horas INT,
 primary key (codEmp,codProj)
);

CREATE TABLE dependente_ex (
 codEmp INT NOT NULL,
 nome VARCHAR(45),
 sexo CHAR(1),
 dataNasc DATE,
 relacao VARCHAR(20),
 primary key (codEmp,nome)
);

ALTER TABLE empregado_ex ADD CONSTRAINT 
        empregado_depto_ex_fk FOREIGN KEY 
(codDepto) REFERENCES departamento_ex(codDepto);
ALTER TABLE projeto_ex ADD CONSTRAINT 
        projeto_depto_ex_fk FOREIGN KEY 
(codDepto) REFERENCES departamento_ex(codDepto);
ALTER TABLE dependente_ex ADD CONSTRAINT 
        dependente_empregado_ex_fk FOREIGN 
KEY (codEmp) REFERENCES empregado_ex(codEmp);

commit;

begin;

INSERT INTO departamento_ex VALUES 
(5,'Pesquisa',2,'22/05/1988');
INSERT INTO departamento_ex VALUES 
(4,'Administracao',4,'01/01/1985');
INSERT INTO departamento_ex VALUES 
(1,'Direcao',7,'19/06/1981');
INSERT INTO empregado_ex VALUES 
(1,'Joao da Silva','09/01/1955','Rua dos 
Camelos, 23','M',30000,2,5);
INSERT INTO empregado_ex VALUES 
(2,'Horacio Bagual','10/10/1970','Av. dos 
Tapejaras, 90','M',40000,7,5);
INSERT INTO empregado_ex VALUES 
(3,'Ana Bacana','20/06/1980','Av. Atacama, 
10 apto 22','F',25000,4,4);
INSERT INTO empregado_ex VALUES 
(4,'Antonio Pestana','13/04/1990','Rod. 
Imigrantes, 1940','M',45000,7,4);
INSERT INTO empregado_ex VALUES 
(5,'Maria Antonia Real','14/11/1982','Rua 
Petropolis, 13','F',38000,2,5);
INSERT INTO empregado_ex VALUES 
(6,'Ada Maria Lovelace','15/10/1965','Rua 
dos Ingleses, 1020','F',25000,2,5);
INSERT INTO empregado_ex VALUES 
(8,'Joaquina Pasqualini','17/08/1968','Rua 
dos Ingleses, 1010','F',25000,4,4);
INSERT INTO empregado_ex VALUES 
(7,'Jaime Bonde','01/01/1958','Rua dos 
Ingleses, 1010','M',70000,null,1);
INSERT INTO projeto_ex VALUES 
(1,'Transmogrifador',5);
INSERT INTO projeto_ex VALUES 
(2,'Cama Hiperbarica',5);
INSERT INTO projeto_ex VALUES 
(3,'Emissor de Raios Z',5);
INSERT INTO projeto_ex VALUES 
(10,'Gestao dos 80/20',4);
INSERT INTO projeto_ex VALUES 
(20,'Business Inteligence',1);
INSERT INTO projeto_ex VALUES 
(30,'Bonus para Inventores',4);
INSERT INTO trabalhaEm_ex VALUES (1,1,32.5);
INSERT INTO trabalhaEm_ex VALUES (1,2,7.5);
INSERT INTO trabalhaEm_ex VALUES (5,3,40);
INSERT INTO trabalhaEm_ex VALUES (6,1,20);
INSERT INTO trabalhaEm_ex VALUES (6,2,20);
INSERT INTO trabalhaEm_ex VALUES (2,2,10);
INSERT INTO trabalhaEm_ex VALUES (2,3,10);
INSERT INTO trabalhaEm_ex VALUES (2,10,10);
INSERT INTO trabalhaEm_ex VALUES (2,20,10);
INSERT INTO trabalhaEm_ex VALUES (3,30,30);
INSERT INTO trabalhaEm_ex VALUES (3,10,10);
INSERT INTO trabalhaEm_ex VALUES (8,10,35);
INSERT INTO trabalhaEm_ex VALUES (8,30,5);
INSERT INTO trabalhaEm_ex VALUES (4,30,20);
INSERT INTO trabalhaEm_ex VALUES (4,20,15);
INSERT INTO trabalhaEm_ex VALUES (7,20,0);
INSERT INTO trabalhaEm_ex VALUES (1,3,15);
INSERT INTO dependente_ex VALUES (2,'Joana 
Bagual','F','05/05/1986','Filha');
INSERT INTO dependente_ex VALUES (2,'Pedro 
Bagual','M','25/10/1983','Filho');
INSERT INTO dependente_ex VALUES (2,'Alice 
Bagual','F','03/05/1958','Esposa');
INSERT INTO dependente_ex VALUES (3,'Maximo 
Bacana','M','28/02/1942','Esposo');
INSERT INTO dependente_ex VALUES (1,'Jagunco da 
Silva','M','01/01/1978','Filho');
INSERT INTO dependente_ex VALUES (1,'Jaqueline da 
Silva','F','31/12/1978','Filha');
INSERT INTO dependente_ex VALUES (1,'Joana da 
Silva','F','05/05/1957','Esposa');

commit;



-- Alterar o salário do empregado de código 3 para 28000;
select salario from empregado_ex
where codEmp = 3;

banco40=# select salario from empregado_ex
banco40-# where codEmp = 3;
 salario
----------
 25000.00
(1 row)

update empregado_ex set SALARIO = 28000
where CODEMP = 3;

banco40=# select salario from empregado_ex
banco40-# where codEmp = 3;
 salario
----------
 28000.00
(1 row)



-- Obter nomes de empregados com salario > 30000;
select NOME, salario 
    from empregado_ex
    where SALARIO > 30000;

        nome        | salario
--------------------+----------
 Horacio Bagual     | 40000.00
 Antonio Pestana    | 45000.00
 Maria Antonia Real | 38000.00
 Jaime Bonde        | 70000.00

-- Obter nomes de empregados que trabalham no projeto 
-- 'Transmogrifador'.
select nome
  	from empregado_ex e,
      trabalhaEm_ex t,
      projeto_ex p
    where e.codemp = t.codemp
     and t.codproj = p.codproj
     and p.titulo = 'Transmogrifador';

select e.nome
    from empregado_ex e 
        INNER JOIN trabalhaEm_ex t
        ON e.codemp = t.codemp
        INNER JOIN projeto_ex p
        ON  t.codproj = p.codproj
        where p.titulo = 'Transmogrifador';

        nome
--------------------
 Joao da Silva
 Ada Maria Lovelace

-- Obter nomes e endereços de todos os empregados que trabalham 
-- no departamento de 'Pesquisa';
select INITCAP (e.nome), e.endereco, LOWER (d.nome)
  from empregado_ex e 
    INNER JOIN departamento_ex d
    ON e.coddepto = d.coddepto
  where upper (d.nome) = 'PESQUISA';

      initcap       |      endereco      |  lower
--------------------+--------------------+----------
 Joao Da Silva      | Rua dos           +| pesquisa
                    | Camelos, 23        |
 Horacio Bagual     | Av. dos           +| pesquisa
                    | Tapejaras, 90      |
 Maria Antonia Real | Rua               +| pesquisa
                    | Petropolis, 13     |
 Ada Maria Lovelace | Rua               +| pesquisa
                    | dos Ingleses, 1020 |


-- Obter nomes de empregados que começam com a letra 'A';
 select INITCAP (e.nome)
 from empregado_ex e
 where upper (e.nome) LIKE 'A%';

      initcap
--------------------
 Antonio Pestana
 Ada Maria Lovelace
 Ana Bacana

-- Obter os nomes e datas de nascimento dos empregados que fazem 
-- aniversário no mês de outubro;
 select nome, dataNasc
  from empregado_ex
  where to_char(dataNasc, 'MM') = '10';

        nome        |  datanasc
--------------------+------------
 Horacio Bagual     | 1970-10-10
 Ada Maria Lovelace | 1965-10-15

-- Obter os nomes dos empregados nascidos entre as 
-- datas 1950-01-01 e 1970-01-01;
 select nome, dataNasc
  from empregado_ex
  where dataNasc between to_date ('01/01/1950', 'dd/mm/yyyy')
  and to_date ('01/01/1970', 'dd/mm/yyyy');

        nome         |  datanasc
---------------------+------------
 Joao da Silva       | 1955-01-09
 Ada Maria Lovelace  | 1965-10-15
 Joaquina Pasqualini | 1968-08-17
 Jaime Bonde         | 1958-01-01

-- Listar os títulos de projetos em ordem alfabética;
 select initcap (titulo) from projeto_ex
 order by titulo;
 -- order by titulo desc;
        initcap
-----------------------
 Bonus Para Inventores
 Business Inteligence
 Cama Hiperbarica
 Emissor De Raios Z
 Gestao Dos 80/20
 Transmogrifador

-- Listar nomes e horas trabalhadas por empregados no projeto 
-- de código 3, em ordem decrescente de horas trabalhadas;
 select e.nome, t.horas
  from empregado_ex e 
  INNER JOIN trabalhaEm_ex t
  ON t.codemp = e.codemp 
   INNER JOIN projeto_ex p
   ON p.codproj = t.codproj
   where p.codproj = 3
  order by t.horas desc;

 select e.nome, t.horas
  from empregado_ex e, trabalhaEm_ex t, projeto_ex p
  where t.codemp = e.codemp 
   and p.codproj = t.codproj
   and p.codproj = 3
  order by t.horas desc;
        
        nome        | horas
--------------------+-------
 Maria Antonia Real |    40
 Joao da Silva      |    15
 Horacio Bagual     |    10

-- Obter códigos de empregados que trabalham mais de 10 horas 
-- em algum projeto. 
-- O resultado da consulta não deve ter repetições 
-- de códigos de empregados;
select distinct e.codemp, e.nome
   from empregado_ex e, trabalhaEm_ex t, projeto_ex p
   where t.codemp = e.codemp
    and p.codproj = t.codproj
    and t.horas > 10;
 codemp |        nome
--------+---------------------
      4 | Antonio Pestana
      3 | Ana Bacana
      5 | Maria Antonia Real
      8 | Joaquina Pasqualini
      6 | Ada Maria Lovelace
      1 | Joao da Silva
(6 rows)    

select distinct e.codemp, e.nome, 
    sum(t.horas) as Total_Horas
   from empregado_ex e 
   INNER JOIN trabalhaEm_ex t
   ON t.codemp = e.codemp 
   INNER JOIN projeto_ex p
   ON p.codproj = t.codproj
    and t.horas > 10
   group by e.codemp
   order by Total_Horas desc;
 codemp |        nome         | total_horas
--------+---------------------+-------------
      1 | Joao da Silva       |          48
      5 | Maria Antonia Real  |          40
      6 | Ada Maria Lovelace  |          40
      4 | Antonio Pestana     |          35
      8 | Joaquina Pasqualini |          35
      3 | Ana Bacana          |          30
(6 rows)

```

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




