Structured Query Language (SQL) é a linguagem padrão universal para manipular bancos de dados (BD) nos quais as tabelas se relacionam por meio de um SGBDR (Sistema de Gerenciamento de Banco de Dados Relacionais). As consultas aos bancos de dados geram relatórios que serão posteriormente utilizados para análise e a tomada de decisão. O SGBD é muito em prontuário eletrônico da pessoa (PEP), por exemplo.

No SGBDR, os dados estão em várias tabelas e para obter uma informação abrangente e significativa sobre uma situação pode ser necessário consultar dados distribuídos por diversas tabelas usando junções (JOINs).

–INNER JOIN

https://www.w3schools.com/sql/sql_join_inner.asp

Situação clínica: consulta ao banco de dados sobre pacientes e suas alergias e medicamentos.

SELECT a.LAST nome, b.code alergia, c.code medicamento
FROM patients AS a
INNER JOIN allergies b –retorna a intersecção com “patients”
ON a.id=b.PATIENT
INNER JOIN medications c — retorna a intersecção “patients”
ON b.PATIENT=c.PATIENT LIMIT 3;

Brown303009160031049630
Brown303009130061049630
Brown30300916003310325
NOME/CÓDIGO ALERGIA/CÓDIGO MEDICAMENTO

–LEFT JOIN

NOME/CÓDIGO ALERGIA/CÓDIGO MEDICAMENTO

SELECT a.LAST nome, b.code alergia, c.code medicamento
FROM patients AS a
LEFT JOIN allergies b
ON a.id=b.PATIENT
LEFT JOIN medications c
ON b.PATIENT=c.PATIENT LIMIT 3;

Brown30300913006313782
Brown30300913006831533
Brown30300913006849574
NOME/CÓDIGO ALERGIA/CÓDIGO MEDICAMENTO

Neste caso, a tabela de retorno (19768) não inclui os(as) pacientes que têm NULL nos campos código alergia e código medicamento (1030)

LEFT JOIN retorna todos os registros da tabela esquerda (tabela a) e os registros correspondentes da tabela direita (tabela b e/ou c). O resultado é 0 registros do lado direito (b ou c) , se não houver correspondência.

–RIGHT JOIN

SELECT a.LAST nome, b.code alergia, c.code medicamento
FROM patients AS a
RIGHT JOIN allergies b
ON a.id=b.PATIENT
RIGHT JOIN medications c
ON b.PATIENT=c.PATIENT LIMIT 3;

389221
389221
748856
NOME/CÓDIGO ALERGIA/CÓDIGO MEDICAMENTO

Neste caso, a tabela de retorno não inclui os(as) pacientes (LAST NAME) fora da intersecção com código alergia e/ou código medicamento.

RIGHT JOIN retorna todos os registros da tabela direita (tabela b e/ou c) e os registros correspondentes da tabela esquerda (tabela a). O resultado é 0 registros do lado esquerdo (a), se não houver correspondência.

–FULL JOIN

SELECT a.LAST nome, b.code alergia, c.code medicamento
FROM patients AS a
FULL JOIN allergies b
ON a.id=b.PATIENT
FULL JOIN medications c
ON b.PATIENT=c.PATIENT;

OK! Mas, uma linguagem tem dialetos. Como eu estou usando MySQL, neste dialeto não se usa o FULL JOIN e sim o UNION para duas consultas usando right join e left join. Isso fica assim:

SELECT a.LAST nome, b.code alergia, c.code medicamento
FROM patients AS a
LEFT JOIN allergies b
ON a.id=b.PATIENT
LEFT JOIN medications c
ON b.PATIENT=c.PATIENT
UNION — é usado para combinar o conjunto de resultados de duas ou mais instruções SELECT.
SELECT a.LAST nome, b.code alergia, c.code medicamento
FROM patients AS a
RIGHT JOIN allergies b
ON a.id=b.PATIENT
RIGHT JOIN medications c
ON b.PATIENT=c.PATIENT;

 nomealergiamedicamento
 Brown30300913006313782
 Brown30300913006831533
 Brown30300913006849574

UNION retorna todos os registros (únicos ou distintos) quando há uma correspondência nos registros da tabela esquerda (tabela a) ou direita (tabela b ou tabela c). UNION ALL retorna registros repetidos.

Quadro Sinótico:

Mais Joins do que estudamos!!!

Como citar:

Cruz, Isabel SQL: meu estudo sobre JOINS. NEPAE/UFF. Niterói, 23/06/2022. Disponível em https://nepae.uff.br/?p=2455

Translate »
Skip to content