diff --git a/content/posts/sql-structured-query-language/assets/join-example-1-dark.png b/content/posts/sql-structured-query-language/assets/join-example-1-dark.png
new file mode 100644
index 00000000..30373474
Binary files /dev/null and b/content/posts/sql-structured-query-language/assets/join-example-1-dark.png differ
diff --git a/content/posts/sql-structured-query-language/assets/join-example-1-fixed-result-dark.png b/content/posts/sql-structured-query-language/assets/join-example-1-fixed-result-dark.png
new file mode 100644
index 00000000..bd7acdf0
Binary files /dev/null and b/content/posts/sql-structured-query-language/assets/join-example-1-fixed-result-dark.png differ
diff --git a/content/posts/sql-structured-query-language/assets/join-example-1-fixed-result-light.png b/content/posts/sql-structured-query-language/assets/join-example-1-fixed-result-light.png
new file mode 100644
index 00000000..2e464002
Binary files /dev/null and b/content/posts/sql-structured-query-language/assets/join-example-1-fixed-result-light.png differ
diff --git a/content/posts/sql-structured-query-language/assets/join-example-1-light.png b/content/posts/sql-structured-query-language/assets/join-example-1-light.png
new file mode 100644
index 00000000..f411178a
Binary files /dev/null and b/content/posts/sql-structured-query-language/assets/join-example-1-light.png differ
diff --git a/content/posts/sql-structured-query-language/assets/join-example-1-result-dark.png b/content/posts/sql-structured-query-language/assets/join-example-1-result-dark.png
new file mode 100644
index 00000000..9c881f9b
Binary files /dev/null and b/content/posts/sql-structured-query-language/assets/join-example-1-result-dark.png differ
diff --git a/content/posts/sql-structured-query-language/assets/join-example-1-result-light.png b/content/posts/sql-structured-query-language/assets/join-example-1-result-light.png
new file mode 100644
index 00000000..b7e3d596
Binary files /dev/null and b/content/posts/sql-structured-query-language/assets/join-example-1-result-light.png differ
diff --git a/content/posts/sql-structured-query-language/assets/natural-join-reference-dark.png b/content/posts/sql-structured-query-language/assets/natural-join-reference-dark.png
new file mode 100644
index 00000000..38964bbd
Binary files /dev/null and b/content/posts/sql-structured-query-language/assets/natural-join-reference-dark.png differ
diff --git a/content/posts/sql-structured-query-language/assets/natural-join-reference-light.png b/content/posts/sql-structured-query-language/assets/natural-join-reference-light.png
new file mode 100644
index 00000000..274efaa0
Binary files /dev/null and b/content/posts/sql-structured-query-language/assets/natural-join-reference-light.png differ
diff --git a/content/posts/sql-structured-query-language/assets/result-full-join-example-dark.png b/content/posts/sql-structured-query-language/assets/result-full-join-example-dark.png
new file mode 100644
index 00000000..15d80b78
Binary files /dev/null and b/content/posts/sql-structured-query-language/assets/result-full-join-example-dark.png differ
diff --git a/content/posts/sql-structured-query-language/assets/result-full-join-example-light.png b/content/posts/sql-structured-query-language/assets/result-full-join-example-light.png
new file mode 100644
index 00000000..2eedf6ed
Binary files /dev/null and b/content/posts/sql-structured-query-language/assets/result-full-join-example-light.png differ
diff --git a/content/posts/sql-structured-query-language/assets/result-inner-join-example-dark.png b/content/posts/sql-structured-query-language/assets/result-inner-join-example-dark.png
new file mode 100644
index 00000000..447fa61d
Binary files /dev/null and b/content/posts/sql-structured-query-language/assets/result-inner-join-example-dark.png differ
diff --git a/content/posts/sql-structured-query-language/assets/result-inner-join-example-light.png b/content/posts/sql-structured-query-language/assets/result-inner-join-example-light.png
new file mode 100644
index 00000000..bd0965bd
Binary files /dev/null and b/content/posts/sql-structured-query-language/assets/result-inner-join-example-light.png differ
diff --git a/content/posts/sql-structured-query-language/assets/result-inner-join-query-1-dark.png b/content/posts/sql-structured-query-language/assets/result-inner-join-query-1-dark.png
new file mode 100644
index 00000000..7596024e
Binary files /dev/null and b/content/posts/sql-structured-query-language/assets/result-inner-join-query-1-dark.png differ
diff --git a/content/posts/sql-structured-query-language/assets/result-inner-join-query-1-light.png b/content/posts/sql-structured-query-language/assets/result-inner-join-query-1-light.png
new file mode 100644
index 00000000..d6be055a
Binary files /dev/null and b/content/posts/sql-structured-query-language/assets/result-inner-join-query-1-light.png differ
diff --git a/content/posts/sql-structured-query-language/assets/result-inner-join-query-2-dark.png b/content/posts/sql-structured-query-language/assets/result-inner-join-query-2-dark.png
new file mode 100644
index 00000000..a9454613
Binary files /dev/null and b/content/posts/sql-structured-query-language/assets/result-inner-join-query-2-dark.png differ
diff --git a/content/posts/sql-structured-query-language/assets/result-inner-join-query-2-light.png b/content/posts/sql-structured-query-language/assets/result-inner-join-query-2-light.png
new file mode 100644
index 00000000..890e025a
Binary files /dev/null and b/content/posts/sql-structured-query-language/assets/result-inner-join-query-2-light.png differ
diff --git a/content/posts/sql-structured-query-language/assets/result-left-join-example-dark.png b/content/posts/sql-structured-query-language/assets/result-left-join-example-dark.png
new file mode 100644
index 00000000..dce42f3d
Binary files /dev/null and b/content/posts/sql-structured-query-language/assets/result-left-join-example-dark.png differ
diff --git a/content/posts/sql-structured-query-language/assets/result-left-join-example-light.png b/content/posts/sql-structured-query-language/assets/result-left-join-example-light.png
new file mode 100644
index 00000000..74169f3d
Binary files /dev/null and b/content/posts/sql-structured-query-language/assets/result-left-join-example-light.png differ
diff --git a/content/posts/sql-structured-query-language/assets/result-right-join-example-dark.png b/content/posts/sql-structured-query-language/assets/result-right-join-example-dark.png
new file mode 100644
index 00000000..652e980c
Binary files /dev/null and b/content/posts/sql-structured-query-language/assets/result-right-join-example-dark.png differ
diff --git a/content/posts/sql-structured-query-language/assets/result-right-join-example-light.png b/content/posts/sql-structured-query-language/assets/result-right-join-example-light.png
new file mode 100644
index 00000000..4b087ea7
Binary files /dev/null and b/content/posts/sql-structured-query-language/assets/result-right-join-example-light.png differ
diff --git a/content/posts/sql-structured-query-language/assets/tables-tecnico-experiencia-dark.png b/content/posts/sql-structured-query-language/assets/tables-tecnico-experiencia-dark.png
new file mode 100644
index 00000000..27b0ace7
Binary files /dev/null and b/content/posts/sql-structured-query-language/assets/tables-tecnico-experiencia-dark.png differ
diff --git a/content/posts/sql-structured-query-language/assets/tables-tecnico-experiencia-light.png b/content/posts/sql-structured-query-language/assets/tables-tecnico-experiencia-light.png
new file mode 100644
index 00000000..a4c9b3e0
Binary files /dev/null and b/content/posts/sql-structured-query-language/assets/tables-tecnico-experiencia-light.png differ
diff --git a/content/posts/sql-structured-query-language/assets/tables-tecnico-experiencia-tipos-dark.png b/content/posts/sql-structured-query-language/assets/tables-tecnico-experiencia-tipos-dark.png
new file mode 100644
index 00000000..0841e78d
Binary files /dev/null and b/content/posts/sql-structured-query-language/assets/tables-tecnico-experiencia-tipos-dark.png differ
diff --git a/content/posts/sql-structured-query-language/assets/tables-tecnico-experiencia-tipos-light.png b/content/posts/sql-structured-query-language/assets/tables-tecnico-experiencia-tipos-light.png
new file mode 100644
index 00000000..d293ca09
Binary files /dev/null and b/content/posts/sql-structured-query-language/assets/tables-tecnico-experiencia-tipos-light.png differ
diff --git a/content/posts/sql-structured-query-language/assets/wrong-natural-join-reference-dark.png b/content/posts/sql-structured-query-language/assets/wrong-natural-join-reference-dark.png
new file mode 100644
index 00000000..905a69f0
Binary files /dev/null and b/content/posts/sql-structured-query-language/assets/wrong-natural-join-reference-dark.png differ
diff --git a/content/posts/sql-structured-query-language/assets/wrong-natural-join-reference-light.png b/content/posts/sql-structured-query-language/assets/wrong-natural-join-reference-light.png
new file mode 100644
index 00000000..e9dce04b
Binary files /dev/null and b/content/posts/sql-structured-query-language/assets/wrong-natural-join-reference-light.png differ
diff --git a/content/posts/sql-structured-query-language/sql-structured-query-language.mdx b/content/posts/sql-structured-query-language/sql-structured-query-language.mdx
index d38dadce..c25d32ee 100644
--- a/content/posts/sql-structured-query-language/sql-structured-query-language.mdx
+++ b/content/posts/sql-structured-query-language/sql-structured-query-language.mdx
@@ -1,19 +1,18 @@
---
title: 'SQL - Structured Query Language'
date: '2024-05-02T14:34:47.275Z'
-lastUpdate: '2024-05-14T15:14:00.275Z'
+lastUpdate: '2024-06-11T16:40:00.275Z'
description: 'Introdução à linguagem SQL e seus principais comandos.'
category: 'Article'
tags: 'sql,ddl,dml,dcl,database,fapam,gti,postgresql'
status: 'draft'
---
-{/*
-[Aula 11](assets/Aula_11_SQL_DML_Parte_3.pdf)
-[Comandos Avançados](assets/SQL_Comandos_Avancados.pdf)
-*/}
+
+{/* [Comandos Avançados](assets/SQL_Comandos_Avancados.pdf) */}
+
- Esse artigo é um resumo feito no intuito de servir como fixação dos conteúdos que estou estudando no momento, ministrado pelo professor **Gabriel Ribeiro Diniz** para as aulas de **Banco de Dados** no curso de [**Gestão de TI - FAPAM**](https://www.fapam.edu.br/graduacao/project/gestao-de-t-i/).
+ Esse artigo é um resumo feito no intuito de servir como fixação dos conteúdos da matéria de **Banco de Dados**, no curso de [**Gestão da T.I - FAPAM**](https://www.fapam.edu.br/graduacao/project/gestao-de-t-i/) 1º Período. Aulas ministradas pelo professor [**Gabriel Ribeiro Diniz**](https://www.linkedin.com/in/gabriel-r-diniz/).
# Linguagem SQL
@@ -275,6 +274,7 @@ A **FK** pode ser declarada com algumas opções de ação para deleção (`ON D
**Restrição de Atributos** (PostgreSQL):
- `NOT NULL{:sql}` - **NN** - O valor não pode ser nulo.
- `DEFAULT {:sql}` - O valor padrão para o atributo caso não seja passado.
+- `UNIQUE{:sql}` - O valor não pode ser repetido, deve ser único.
### Cláusulas da FK
@@ -369,6 +369,10 @@ Sintaxe:
FOREIGN KEY cpf_cliente REFERENCES Cliente(cpf) ON UPDATE NO ACTION
```
+## Constraits
+
+_Constraits_ são todas as restrições que uma coluna pode ter (`PRIMARY KEY{:sql}`, `FOREIGN KEY{:sql}`, `NOT NULL{:sql}`, `UNIQUE{:sql}`, etc).
+
## Remover base de dados (DB)
`DROP` remove toda a base de dados, incluindo todas as tabelas, dados, índices, etc.
@@ -1160,12 +1164,6 @@ _Resultado:_
6 | Peça F | 20.00 | 0
7 | Peça G | 17.00 | null
-
-**Artigo em construção...**
-
-
-{/*
-
## Junções (Comando `JOIN`)
Junção é a possibilidade de se criar relacionamentos entre tabelas, de forma a poder recuperar dados de mais de uma tabela em uma única consulta. Um jeito melhor e nativo de se juntar mais de uma tabela, diferente do método apresentado no capítulo [Seleção com Junção](#seleção-com-junção).
@@ -1177,10 +1175,8 @@ Isso é possível atravez do comando `JOIN{:sql}` (_junção_), que é usado par
Existem as variações de junções **internas** e **externas**.
**Internas**: `INNER JOIN{:sql}` e `NATURAL JOIN{:sql}`
+**Externas**: `OUTER JOIN{:sql}` (_`LEFT{:sql}`, `RIGHT{:sql}`, `FULL{:sql}`_)
-
-A palavra `INNER{:sql}` pode ser omitida
-
**Como funciona o comando `JOIN{:sql}`?**
@@ -1188,8 +1184,216 @@ Quando um comando `SELECT{:sql}` especifica campos de duas tabelas **sem nenhuma
Isso ocorre devido ao fato de que, para cada linha da primeira tabela, todas as linhas da segunda são processadas. Operações de junção toma duas relações, e têm como resultado uma outra relação.
-**Funcionamento do comando `JOIN{:sql}`
+
+
+
+
+
+
+
+Porém, o benefício do `JOIN{:sql}` só será sentido quando as chaves $PK$ e $FK$ forem equivalentes, ou seja, $id = id\_curso$, usando a palavra reservada `ON{:sql}` (_será explicado mais a frente_).
+
+
+
+
+A operção de junção tem algumas variantes, e cada uma dessas variações consiste em um _tipo de junção_ e uma _condição de junção_.
+
+**Sintaxe**
+
+```sql
+SELECT coluna1, coluna2, ...
+FROM tabela1 JOIN tabela2
+ON ;
+```
+
+_Exemplo_
+```sql
+SELECT nome, nasc, experiencia
+FROM tecnicos INNER JOIN experiencia
+ON tecnicos.num_tec = experiencia.num_tecnico;
+```
+
+**TIPO DE JUNÇÃO** (`INNER{:sql}` ou `OUTER{:sql}`)
+Define como as tuplas em cada relação que não possuam nenhuma conrrespondência com as tuplas da outra relação deve ser tratadas.
+
+**CONDIÇAO DE JUNÇAO** (`ON{:sql}`)
+Definem quais tuplas das duas relações apresentam correspondência e quais atributos são apresentados de uma junção.
+
+### `INNER JOIN`
+
+O `INNER JOIN{:sql}` (Ou somente `JOIN{:sql}`) é uma **junção interna**, que junta os registros de uma tabela que tiver um **correspondente** na outra tabela, através da chave primária e estrangeira.
+
+Por exemplo, a tabela abaixo é resultado de um `JOIN{:sql}` de 2 outras tabelas. A segunda tabela possui chaves estrangeiras apontando para valores nulos, e a primeira possui tuplas sem conrrespondência na segunda tabela. O resultado do `INNER JOIN{:sql}` será apenas as linhas que possuem corrêspondência nas duas tabelas:
+
+
+
+
+**Sintaxe**
+```sql
+SELECT coluna1, coluna2, ...
+FROM (tabela1 INNER JOIN tabela2
+ ON tabela1.chave_primaria = tabela2.chave_estrangeira);
+```
+
+
+A palavra `INNER{:sql}` pode ser omitida
+
+```sql
+SELECT coluna1, coluna2, ...
+FROM (tabela1 JOIN tabela2
+ ON tabela1.chave_primaria = tabela2.chave_estrangeira);
+```
+
+
+#### Usando o `INNER JOIN` com 2 tabelas
+
+**Exemplo**: Liste o nome dos técnicos que possuem experiência em Lavadora
+
+_Tabelas_
+
+
+
+
+_Query_
+```sql
+SELECT nome
+FROM (tecnicos INNER JOIN experiencia
+ ON tecnicos.num_tec = experiencia.num_tecnico)
+WHERE experiencia.tipo = 'Lavadora';
+```
+
+_Resultado_
+
+
+
+
+#### Usando o `INNER JOIN` com 3 tabelas
+
+**Exemplo**: Liste o nome dos técnicos e sua experiência em aparelhos da categoria 1
+
+_Tabelas_
+
+
+
+_Query_
+```sql
+SELECT nome, anos_exp
+FROM ((tecnicos INNER JOIN experiencia
+ ON num_tec = num_tecnico) INNER JOIN Tipos
+ ON tipo = tipo)
+WHERE categoria = 1;
+```
+
+_Resultado_
+
+
+
+
+### `NATURAL JOIN`
+
+Com ele você não precisa identificar quais colunas serão comparadas, pois ele fará a comparação entre **campos com o mesmo nome**.
+
+**Sintaxe**
+
+```sql
+SELECT coluna1, coluna2...
+FROM tabela1 NATURAL JOIN tabela2;
+```
+
+_Exemplo_
+
+```sql
+SELECT * FROM (tecnicos NATURAL JOIN experiencia);
+```
+
+Repare que não precisamos passar a condição de junção com `ON{:sql}`, já que ambas as tabelas possuem a coluna `tipo`.
+
+
+
+
+
+O mesmo não da pra ser feito entre as tabelas `tecnicos` e `tipos`, pois **não possuem** colunas com o mesmo nome.
+
+
+
+
+### `OUTER JOIN`
+
+O `OUTER JOIN{:sql}` é a variação de junção **externa**, e é composto por 3 tipos:
+- `LEFT OUTER JOIN{:sql}`
+- `RIGHT OUTER JOIN{:sql}`
+- `FULL OUTER JOIN{:sql}`
+
+
+A palavra `OUTER{:sql}` pode ser omitida em todos os 3 tipos
+
+
+Diferente das junções **internas**, como o `INNER JOIN{:sql}`, as junções **externas** podem retornar valores mesmo quando não há conrrespondência entre as tabelas (valores `NULL{:sql}`).
+
+#### `LEFT OUTER JOIN`
+
+No `LEFT OUTER JOIN{:sql}` (ou simplesmente `LEFT JOIN{:sql}`), a prioridade é da tabela da **esquerda**, isto é, todos os registros da primeira tabela serão mostrados independente se houver correspondente nas outra tabela, após a equivalência das chaves usando o `ON{:sql}`.
+
+
+
+
+**Sintaxe**
+
+```sql
+SELECT coluna1, coluna2...
+FROM tabela1 LEFT OUTER JOIN tabela2;
+```
+
+_Exemplo_
-_Pág. 11_
+```sql
+SELECT * FROM (tecnicos LEFT OUTER JOIN experiencia);
+```
+
+#### `RIGHT OUTER JOIN`
+
+No `RIGHT OUTER JOIN{:sql}` (ou simplesmente `RIGHT JOIN{:sql}`), a prioridade é da tabela da **direita**, isto é, todos os registros da segunda tabela serão mostrados independente se houver correspondente na outra tabela.
+
+Pega todos os atributos da relação que está à direita, verifica se existe algum correspondente à esquerda, caso afirmativo, retorna os atributos da esquerda, e caso negativo, coloca o valor nulo nos atributos.
+
+
+
+
+**Sintaxe**
+
+```sql
+SELECT coluna1, coluna2...
+FROM tabela1 RIGHT OUTER JOIN tabela2;
+```
+
+_Exemplo_
+
+```sql
+SELECT * FROM (tecnicos RIGHT OUTER JOIN experiencia);
+```
+
+#### `FULL OUTER JOIN`
-*/}
+Faz o `RIGHT{:sql}` e o `LEFT{:sql}` ao mesmo tempo, ou seja, vai retornar dados que não tem em comum nas duas tabelas, e não só na tabela da direita ou da esquerda.
+
+
+
+
+**Sintaxe**
+
+```sql
+SELECT coluna1, coluna2...
+FROM tabela1 FULL OUTER JOIN tabela2;
+```
+
+_Exemplo_
+
+```sql
+SELECT * FROM (tecnicos FULL OUTER JOIN experiencia);
+```
+
+---
+
+
+**Artigo em construção...**
+