본문 바로가기
프로그래밍/데이터베이스

[SQL 기초 - 8장] 오라클 SQL JOIN 연습!! (feat. xERD)

by 잡학다방 2024. 12. 11.
반응형

안녕하세요. 용선생입니다!

오블완 챌린지에서 받은 이모티콘 한 번 사용해봤습니닿ㅎㅎ

나름 나쁘지 않네요(?)

 

자 그럼 오늘은 JOIN 함수가 많이 쓰이기도 하고 어렵기도 해서

다른내용을 다루기보단 JOIN 함수를 연습해보려고 합니다.

바로 시작할게요~

 

아 시작하기에 앞서 지난시간 내용이 진짜 중요하니깐~!

복습 하실 분들은 아래 버튼을 눌러 복습하고 오시길 바랍니다!


JOIN 연습

 

제가 가지고 있는 xERD 데이터와 문제의 결과입니다.

위와 같은 결과를 얻기 위해서는 쿼리를 어떻게 작성해야 할까요?

먼저 xERD 데이터를 보고 어떤 컬럼으로 연결해야 할지 체크해줍니다.

prod_lgu 와 lprod_gu 가 서로 연결되어 있네요.

그리고 결과에 나타내야 하는 컬럼들을 체크합니다.

이를 쿼리로 작성하면

위와 같이 작성 할 수 있겠습니다!

총 74건이 나오네요!​

 

ANSI SQL 로 작성해보면 이렇게 되겠네요.

이 문제에서는 연결 컬럼명이 다르기 때문에

NATURAL JOIN 과 JOIN with USING 은 사용이 불가 하다는점 확인해 줍시다.

 


다음은 위의 세개 테이블을 연결하는 문제입니다.

MEMBER 의 mem_id 와 CART 의 cart_member 가 연결되어 있고,

CART 의 cart_prod 와 PROD 의 prod_id 가 연결되어 있습니다.

세개 테이블을 조인하여 위와 같은 결과를 얻으려면 어떻게 해야 할까요?

위와 같은 쿼리를 작성해주셨다면 정답입니다!

AND 연산자를 사용해서 조인을 두 번 해주시면 됩니다.

물론 ANSI SQL 로도 작성 가능합니다.

두개의 테이블을 연결하고 있는 CART 테이블을 중심으로 두 번 연결 해주시면 됩니다.

 

 


다음 문제들은 위의 xERD 데이터를 참고하시면 되겠습니다.

위와 같은 결과를 얻으려면 어떤 쿼리를 작성해야 할까요?

(단, 고객명이 brown, sally 인 사람만 조회)

CUSTOMER 의 cid 와 CYCLE 의 CID,

CYCLE 의 PID 와 PRODUCT 의 PID 를 연결해주면 되겠습니다.

첫 번째 문제와 같은 문제라고 보시면 됩니다.

대신 거기에 조건만 하나 더 붙이면 되겠네요.

AND, IN 연산자를 사용해서 간단하게 해결 할 수 있습니다.


CUSTOMER, CYCLE, PRODUCT 를 조인하여

애음 요일과 관계없이 고객'별' 애음 제품'별' 개수의 합과 제품명을

아래와 같이 조회하려면 어떻게 해야 할까요?

제가 문제에서 힌트를 드렸습니다.

'~별' 이라고 특별하게 표시를 해두었죠?

그렇다면 무엇을 이용해야 할까요?

맞습니다. GROUP BY를 이용해서 쿼리를 작성해주시면 되겠습니다.

이렇게 작성해주시면 되겠습니다.

여기서 잠깐, 그룹함수의 특징 두 번째 기억하시나요?

GROUP BY 절에 사용한 컬럼명 외에는 SELECT 절에 사용할 수 없다.

단, 상수나 컬럼에 영향을 미치지 않는 경우는 사용할 수 있다.

라고 했었죠?

위의 쿼리는 잘 보시면 한정자가 붙어있는 것도 있고, 없는 것도 있습니다.

두 가지 테이블에서 모두 다루고 있는 컬럼명은 모호하지 않게 한정자를 붙여줘야 합니다.

반면에 한 가지 테이블 에서만 다루는 컬럼명은 한정자를 붙이지 않아도 되는것이죠.

 


JOIN 함수 연습이 되셨나요?

오늘은 짧게 여기서 끝내려고 합니다 ㅎㅎ

(*********귀찮은거 아님*********)

 

오늘도 끝까지 봐주셔서 감사합니다.

다음 시간에 만나요~~

 
반응형