---
# System prepended metadata

title: "\n BD Essencial - Aula 1\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=":coffee:" src="https://cdn.jsdelivr.net/npm/@hackmd/emojify.js@2.1.0/dist/images/basic/coffee.png"> BD Essencial - Aula 1
</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 primeira aula, vamos falar sobre</p>
<ul>
<li>Cria&ccedil;&atilde;o de tabelas;</li>
<li>Chave prim&aacute;ria;</li>
<li>Chave estrangeira (foreign key);</li>
<li>Relacionamento 1-1;</li>
<li>Relacionamento 1-n;</li>
<li>INNER JOIN;</li>
<li>LEFT JOIN;</li>
<li>RIGHT JOIN;</li>
<li>not null, unique, auto_increment;</li>
<li>alter table, modify;</li>
<li>order by, em ordem normal ou descendente;</li>
<li>desc table;</li>
<li>IS NULL;</li>
<li>delete;</li>
</ul>

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

```sql=

--abrindo o MySql: usuario root e ele abre p/vc digitar a senha
mysql -u root -p
--mostrar todos os bancos de dados ja criados
show databases;

+--------------------+
| Database           |
+--------------------+
| bdauladois         |
| bdorm1             |
| bdtres             |
| information_schema |
| mysql              |
| performance_schema |
| phpmyadmin         |
| test               |
+--------------------+
8 rows in set (0.056 sec)

MariaDB [(none)]> show databases like 'te%';
+----------------+
| Database (te%) |
+----------------+
| test           |
+----------------+
1 row in set (0.001 sec)



drop database if exists  banco1;

create database banco1;

use banco1;

show tables;


create table cliente(
	idCliente int primary key AUTO_INCREMENT,
          nome varchar (50) not null, 
          email varchar (50) unique
);


-- Relacionamento One To Many 1-n
-- primeira forma normal
create table telefone (
	idTelefone int primary key AUTO_INCREMENT,
          numero varchar (20),
          operadora varchar (15),
          id_cliente int,
          foreign key(id_cliente) references cliente(idCliente)
);


insert into cliente(nome, email) values
('fernando', 'fernando@gmail'),
('belem', 'belem@gmail.com'),
('luciana', 'lu@gmail.com');

MariaDB [banco1]> select * from cliente;
+-----------+----------+-----------------+
| idCliente | nome     | email           |
+-----------+----------+-----------------+
|         1 | fernando | fernando@gmail  |
|         2 | belem    | belem@gmail.com |
|         3 | luciana  | lu@gmail.com    |
+-----------+----------+-----------------+

insert into telefone(numero, operadora, id_cliente) values
('21989878780', 'tim', 1),
('21912378780', 'nextel', 1),
('21334878780', 'oi', 2),
('21556878780', 'claro', 2),
('21989877770', 'vivo', 3);


MariaDB [banco1]> select * from telefone
    -> ;
+------------+-------------+-----------+------------+
| idTelefone | numero      | operadora | id_cliente |
+------------+-------------+-----------+------------+
|          1 | 21989878780 | tim       |          1 |
|          2 | 21912378780 | nextel    |          1 |
|          3 | 21334878780 | oi        |          2 |
|          4 | 21556878780 | claro     |          2 |
|          5 | 21989877770 | vivo      |          3 |
+------------+-------------+-----------+------------+

MariaDB [banco1]> select * from telefone order by operadora;
+------------+-------------+-----------+------------+
| idTelefone | numero      | operadora | id_cliente |
+------------+-------------+-----------+------------+
|          4 | 21556878780 | claro     |          2 |
|          2 | 21912378780 | nextel    |          1 |
|          3 | 21334878780 | oi        |          2 |
|          1 | 21989878780 | tim       |          1 |
|          5 | 21989877770 | vivo      |          3 |
+------------+-------------+-----------+------------+

select * from telefone order by operadora desc;

select cliente.nome, telefone.numero from cliente 
        INNER JOIN telefone 
        ON telefone.id_cliente = cliente.idCliente;

MariaDB [banco1]> select cliente.nome, telefone.numero from cliente 
                  INNER JOIN telefone ON
                  telefone.id_cliente = cliente.idCliente;
+----------+-------------+
| nome     | numero      |
+----------+-------------+
| fernando | 21989878780 |
| fernando | 21912378780 |
| belem    | 21334878780 |
| belem    | 21556878780 |
| luciana  | 21989877770 |
+----------+-------------+

select c.nome, t.numero from cliente as c
        INNER JOIN telefone as t
        ON t.id_cliente = c.idCliente;


-- relacionamento 1-1 One To One
create table endereco (
	idEndereco int primary key AUTO_INCREMENT,
	bairro varchar (50),
    cidade varchar (50),
    id_cliente int unique,
    foreign key(id_cliente) references cliente(idCliente)
); 
-- id_cliente int unique Isso garante que so poderei 
-- ter UM endereco para cada cliente

desc cliente;

MariaDB [banco1]> desc cliente;
+-----------+-------------+------+-----+---------+----------------+
| Field     | Type        | Null | Key | Default | Extra          |
+-----------+-------------+------+-----+---------+----------------+
| idCliente | int(11)     | NO   | PRI | NULL    | auto_increment |
| nome      | varchar(50) | NO   |     | NULL    |                |
| email     | varchar(50) | YES  | UNI | NULL    |                |
+-----------+-------------+------+-----+---------+----------------+

desc endereco;

MariaDB [banco1]> desc endereco;
+------------+-------------+------+-----+---------+----------------+
| Field      | Type        | Null | Key | Default | Extra          |
+------------+-------------+------+-----+---------+----------------+
| idEndereco | int(11)     | NO   | PRI | NULL    | auto_increment |
| bairro     | varchar(50) | YES  |     | NULL    |                |
| cidade     | varchar(50) | YES  |     | NULL    |                |
| id_cliente | int(11)     | YES  | UNI | NULL    |                |
+------------+-------------+------+-----+---------+----------------+

desc telefone;

MariaDB [banco1]> desc telefone;
+------------+-------------+------+-----+---------+----------------+
| Field      | Type        | Null | Key | Default | Extra          |
+------------+-------------+------+-----+---------+----------------+
| idTelefone | int(11)     | NO   | PRI | NULL    | auto_increment |
| numero     | varchar(20) | YES  |     | NULL    |                |
| operadora  | varchar(15) | YES  |     | NULL    |                |
| id_cliente | int(11)     | YES  | MUL | NULL    |                |
+------------+-------------+------+-----+---------+----------------+

-- MUL e UNI marcando 1-1 e 1-N

insert into endereco (bairro, cidade, id_cliente) values
('Ilha do Gov.', 'Rio de Janeiro', 1),
('Barra', 'Rio de Janeiro', 2),
('Grajau', 'Sao Paulo', 3);


insert into endereco (bairro, cidade, id_cliente) values
('Tijuca', 'Rio de Janeiro', 1);

/*
MariaDB [banco1]> insert into endereco (bairro, cidade, id_cliente) values
    -> ('Tijuca', 'Rio de Janeiro', 1);
ERROR 1062 (23000): Duplicate entry '1' for key 'id_cliente'
*/

-- inserindo cliente sem endereco

insert into cliente(nome, email) values ('joao', 'joao@gmail.com');

-- lista de clientes com endereco

select c.nome, e.* from cliente as c 
    INNER JOIN endereco as e
    ON c.idCliente = e.id_cliente;

-- simplificando

select c.nome, e.bairro, e.cidade from cliente as c 
    INNER JOIN endereco as e
    ON c.idCliente = e.id_cliente;


MariaDB [banco1]> select c.nome, e.* from cliente as c
    ->     INNER JOIN endereco as e
    ->     ON c.idCliente = e.id_cliente;
+----------+------------+--------------+----------------+------------+
| nome     | idEndereco | bairro       | cidade         | id_cliente |
+----------+------------+--------------+----------------+------------+
| fernando |          1 | Ilha do Gov. | Rio de Janeiro |          1 |
| belem    |          2 | Barra        | Rio de Janeiro |          2 |
| luciana  |          3 | Grajau       | Sao Paulo      |          3 |
+----------+------------+--------------+----------------+------------+
3 rows in set (0.002 sec)

MariaDB [banco1]> select c.nome, e.bairro, e.cidade from cliente as c
    ->     INNER JOIN endereco as e
    ->     ON c.idCliente = e.id_cliente;
+----------+--------------+----------------+
| nome     | bairro       | cidade         |
+----------+--------------+----------------+
| fernando | Ilha do Gov. | Rio de Janeiro |
| belem    | Barra        | Rio de Janeiro |
| luciana  | Grajau       | Sao Paulo      |
+----------+--------------+----------------+
3 rows in set (0.000 sec)

-- listando clientes COM OU SEM ENDERECO

select c.nome, e.bairro, e.cidade from cliente as c 
    LEFT JOIN endereco as e
    ON c.idCliente = e.id_cliente;

MariaDB [banco1]> select c.nome, e.bairro, e.cidade from cliente as c
    ->     LEFT JOIN endereco as e
    ->     ON c.idCliente = e.id_cliente;
+----------+--------------+----------------+
| nome     | bairro       | cidade         |
+----------+--------------+----------------+
| fernando | Ilha do Gov. | Rio de Janeiro |
| belem    | Barra        | Rio de Janeiro |
| luciana  | Grajau       | Sao Paulo      |
| joao     | NULL         | NULL           |
+----------+--------------+----------------+

-- listando clientes SEM ENDERECO

select c.nome, e.* from cliente as c 
    LEFT JOIN endereco as e
    ON c.idCliente = e.id_cliente;

MariaDB [banco1]> select c.nome, e.* from cliente as c
    ->     LEFT JOIN endereco as e
    ->     ON c.idCliente = e.id_cliente;
+----------+------------+--------------+----------------+------------+
| nome     | idEndereco | bairro       | cidade         | id_cliente |
+----------+------------+--------------+----------------+------------+
| fernando |          1 | Ilha do Gov. | Rio de Janeiro |          1 |
| belem    |          2 | Barra        | Rio de Janeiro |          2 |
| luciana  |          3 | Grajau       | Sao Paulo      |          3 |
| joao     |       NULL | NULL         | NULL           |       NULL |
+----------+------------+--------------+----------------+------------+


select c.nome, e.bairro, e.cidade from cliente as c 
    LEFT JOIN endereco as e
    ON c.idCliente = e.id_cliente
    where e.id_cliente IS NULL;

MariaDB [banco1]> select c.nome, e.bairro, e.cidade from cliente as c
    ->     LEFT JOIN endereco as e
    ->     ON c.idCliente = e.id_cliente
    ->     where e.id_cliente IS NULL;
+------+--------+--------+
| nome | bairro | cidade |
+------+--------+--------+
| joao | NULL   | NULL   |
+------+--------+--------+

-- endereco sem cliente - CUIDADO!!!

insert into endereco (bairro, cidade, id_cliente) values 
('lugar nenhum', 'cidade fantasma', null),
('lugar vazio', 'cidade deserta', null);

-- listando os enderecos "orfaos"

select c.nome, e.bairro, e.cidade from cliente as c
     RIGHT JOIN endereco as e
     ON c.idCliente = e.id_cliente
     where c.idCliente IS NULL;

MariaDB [banco1]> select c.nome, e.bairro, e.cidade from cliente as c
    ->      RIGHT JOIN endereco as e
    ->      ON c.idCliente = e.id_cliente
    ->      where c.idCliente IS NULL;
+------+--------------+-----------------+
| nome | bairro       | cidade          |
+------+--------------+-----------------+
| NULL | lugar nenhum | cidade fantasma |
| NULL | lugar vazio  | cidade deserta  |
+------+--------------+-----------------+

/* porem, nao nos interessa enderecos SEM clientes
precisamos alterar a tabela endereco para nao aceitar mais
insercoes de enderecos sem clientes e TAMBEM precisamos 
apagar esses enderecos da tabela endereco */


select * from endereco where id_cliente IS NULL;

MariaDB [banco1]> select * from endereco where id_cliente IS NULL;
+------------+--------------+-----------------+------------+
| idEndereco | bairro       | cidade          | id_cliente |
+------------+--------------+-----------------+------------+
|          5 | lugar nenhum | cidade fantasma |       NULL |
|          6 | lugar vazio  | cidade deserta  |       NULL |
+------------+--------------+-----------------+------------+

delete from endereco where id_cliente IS NULL;

MariaDB [banco1]> delete from endereco where id_cliente IS NULL;
Query OK, 2 rows affected (0.006 sec)

select * from endereco where id_cliente IS NULL;

MariaDB [banco1]> select * from endereco where id_cliente IS NULL;
Empty set (0.000 sec)

ALTER TABLE endereco MODIFY id_cliente int unique NOT NULL;

MariaDB [banco1]> ALTER TABLE endereco MODIFY id_cliente int unique NOT NULL;
Query OK, 0 rows affected, 1 warning (0.125 sec)
Records: 0  Duplicates: 0  Warnings: 1

MariaDB [banco1]> desc endereco;
+------------+-------------+------+-----+---------+----------------+
| Field      | Type        | Null | Key | Default | Extra          |
+------------+-------------+------+-----+---------+----------------+
| idEndereco | int(11)     | NO   | PRI | NULL    | auto_increment |
| bairro     | varchar(50) | YES  |     | NULL    |                |
| cidade     | varchar(50) | YES  |     | NULL    |                |
| id_cliente | int(11)     | NO   | UNI | NULL    |                |
+------------+-------------+------+-----+---------+----------------+

-- precisamos alterar a tabela telefone para não haver 
-- telefone sem cliente
select * from telefone where id_cliente IS NULL;
MariaDB [banco1]> select * from telefone where id_cliente IS NULL;
Empty set (0.001 sec)

ALTER TABLE telefone MODIFY id_cliente int NOT NULL;

MariaDB [banco1]> ALTER TABLE telefone MODIFY id_cliente int NOT NULL;
Query OK, 0 rows affected (0.103 sec)
Records: 0  Duplicates: 0  Warnings: 0

MariaDB [banco1]> desc telefone;
+------------+-------------+------+-----+---------+----------------+
| Field      | Type        | Null | Key | Default | Extra          |
+------------+-------------+------+-----+---------+----------------+
| idTelefone | int(11)     | NO   | PRI | NULL    | auto_increment |
| numero     | varchar(20) | YES  |     | NULL    |                |
| operadora  | varchar(15) | YES  |     | NULL    |                |
| id_cliente | int(11)     | NO   | MUL | NULL    |                |
+------------+-------------+------+-----+---------+----------------+


/* listando tudo de todas as tabelas
lembrando q nao ha nem telefone nem endereco sem cliente
mas ha cliente sem endereco e/ou sem telefone */

select * from endereco e 
    right join cliente c 
    on c.idCliente = e.id_cliente
    left join telefone t
    on t.id_cliente = c.idCliente;

MariaDB [banco1]> select * from endereco e
    ->     right join cliente c
    ->     on c.idCliente = e.id_cliente
    ->     left join telefone t
    ->     on t.id_cliente = c.idCliente;



```

<h4>
Resultado da última consulta do painel acima:
</h4>

```sql=

select * from endereco e 
    right join cliente c 
    on c.idCliente = e.id_cliente
    left join telefone t
    on t.id_cliente = c.idCliente;

MariaDB [banco1]> select * from endereco e
    ->     right join cliente c
    ->     on c.idCliente = e.id_cliente
    ->     left join telefone t
    ->     on t.id_cliente = c.idCliente;


+------------+--------------+----------------+------------+-----------+----------+-----------------+------------+-------------+-----------+------------+
| idEndereco | bairro       | cidade         | id_cliente | idCliente | nome     | email           | idTelefone | numero      | operadora | id_cliente |
+------------+--------------+----------------+------------+-----------+----------+-----------------+------------+-------------+-----------+------------+
|          1 | Ilha do Gov. | Rio de Janeiro |          1 |         1 | fernando | fernando@gmail  |          1 | 21989878780 | tim       |          1 |
|          1 | Ilha do Gov. | Rio de Janeiro |          1 |         1 | fernando | fernando@gmail  |          2 | 21912378780 | nextel    |          1 |
|          2 | Barra        | Rio de Janeiro |          2 |         2 | belem    | belem@gmail.com |          3 | 21334878780 | oi        |          2 |
|          2 | Barra        | Rio de Janeiro |          2 |         2 | belem    | belem@gmail.com |          4 | 21556878780 | claro     |          2 |
|          3 | Grajau       | Sao Paulo      |          3 |         3 | luciana  | lu@gmail.com    |          5 | 21989877770 | vivo      |          3 |
|       NULL | NULL         | NULL           |       NULL |         4 | joao     | joao@gmail.com  |       NULL | NULL        | NULL      |       NULL |
+------------+--------------+----------------+------------+-----------+----------+-----------------+------------+-------------+-----------+------------+
6 rows in set (0.001 sec)





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




