4주차-5~7강의
드디어 새로운 걸 또 배워봅니다 Join,,,
사실 쿼리 내가 사부작 거리면서 테이블이 다른 것끼리도
같이 묶어서 조회해보고 싶은데
뭘해도 안되는 것임???
근데 이젠 앞으로 join을 써주면 되겠군요^_^
여기까지가 Join 의 기본설명!
LEFT JOIN
기본구조
select 조회할 컬럼
from 테이블1 a left join 테이블2 b on a.컬럼명=b.컬럼명
테이블1의 데이터 + 테이블2 데이터 중에 테이블1과 중복되는 결과값이 도출.
INNER JOIN
기본주고
select 조회할 컬럼
from 테이블1 a inner join 테이블2 b on a.컬럼명=b.컬럼명
테이블1 과 테이블2 의 중복되는 결과값만 도출.
이렇게 해주면 food_orders 테이블의 값들 +
payments 테이블의 값이 같이 도출됨.
두 테이블의 공통값인 order_id 를 기준으로
두 테이블을 묶어줬기 때문.
그렇지만 결제테이블은 쭉 내려보다보면 값이 어느순간부터 없어진다(=NULL).
중복 값 외의 결과는 도출되지 않는다.
반면,
inner join 을 실행했을 경우에는,
payments 테이블에 NULL 값이 조회되지 않는 것을
확인할 수 있다.
중복된 결과값만이 도출됐기 때문임.
자, 그렇다면 실습!
주문 테이블과 고객 테이블을 customer_id 를 기준으로
left join 써서 묶어보기!!!
??? 무엇이 문제인가!
에러메시지 대체 무엇이 애매하다는 것인지,,,
는 컬럼을 지정해줄 때에는 해당 컬럼들을
어느 테이블에서 가져올 것인지 꼭 지정을 해줘야 한다.
(주문 테이블과 고객 테이블에 각각 f, c 라는 별명을 주었음.)
처음에 맞게 썼는데 에러가 뜨고 메시지를 읽었을 때
진짜 당황하였음ㅋㅋㅋ
그래서 강사님이 진행하시는 걸 보았더니
컬럼 앞에 테이블을 지정해주시더라(억울).
난 처음에 저걸 보고 또 복잡한 연산식을 처음에 떠올렸는데
그냥 간단하게 프롬문 밑에 웨어문으로 조건을 적어주면 되는거였다,,
기억해 중복 값을 없애준다 = 맨 앞에 distinct 붙여주기!!!!
실습~
나는 서브쿼리를 이용하여서 1번문제가 원하는 답을 도출하였고,
강사님은 서브쿼리 없이 JOIN문 안에서 f.price * p.vat vat2 값을
도출하셨다.
난 where절에서 한번 조건 c.age>=50을 설정해줬지만,
위에 select문에서 한번 더 조건 설정해줄 때 case when으로 동일설정을 한번 더 해줬다.
근데 강사님은 중복이라 생각하신건지 case when 조건을 설정하지 않고,
바로 (c.age-50)*0.005 discount_rate 라고 적으셨다.
어쨌거나 내가 했던 방식의 결과와, 강사님이 한 그대로
똑같이 해서 나온 결과값이 다르지는 않았는데...
사실 강사님이 낸 결과값이랑 내 결과값이랑
미묘하게 다르게 나와서 뭐가 잘못됐나? 싶었다.
그치만 아무리 뜯어봐도 강사님 쿼리랑
내가 그대로 보면서 타이핑한 쿼리랑 수식이 틀린게 전혀
없어서,,,
걍 뭔가 설정이 잘못됐나보다,, 하는 중..(그러나 찝찝)
+
대망의 4주차 완료!!!
SQL 퀘스트 들어가보자고!!!
'[내배캠] 사전캠프 (24.11.01 ~ 24.11.24) 🏃🏻♀️ > SQL 📙' 카테고리의 다른 글
[241113] 엑셀보다 쉽고 빠른 SQL 4주차-1~4 강의 (2) | 2024.11.13 |
---|---|
[241112] 엑셀보다 쉽고 빠른 SQL 3주차-4~7 강의 및 숙제 (4) | 2024.11.12 |
[241111] 엑셀보다 쉽고 빠른 SQL 3주차-1~3 강의 (1) | 2024.11.12 |
[241111] 엑셀보다 쉽고 빠른 SQL 2주차-5~6 강의 및 숙제 (1) | 2024.11.11 |
[241108] 엑셀보다 쉽고 빠른 SQL 2주차-1~4 강의 (2) | 2024.11.08 |