AD

전수진 공부 프로젝트 트게더를 만들어보자 - DB(Table Join) [마감]

모데충
2022-09-05 16:00:59 235 3 15

DB 과정의 마지막인 Table Join에 대해서 알아보도록 하겠습니다. 사실 이 후에 Function이라던지 Procedure가 있기는 한데 실서버 개발도중에 사용해볼 기회가 있으면 그때 다뤄보든가 해보도록 하겠습니다. 아님말고?


Table Join : 여러개의 테이블을 조합하여 원하는 데이터를 추출하는것

DB에는 테이블이 한개만 있는것이 아니라 여러개가 있고 원하는 데이터는 꼭 한 테이블에만 존재할 수는 없습니다. 그렇기 때문에 Table Join을 통하여 사용자가 원하는 모양의 데이터를 추출할 수 있습니다.


예제로 활용하기 위해서 제 서버에 총 3개의 테이블을 추가로 생성해두었습니다. MEMBERS(사원관리),DEPARTMENT(부서),APPRAISALL(평가) 입니다. 


먼저 각 테이블에 어떠한 값들이 존재하는지 확인해 보도록 하겠습니다.


f617d29a3f80e51b410df14478fe286b.png

d453af6780c2c629ceda5644b691b121.png

MEMBERS테이블에는 사원번호,이름,성별,나이,혈액형,퇴사여부 총 6개의 컬럼이 있으며, 그중에서 ID와 NAME에는 Primary Key가 걸려 있습니다.


ab949f0f5e78c0e691f52ae0813ec608.png

fd87a653675d1f599215f726ecb34461.png

DEPARTMENT테이블에는 사원번호,부서명,부서 내 직위,부서 근무 시작일,부서 근무 종료일 총 5개의 컬럼이 있으며, 그중에서 ID와D_NAME,D_SDATE에는 Primary Key가 걸려 있습니다.


2049ca842a4a070e4775418ca1a7e7c8.png

66c33f466a24a83bb7dc933b88799466.png

APPRAISAL테이블에는 사원번호,평가년도,평가등급 총3개의 컬럼이 있으면 모든 컬럼에 Primary Key가 걸려 있습니다.


그러면 이 3개의 테이블을 가지고 사용자가 원하는 데이터를 뽑아보도록 하겠습니다. 예를 들면

1."현재 인사팀에서 퇴사한 사람들의 정보를 알려주세요." 

그러면은 필요한 테이블은 사원관리 테이블과 부서 테이블일 것입니다.사용자가 보기 편해야 하니까 저는 결과 컬럼을

사원관리 테이블의 ID,NAME,RETIRE_YN과 부서테이블의 D_NAME,D_JIKWEE를 보여주도록 하겠습니다.

쿼리는 아래와 같이 만드시면 됩니다.

fb1d28cebbe84343868820ad6cf0aadb.png

여기서 조건의 내용을 잘 이해하셔야 Table Join이 어떻게 이루어 지는지를 알 수가 있습니다. 

1) 먼저 59번째 줄에 MEMBERS테이블과 DEPARTMENT테이블을 SELECT했다는 것은 두 테이블 모두를 가져오겠다는 뜻입니다. 그리고 약어를 사용하여 두 테이블을 A와 B로 표현하였습니다.

2) 두번째로 60번째 A.ID = B.ID의 의미는 A테이블의 ID와 B테이블의 ID가 같은 데이터를 가져오라는 뜻입니다.

3) 세번째로 61번째 A.RETIRE_YN = 'Y'는  A테이블에 RETIRE_YN의 값이 Y인 데이터를 가져오라는 뜻입니다.

4) 네번째로 62번째 B.D_NAME = '인사팀'은 B테이블에 D_NAME의 값이 인사팀인 데이터를 가져오라는 뜻입니다.


모든 조건이 AND로 묶여있으니 저 3조건을 만족하는 데이터가 출력이 됩니다. 결과는 아래와 같습니다.

cac2616b38b1924b6232f3a6d6971f84.png


사용자가 말했던 데이터가 출력이 되었습니다. 인사팀에서 퇴사한 사람들의 정보입니다.


조건은 이해가 가는데 Join에 형태에 대해서 잘 이해가 안가시는 분들이 계실 수도 있는데요. 그러면은 아래와 같이 데이터를 출력해 보겠습니다.

53b1f46d90180fa3219a78ab0ae1a089.png

컬럼을 지정하지 않는다면 Join된 테이블의 원형을 확인할 수 있습니다.

fdefea60bbdcd7a375d4978ea0edef02.png

A테이블과 B테이블에 모든 컬럼들이 합쳐져서 한 테이블처럼 나오는 것을 확인할 수가 있습니다. 여기서 우리가 컬럼을 지정해서 출력하면 아까와 같은 형태가 나오는 것입니다.


몇가지의 데이터를 더 뽑아보도록 하겠습니다.

2. "회계팀 직원중 올해년도 평가점수가 E인 데이터를 보여주세요."

쿼리문은 아래와 같습니다.

0c21498c517c015563d9b18875bdc120.png

결과는 아래와 같습니다.

7a423e1bb8bb2c73304932d7dfc05cc4.png

3개의 테이블도 어렵지 않게 Join하여 원하는 데이터를 추출할 수 있습니다.


3."모든 부서의 부서원들 중에서 나이가 30세 이하이면서 평가점수가 A인 직원들을 보여주세요."

쿼리문은 아래와 같습니다.

741ab2a6667ebc0919e2c59a5bd399f3.png

결과는 아래와 같습니다.

b133fb18ccd4f22846275f6ca8b3af50.png


숙제 푸시는 3분께 치킨 기프티콘을 드리도록 하겠습니다. 문제를 푸시고 비밀댓글로 쿼리와 결과,그리고 원하시는 치킨을 알려주시면 기프티콘 달아놓겠습니다. 데이터는 제 DB에 있으니 거기서 확인하시면 되고 혹 본인의 DB에서 하고 싶으신 분들이 계시면은

https://docs.google.com/document/d/1RMabD0k2SVTR1vHVPoMQ6BzdLLra1JD0A7bOJPfnfQk/edit?usp=sharing

위 링크로 타고 들어가겨서 해당 쿼리들을 전부 실행하시면 테이블과 데이터가 생성됩니다.


숙제 : "인사팀과 회계팀 사원중에 직위가 과장이나 팀장이면서 평가등급이 E가 아닌 사원들을 보여주세요."

힌트 : IN절과 NOT IN에 대해서 찾아보시면 쉽게 푸실 수 있습니다.


모두들 태풍 조심하시고 곧 다가올 추석 연휴를 즐겁게 보내시기 바랍니다. 감사합니다.


오늘 사용된 쿼리입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
SELECT * FROM MEMBERS;
 
SELECT * FROM DEPARTMENT;
 
SELECT * FROM APPRAISAL;
 
SELECT  A.ID
    ,   A.NAME
    ,   B.D_NAME
    ,   B.D_JIKWEE
    ,   A.RETIRE_YN
FROM MEMBERS A,DEPARTMENT B
WHERE   A.ID = B.ID
    AND A.RETIRE_YN = 'Y'
    AND B.D_NAME = '인사팀';
 
 
SELECT    A.ID
        , A.NAME
        , B.D_NAME
        , B.D_JIKWEE
        , C.GRADE
FROM MEMBERS A, DEPARTMENT B, APPRAISAL C
    WHERE   A.ID = B.ID
        AND A.ID = C.ID
        AND B.D_NAME = '회계팀'
        AND C.GRADE = 'E';
 
SELECT    A.ID
        , A.NAME
        , A.AGE
        , B.D_NAME
        , B.D_JIKWEE
        , C.GRADE
FROM MEMBERS A, DEPARTMENT B, APPRAISAL C
        WHERE   A.ID = B.ID
            AND A.ID = C.ID
            AND A.AGE <= 30
            AND C.GRADE = 'A';
cs



후원댓글 15
댓글 15개  
이전 댓글 더 보기
이 글에 댓글을 달 권한이 없습니다. 로그인해 보세요.
▲윗글 발?성법 라ㅡ떼
잡담신고팬아트건의함게임추천이벤트순클립전수진 공부 프로젝트음식을 올려보아요마지막 클립 불태우기
2
전수진 공부 프로젝트
에펙 뉴비 순당무님을 위한 팁글 모음.link [1]
쥐펄
07-29
4
전수진 공부 프로젝트
초전도체 논문 [2]
서카포노예제발
07-29
6
04-06
3
03-30
15
전수진 공부 프로젝트
순손실 방지 프로젝트 - 1.다시보기 자동저장하기 [17]
모데충
03-29
4
전수진 공부 프로젝트
심심해서 쓰는 인터넷 신청부터 점검까지 [3]
모데충
03-23
0
전수진 공부 프로젝트
녹화에 음악 안남게 하기 [3]
모데충
12-20
11
전수진 공부 프로젝트
씹덕일러를 그려보자 (2) - 김욾 선화, 밑색 칠하기 [6]
미노일세
11-15
7
11-07
16
전수진 공부 프로젝트
걸게이머 결승에 관하여(뇌피셜) [8]
모데충
11-03
7
전수진 공부 프로젝트
망 사용료 논쟁에 대해서 알아보자(초스압 주의) [7]
모데충
09-30
8
전수진 공부 프로젝트
연애 잘하는 법,권태기와 식은 마음의 구분 [3]
boysick12
09-25
2
전수진 공부 프로젝트
트게더를 만들어보자 - 다음 과정 의견수렴 [3]
모데충
09-17
2
09-10
5
전수진 공부 프로젝트
발?성법 [1]
라ㅡ떼
09-10
»
전수진 공부 프로젝트
트게더를 만들어보자 - DB(Table Join) [마감] [15]
모데충
09-05
5
전수진 공부 프로젝트
트게더를 만들어보자 - DB(Table 정규화) [2]
모데충
09-02
2
전수진 공부 프로젝트
방장 공부하자 (서버, 서버의 기본 3)
라ㅡ떼
09-01
3
전수진 공부 프로젝트
방장 공부하자 (서버, 서버의 기본 2)
라ㅡ떼
08-28
5
전수진 공부 프로젝트
방장 공부하자 (서버, 서버의 기본 1) [2]
라ㅡ떼
08-26
3
전수진 공부 프로젝트
트게더를 만들어보자 - DB(Table 제약 조건)
모데충
08-23
3
전수진 공부 프로젝트
트게더를 만들어보자 - DB(CRUD 조건문) [마감] [8]
모데충
08-19
3
전수진 공부 프로젝트
트게더를 만들어보자 - DB(DataGrip 설치) - [마감] [15]
모데충
08-17
9
08-16
인기글 글 쓰기