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 JOINJunta 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 JOINMostra 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ândiamesmo que ela não tenha umregion_idatribuído a ela.
RIGHT JOINMostra 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
oceaniasem um país atribuído.
FULL JOINMostra 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
oceaniasem um país atribuído. E um país chamadoNova Zelândiasemregion_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