안녕하세요! LEFT JOIN 리트코드 문제풀이 질문있습니다.!
281
작성자 없음
작성한 질문수 0
안녕하세요 리트코드 문제를 풀면서 처음에 LEFT조인을 무의식적으로 서브쿼리로 다중 행을 이용해 문제를 풀었습니다.
근데 푸는 와중에 런타임속도에 있어서 갑자기 궁금증이 생겨 질문을 남기게 됐습니다.
제가 (단순하게)생각했을 때는 서브쿼리를 쓰게되면 메인쿼리와 함께 조회를 두 번 도는거라 더 느릴 것 같은데 LEFT조인만 썼을때보다 속도가 빠르게 나와서 두 쿼리의 차이가 있는건지? 아니면 리트코드 컴파일상 그런건지? 왜 이런 결과가 나왔는지 궁금합니다!!!
문득 시험 뿐만 아니라, 실제 현업에 갔을때도 성능을 고려하여 코딩을 하는데 목적을 두고 공부를 하다보니. 갑자기 생각나서 질문 드립니다.
아 저는 MySql이 아닌 Oracle로 공부하고 있습니다.
기존 풀이 LEFT JOIN
SELECT c.name "Customers"
FROM Customers c, Orders o
WHERE c.id = o.customerId(+)
AND o.customerId IS NULL;
서브쿼리를 통한 INNER JOIN
SELECT name "Customers"
FROM Customers
WHERE id NOT IN
(SELECT c.id
FROM Customers c, Orders o
WHERE c.id = o.customerId);
두 개의 결과

답변 1
0
일반적으로 INNER JOIN이 LEFT JOIN보다 빠른 연산입니다.
그리고 1번은 LEFT JOIN이 아니라 CROSS JOIN을 쓴 쿼리이고, CROSS JOIN은 LEFT JOIN보다 더 느립니다.
CROSS JOIN을 하면 한 쪽 테이블의 모든 행 하나하나에 다른 쪽 테이블의 모든 행이 전부 붙습니다.
만약 A 테이블이 2개의 row, B 테이블이 10개의 row를 가지고 있다면 CROSS JOIN을 통해 만들어진 테이블은 총 20행이 됩니다.
이런 식으로 작동하기 때문에 연산이 오래 걸릴 수 밖에 없습니다.
리트코드 1280. Students and Examinations
0
94
3
16강 LEFT JOIN 리트코드 (183. Customers Who Never Order) 관련 질문
0
103
2
African Cities 문제관련 질문
0
65
1
SQL 코딩테스트 질문
0
237
1
HACKER RANK에서 문제찾기
0
109
2
강의 자료 다운로드
0
101
2
Asian population 문제가 없어요
0
88
2
INNER JOIN 에서 A.키 쓸때 빨간 색 나오고 'dause'
0
77
2
별칭 관련해서 질문 있습니다.
0
88
2
rising temperature 문제 질문
0
108
2
해커랭크 TOP EARNERS 문제 질문
0
110
1
ON 뒤에 질문
0
106
2
INNER JOIN 질문. 강의와 결과값이 다릅니다.
0
211
3
END, 뒤에 * 붙이면 에러가 뜹니다
1
213
2
CustomerID가 중복되서 나타나요
0
242
3
별칭이 전체 테이블을 못 불러와요.
0
152
2
CASE WHEN 쿼리 오류 문의
1
342
3
CASE문제풀이 질문
0
133
1
Customers Who Never Order 풀다가 Alias관련 질문사항
0
141
1
Average Population 질문
0
143
1
Revising Aggregations - The Count Function 질문
0
110
1
Average Population of Each Continent 에대해서 질문
0
199
3
w3schools 에서 쿼리 작성 질문
0
166
1
INNER JOIN 할 때 NULL 값이 안보일 수도 있나요?
0
332
1





