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}` +Exemplo de junção de tabelas +Exemplo de junção de tabelas + +Resultado do exemplo de junção de tabelas +Resultado do exemplo de junção de tabelas + + +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_). + +Resultado correto do exemplo de junção de tabelas +Resultado correto do exemplo de junção de tabelas + +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: + +Exemplo de resultado do INNER JOIN +Exemplo de resultado do INNER JOIN + +**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_ + +Tabelas TÉCNICO e EXPERIÊNCIA +Tabelas TÉCNICO e EXPERIÊNCIA + +_Query_ +```sql +SELECT nome +FROM (tecnicos INNER JOIN experiencia + ON tecnicos.num_tec = experiencia.num_tecnico) +WHERE experiencia.tipo = 'Lavadora'; +``` + +_Resultado_ +Nomes dos funcionários com experiência em Lavadora +Nomes dos funcionários com experiência em Lavadora + + +#### Usando o `INNER JOIN` com 3 tabelas + +**Exemplo**: Liste o nome dos técnicos e sua experiência em aparelhos da categoria 1 + +_Tabelas_ +Tabelas TÉCNICO, EXPERIÊNCIA e TIPOS +Tabelas TÉCNICO, EXPERIÊNCIA e TIPOS + +_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_ +Nome e experiência dos técnicos com experiência em aparelhos do tipo 1 +Nome e experiência dos técnicos com experiência em aparelhos do tipo 1 + + +### `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`. + + +Destaque das colunas com o mesmo nome +Destaque das colunas com o mesmo nome + +O mesmo não da pra ser feito entre as tabelas `tecnicos` e `tipos`, pois **não possuem** colunas com o mesmo nome. + +Destaque das colunas com nomes diferentes +Destaque das colunas com nomes diferentes + +### `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}`. + +Exemplo de resultado do LEFT OUTER JOIN +Exemplo de resultado do LEFT OUTER JOIN + +**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. + +Exemplo de resultado do RIGHT OUTER JOIN +Exemplo de resultado do RIGHT OUTER JOIN + +**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. + +Exemplo de resultado do FULL OUTER JOIN +Exemplo de resultado do FULL OUTER JOIN + +**Sintaxe** + +```sql +SELECT coluna1, coluna2... +FROM tabela1 FULL OUTER JOIN tabela2; +``` + +_Exemplo_ + +```sql +SELECT * FROM (tecnicos FULL OUTER JOIN experiencia); +``` + +--- + + +**Artigo em construção...** +