Sem descrição.
16/10/2023
Publico
Junções correspondem à operação de produto cartesiano,
A = {1,2,3}
B = {2,4,6}
C = {(1,2),(1,4),(1,6),
(2,2),(2,4),(2,6),
(3,2),(3,4),(3,6)}
Total de tuplas = n° de elementos em um conjunto * n° de elementos em um conjunto
Employees:
Name | Surname | Salary |
---|---|---|
Steven | King | 40000 |
Neena | Louise | 32000 |
Departments:
Title | Acronym |
---|---|
IT Programming | ITPROG |
Marketing | MARKT |
Resultado de Employees X Departments
{
(Steven, King, 40000, IT Programming, ITPROG),
(Steven, King, 40000, Marketing, MARKT),
(Neena, Louise, 40000, IT Programming, ITPROG),
(Neena, Louise, 40000, Marketing, MARKT),
}
CROSS JOIN
T1 X T2SELECT *
FROM countries, regions;
É o mesmo que
SELECT *
FROM countries
CROSS JOIN regions;
Filtrando o resultado
SELECT
country_name,
region_name,
r.region_id
FROM regions as r
CROSS JOIN countries as c
WHERE r.region_id = c.region_id
ORDER BY country_name ASC;
INNER JOIN
T1 |X| T2É uma forma de remover a clausula de seleção WHERE
.
Os valores devem ter correspondentes em abas as tabelas.
SELECT
country_name,
region_name,
r.region_id
FROM regions as r
INNER JOIN countries as c
ON r.region_id = c.region_id
ORDER BY country_name ASC;
NATURAL JOIN
Junta as tabelas que possuem um atributo com mesmo nome.
Essa query pode ser problemática quando ha colunas com o mesmo nome em diferentes tabelas.
SELECT
country_name,
region_name,
r.region_id
FROM regions as r
NATURAL JOIN countries as c
ORDER BY country_name ASC;
LEFT JOIN
Mostra os dados independentes de ter valor correspondente.
Faz uma junção a esquerda.
SELECT country_name, region_name
FROM countries as c
LEFT JOIN regions as r on c.region_id = r.region_id
ORDER BY region_name ASC;
Essa consulta vai mostrar um país chamado
Nova Zelândia
mesmo que ela não tenha umregion_id
atribuído a ela.
RIGHT JOIN
Mostra os dados independentes de ter valor correspondente.
Faz uma junção a direita.
SELECT country_name, region_name
FROM countries as c
RIGHT JOIN regions as r on c.region_id = r.region_id
ORDER BY region_name ASC;
Essa consulta vai mostrar uma região chamada
oceania
sem um país atribuído.
FULL JOIN
Mostra os dados independentes de ter valor correspondente.
Faz uma junção em ambos os lados.
SELECT country_name, region_name
FROM countries as c
FULL JOIN regions as r on c.region_id = r.region_id
ORDER BY region_name ASC;
Essa consulta vai mostrar uma região chamada
oceania
sem um país atribuído. E um país chamadoNova Zelândia
semregion_id
.
SELECT
p.id,
p.title as title,
count(DISTINCT l.id) as likes,
p.views as views,
u.name as author_name,
u.username as author_username,
u.avatar as author_avatar
FROM (select 1) as dummy, posts p
LEFT JOIN users l ON l.liked_posts LIKE '%' || p.id || '%'
LEFT JOIN users u ON u.id = p.user
GROUP BY p.id, p.title, u.name