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
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;
Brown30 | 300916003 | 1049630 |
Brown30 | 300913006 | 1049630 |
Brown30 | 300916003 | 310325 |
–LEFT JOIN
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;
Brown30 | 300913006 | 313782 |
Brown30 | 300913006 | 831533 |
Brown30 | 300913006 | 849574 |
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 |
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;
nome | alergia | medicamento | |
---|---|---|---|
Brown30 | 300913006 | 313782 | |
Brown30 | 300913006 | 831533 | |
Brown30 | 300913006 | 849574 |
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:
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