Junções Flashcards

(76 cards)

1
Q

O que são junções em SQL?

A

São comandos que combinam dados de duas ou mais tabelas com base em uma condição relacionada entre elas (normalmente chaves).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Qual comando básico é usado para fazer junção entre tabelas?

A

JOIN (INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN, etc.)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

O que faz um INNER JOIN?

A

Retorna apenas os registros que possuem correspondência nas duas tabelas.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Exemplo de INNER JOIN entre clientes e vendas pela coluna cliente_id.

A

SELECT c.nome, v.data_venda
FROM clientes c
INNER JOIN vendas v
ON c.cliente_id = v.cliente_id;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

O que faz um LEFT JOIN?

A

Retorna todos os registros da tabela da esquerda e os correspondentes da direita. Se não houver correspondência, retorna NULL.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Exemplo de LEFT JOIN para listar todos os clientes, mesmo sem vendas.

A

SELECT c.nome, v.data_venda
FROM clientes c
LEFT JOIN vendas v
ON c.cliente_id = v.cliente_id;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

O que faz um RIGHT JOIN?

A

Retorna todos os registros da tabela da direita, com os correspondentes da esquerda. Se não houver, retorna NULL.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Exemplo de RIGHT JOIN entre vendas e clientes.

A

SELECT c.nome, v.data_venda
FROM vendas v
RIGHT JOIN clientes c
ON c.cliente_id = v.cliente_id;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

O que faz um FULL JOIN?

A

Retorna todos os registros das duas tabelas, com NULL onde não houver correspondência.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Exemplo de FULL JOIN.

A

SELECT c.nome, v.data_venda
FROM clientes c
FULL JOIN vendas v
ON c.cliente_id = v.cliente_id;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

CROSS JOIN

A

Retorna o produto cartesiano entre as duas tabelas — ou seja, todas as combinações possíveis.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Exemplo de CROSS JOIN.

A

SELECT a.nome, b.produto
FROM atendentes a
CROSS JOIN produtos b;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Qual a função da cláusula ON em joins?

A

Especifica a condição de junção entre as tabelas (ex: ON a.id = b.id).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

É possível usar WHERE com joins?

A

Sim, para filtrar os dados após a junção. Exemplo:

… INNER JOIN … ON …
WHERE c.estado = ‘SP’;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

A ordem das tabelas afeta o resultado em um INNER JOIN?

A

Não, desde que a condição ON esteja correta, o INNER JOIN é comutativo, ou seja, a ordem das tabelas não altera o resultado final.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

A ordem das tabelas afeta o resultado em um LEFT JOIN?

A

Sim. A tabela à esquerda do LEFT JOIN é a tabela base, e a da direita é a que pode retornar NULL se não houver correspondência.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

No LEFT JOIN, qual tabela deve vir primeiro?

A

A tabela principal, cujos dados devem sempre aparecer (mesmo sem correspondência), deve vir antes do LEFT JOIN.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Exemplo em que a ordem do LEFT JOIN altera o resultado:

A

– Lista todos os clientes, mesmo sem vendas
SELECT c.nome, v.valor
FROM clientes c
LEFT JOIN vendas v ON c.id = v.cliente_id;

– Invertendo a ordem: lista apenas vendas com ou sem cliente (pouco usual)
SELECT c.nome, v.valor
FROM vendas v
LEFT JOIN clientes c ON c.id = v.cliente_id;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Em qual tipo de join a ordem das tabelas não importa?

A

No INNER JOIN e CROSS JOIN a ordem não afeta o resultado final (desde que os campos na cláusula ON estejam corretos).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

A ordem afeta RIGHT JOIN?

A

Sim. A tabela à direita é a que sempre aparece. Se quiser inverter, troque por LEFT JOIN e altere a posição das tabelas.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

Como inverter um RIGHT JOIN?

A

Transforme-o em um LEFT JOIN, trocando a ordem das tabelas. Exemplo:

– RIGHT JOIN
SELECT * FROM vendas v RIGHT JOIN clientes c ON v.cliente_id = c.id;

– Equivalente com LEFT JOIN
SELECT * FROM clientes c LEFT JOIN vendas v ON v.cliente_id = c.id;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

Por que usar alias em junções?

A

Para evitar repetição de nomes longos e deixar o código mais limpo:

SELECT c.nome, v.data
FROM clientes c
JOIN vendas v ON c.id = v.cliente_id;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

Por que usar alias em junções (joins)?

A

Para deixar o código mais limpo, evitar repetição de nomes de tabelas longos e facilitar a leitura da consulta.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

Como referenciar uma coluna com alias da tabela?

A

Usamos alias.coluna, exemplo: c.nome, v.data_venda.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
Exemplo com LEFT JOIN e alias
SELECT p.nome, c.nome FROM produtos p LEFT JOIN categorias c ON p.cat_id = c.id;
26
Posso usar alias mesmo sem junção?
Sim. Alias são úteis em qualquer consulta, inclusive com uma única tabela.
27
O que acontece se não usar alias em junções complexas?
O código pode ficar muito repetitivo, confuso e mais propenso a erros.
28
Por que combinar GROUP BY com JOIN?
Para relacionar dados entre tabelas e, em seguida, resumir ou agrupar informações com base em colunas específicas de uma ou mais tabelas.
29
Exemplo de JOIN com GROUP BY
SELECT c.nome, COUNT(v.id) AS total_vendas FROM clientes c JOIN vendas v ON c.id = v.cliente_id GROUP BY c.nome;
30
Consulta com JOIN, GROUP BY e HAVING
SELECT p.nome, COUNT(v.id) AS total FROM produtos p JOIN vendas v ON p.id = v.produto_id GROUP BY p.nome HAVING COUNT(v.id) > 10;
31
Inclua agora o INNER JOIN com a tabela de produtos
32
Sintaxe básica do INNER JOIN
SELECT * FROM tabela1 INNER JOIN tabela2 ON tabela1.coluna = tabela2.coluna;
33
Quando usar INNER JOIN?
Quando você deseja somente os dados que têm correspondência nas duas tabelas relacionadas.
34
Qual a diferença entre INNER JOIN e LEFT JOIN?
INNER JOIN: traz apenas os registros com correspondência nas duas tabelas. LEFT JOIN: traz todos os registros da tabela da esquerda, com ou sem correspondência na direita.
35
Qual a diferença entre JOIN e INNER JOIN?
Nenhuma. A palavra JOIN sozinha é interpretada como INNER JOIN.
36
INNER JOIN pode causar perda de dados?
Sim. Se não houver correspondência nas duas tabelas, os registros são ignorados no resultado.
37
O que é um LEFT JOIN em SQL?
É uma junção que retorna todos os registros da tabela da esquerda e os dados correspondentes da tabela da direita, se houver. Se não houver correspondência, os campos da tabela da direita virão como NULL.
38
Sintaxe básica do LEFT JOIN
SELECT * FROM tabela_esquerda LEFT JOIN tabela_direita ON tabela_esquerda.coluna = tabela_direita.coluna;
39
Quando usar LEFT JOIN?
Quando você deseja manter todos os registros da tabela da esquerda, mesmo que não haja correspondência na tabela da direita.
40
Como o LEFT JOIN trata dados sem correspondência?
Retorna os dados da tabela da esquerda e preenche os campos da tabela da direita com NULL.
41
LEFT JOIN pode causar duplicidade de linhas?
Sim, se houver várias correspondências na tabela da direita para uma única linha da esquerda, cada correspondência gerará uma nova linha.
42
O que é um RIGHT JOIN em SQL?
É uma junção que retorna todos os registros da tabela da direita e os dados correspondentes da tabela da esquerda, se houver. Se não houver correspondência, os campos da tabela da esquerda virão como NULL.
43
Sintaxe básica do RIGHT JOIN
SELECT * FROM tabela_esquerda RIGHT JOIN tabela_direita ON tabela_esquerda.coluna = tabela_direita.coluna;
44
Quando usar RIGHT JOIN?
Quando você deseja manter todos os registros da tabela da direita, mesmo que não haja correspondência na tabela da esquerda.
45
RIGHT JOIN vs LEFT JOIN
LEFT JOIN: garante todas as linhas da tabela da esquerda. RIGHT JOIN: garante todas as linhas da tabela da direita.
46
RIGHT JOIN com dados faltando
Se não houver correspondência na tabela da esquerda, os campos dela virão como NULL no resultado.
47
RIGHT JOIN pode ser reescrito com LEFT JOIN?
Sim. Basta inverter a ordem das tabelas e usar LEFT JOIN:
48
RIGHT JOIN pode causar duplicidade?
Sim. Se houver várias correspondências na tabela da esquerda para uma linha da direita, cada uma gera uma nova linha.
49
O que é um FULL JOIN em SQL?
É uma junção que retorna todos os registros de ambas as tabelas. Onde houver correspondência, os dados são combinados. Onde não houver, os campos da outra tabela serão NULL.
50
Qual a sintaxe básica de um FULL JOIN?
SELECT * FROM tabela_a FULL JOIN tabela_b ON tabela_a.coluna = tabela_b.coluna;
51
Quando usar um FULL JOIN?
Quando você precisa obter todos os registros de ambas as tabelas, mesmo sem correspondência entre elas.
52
Como identificar registros sem correspondência com FULL JOIN?
Use WHERE com IS NULL: SELECT f.nome_funcionario, d.nome_departamento FROM funcionarios f FULL JOIN departamentos d ON f.dep_id = d.id WHERE f.nome_funcionario IS NULL OR d.nome_departamento IS NULL Isso retorna somente os registros que não têm correspondência em uma das tabelas.
53
Diferença entre FULL JOIN, LEFT JOIN e RIGHT JOIN
LEFT JOIN: todos da tabela da esquerda. RIGHT JOIN: todos da direita. FULL JOIN: todos de ambas as tabelas, com ou sem correspondência.
54
FULL JOIN pode gerar linhas com NULL de ambos os lados?
Sim, se houver valores que não existem em nenhuma das colunas comparadas, os respectivos campos da outra tabela virão como NULL.
55
Qual o outro nome do FULL JOIN?
FULL OUTER JOIN — a palavra OUTER é opcional e raramente usada.
56
É possível simular FULL JOIN com UNION?
Sim. SELECT * FROM A LEFT JOIN B ON A.id = B.id UNION SELECT * FROM A RIGHT JOIN B ON A.id = B.id;
57
O que é um CROSS JOIN em SQL?
É uma junção que retorna o produto cartesiano de duas tabelas — cada linha da primeira tabela é combinada com todas as linhas da segunda tabela.
58
Qual a principal característica do CROSS JOIN?
Não exige condição de junção (ON). Ele retorna todas as combinações possíveis entre as duas tabelas.
59
Qual a sintaxe de um CROSS JOIN?
SELECT * FROM tabela_a CROSS JOIN tabela_b;
60
Quantas linhas o CROSS JOIN retorna?
Retorna A × B linhas, onde A é o número de registros da primeira tabela e B da segunda.
61
Quando usar CROSS JOIN?
Quando se quer todas as combinações possíveis entre os dados de duas tabelas. Ex: gerar combinações de produtos e cores.
62
Diferença entre INNER JOIN e CROSS JOIN
INNER JOIN: junta registros com base em uma condição (ON). CROSS JOIN: não usa condição e retorna todas as combinações possíveis.
63
Como evitar resultados indesejados com CROSS JOIN?
Adicione um WHERE após o CROSS JOIN para filtrar as combinações relevantes.
64
CROSS JOIN pode causar problemas de performance?
Sim. Em tabelas grandes, o número de combinações pode ser enorme e impactar o desempenho.
65
CROSS JOIN e vírgula entre tabelas no FROM fazem o mesmo?
Sim. SELECT * FROM tabela1, tabela2; SELECT * FROM tabela1 CROSS JOIN tabela2;
66
Qual seria a consulta para listar apenas a cidade que não teve nenhum candidato votado?
SELECT CI.CIDADE FROM CANDIDATO CA RIGHT JOIN CIDADE CI ON CA.CIDADE = CI.CIDADE WHERE CA.CIDADE IS NULL;
67
Como podemos identificar clientes que nunca compraram utilizando LEFT JOIN?
Utilizamos LEFT JOIN entre a tabela de clientes e a tabela de notas fiscais, e aplicamos um filtro WHERE NF.CPF IS NULL para retornar apenas os clientes sem correspondência na tabela de notas fiscais.
68
Como podemos identificar quais clientes não têm vendedores em seus bairros usando SQL?
Podemos usar um LEFT JOIN entre a tabela de clientes e a tabela de vendedores, verificando os campos de vendedor que retornam como nulos.
69
Sabendo que queremos ver todos os registros de TAB2 e todos de TAB1, o que deve estar no lugar de XXXXX? SELECT * FROM TAB1 XXXXX TAB2 ON TAB1.COD = TAB2.COD
FULL JOIN
70
Qual a função do INNER JOIN na query utilizada?
Combinar as tabelas NOTAS_FISCAIS e ITENS_NOTAS_FISCAIS com base no campo "NÚMERO" e, posteriormente, combinar o resultado com a tabela TABELA_DE_CLIENTES com base no campo "CPF".
71
Explique o que faz a subquery dentro do INNER JOIN com a tabela TABELA_DE_CLIENTES.
A subquery calcula a quantidade total de vendas para cada cliente em cada mês, permitindo comparar esse valor com o limite de compra mensal do cliente.
72
Qual é o objetivo de usar um UPDATE com INNER JOIN?
Sincronizar ou atualizar dados em uma tabela (tabela-destino) com base em informações de outra tabela (tabela-fonte).
73
Qual é a principal limitação ao tentar usar INNER JOIN diretamente em um comando UPDATE no Oracle?
O Oracle não suporta o uso direto de INNER JOIN na sintaxe do comando UPDATE.
74
Qual tipo de JOIN é usado para identificar registros que existem em uma tabela, mas não em outra?
LEFT JOIN
75
Por que um LEFT JOIN é usado na subquery em vez de um INNER JOIN?
Porque o LEFT JOIN garante que todos os registros da tabela PRODUTOS sejam considerados. Assim, podemos identificar aqueles que não têm correspondência na tabela TABELA_DE_PRODUTOS_FONTE (ou seja, aqueles para os quais TPF.CODIGO_DO_PRODUTO IS NULL).
76
Faça um delete da tabela de FUNCIONARIOS que tenha apenas os registros cadastrados na tabela RH DEMITIDOS
DELETE FROM TAB_FUNCIONARIO TF WHERE TF.COD_FUNCIONARIO IN ( SELECT TF.COD_FUNCIONARIO FROM TAB_FUNCIONARIO TF INNER JOIN TAB_RH_DEMITIDOS TRD ON TF.COD_FUNCIONARIO = TRD.COD_FUNCIONARIO);