inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

김영한의 실전 데이터베이스 - 기본편

문제와 풀이2

문제와 풀이: 특정 상사의 부하 직원 찾기

115

ᄒᄉ

작성한 질문수 19

1

[질문 내용]

image.png

저는 FK에서 PK로 조인하고 id로 찾았는데,
PK에서 FK를 조인한 후 name으로 찾는 것과의 차이를 모르겠습니다.
자식 입장에서는 PK가 하나이기 때문에 한 행이고, 부모에서 FK를 볼 땐 여러 개일 수도 있으니 여러 행일 수 있다는 것은 이해했지만
이 경우에는 어떤 차이점이 있는지, 안좋은 방식인지, 틀린 건지 궁금합니다.

sql mysql dbms/rdbms SQLD

답변 2

1

y2gcoder

안녕하세요. ㅎㅅ님, 공식 서포터즈 y2gcoder입니다.

이 경우에는 상황에 따라 달라질 것 같습니다!

보여드린 문제에서는 아래의 결과 예시에서 최과장의 pk를 이미 알 수 있기 때문에 ㅎㅅ님의 답도 맞다고 생각합니다 🙂

다만 '최과장'이라는 이름에 대한 정보만 문제로 주어진다면 pk를 모르는 상태에서는 답안과 같이 쿼리를 짜지 않는다면 추가 쿼리나 서브 쿼리가 필요하게 됩니다('최과장'의 pk를 구하기 위한 쿼리!). 실무에서는 아래의 표가 주어지지 않은 상태(pk를 모르는 상태)에서 원하는 데이터를 구하는 것과 같은 케이스가 더 많은 것 같습니다!

 

감사합니다.

1

ᄒᄉ

아하 덕분에 이해됐습니다 감사합니다!!

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. ᄒᄉ님!

질문하신 내용을 보면 데이터베이스에서 자주 발생하는 “상하관계”에 따른 조인 방식과 그 결과 차이에 관해 고민하고 계신 것 같습니다. 간단한 SQL 쿼리를 통해 특정 상사의 부하 직원을 찾는 상황을 예로 들어 설명드리겠습니다.

문제와 SQL 쿼리 해석

SQL 쿼리를 보니, employees 테이블을 두 번 참조하여 자기 조인을 수행하고 있습니다. e.manager_id = m.employee_id 조건으로 메니저의 직원 ID를 통해 부하 직원을 찾는 것입니다.

  • e 테이블: 매니저가 되는 행을 참조합니다.
  • m 테이블: 부하 직원들이 있는 행을 참조합니다.

여기서 쿼리는 특정 manager_id (즉, 4번) 하의 직원 정보를 조회합니다. 결과적으로 employee_id가 5번과 6번인 경우들이 반환됩니다.

과정의 차이

  1. PK에서 FK로 조인: 여기서 PK(primary key)를 이용하여 FK(foreign key)로 조인한다는 것은 한 번의 PK 조회로 여러 FK를 매핑하여 결과를 얻는다는 것입니다. 대개의 경우 이 방식이 더 직관적이며, 성능적으로도 효율적입니다. PK는 유일성을 보장하기 때문에 찾고자 하는 조건에 정확하게 맞는 결과를 얻습니다.

  2. FK에서 PK로 조인: 반면에 FK가 여러 개의 PK에 연결될 수도 있다는 점에서, 쿼리를 구성하는 방식에 따라 결과의 순서나 구조를 다르게 이해할 수 있습니다. FK로 조인을 했을 때 각 FK 열에 대해 각각의 PK 값을 찾기 때문에 데이터의 펜딩이 이루어져 복잡한 결과가 나올 수 있습니다.

결국 작성하신 SQL 쿼리의 경우, 결과는 두 방법 모두 동일하겠지만, 쿼리를 작성하는 순서와 구조에 따라 다른 해석이 만들어질 수 있습니다. 특정 조건이나 쿼리 최적화를 위해 두 방법을 번갈아 사용해 볼 수 있겠습니다.

더 자세한 내용을 파악하시려면 아래 유사한 질문과 답변을 참고해 주세요:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

간단한 오타 제보입니다.

0

19

1

ON을 명시하지 않았을 경우 질문드립니다.

0

63

1

강의 2:53 union을썼는데도 션이 중복

0

61

1

where 대신 having을 써도 되나요?

0

85

1

주문 내역에 대한 고객 데이터

0

67

2

in 수행

0

46

1

외부조인1 강의 관련 질문

0

77

3

커버링 인덱스와 랜덤i/o 질문

0

73

1

오타인거죠?

0

82

1

섹션 3 퀴즈 3번 문제

0

79

2

GROUP BY 기준 컬럼

0

89

1

질문이 있습니다

0

58

1

오타

0

84

2

실제 상용 서비스 질문

0

101

1

파티셔닝 관련 질문입니다.

0

62

1

join 문제 풀이2 문제1(self join) 질문

0

68

1

9. 인덱스2.pdf 중에서

0

81

1

문제 2번

0

69

2

문제와 풀이1 - 3번 문제

-1

73

2

잘 사용하진 않지만 풀 외부 조인을 사용하신 사례가 궁금합니다!

0

96

1

[58. 인덱스와 정렬]을 듣다가 질문입니다.

0

96

2

두개 이상의 테이블을 조인할때 인덱스 질문이 있습니다.

0

62

1

파일을 만드는 단위가 궁금해요

0

75

1

MySQL은 실무에서 사용하는 케이스도 있을까요?

0

85

1