18
정규화와 SELECT (II) 웹 데이터 베이스 , [email protected] 한림대학교 금융정보통계학과

정규화와 SELECT (II) - KOCWcontents.kocw.net/document/07-Join.pdf · 2012. 1. 2. · • SQL : AS o Alias 의 줄임말로 현재 쿼리에 한해 임시로 이름을 바꿔 사용한다

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

  • 정규화와 SELECT (II)

    웹 데이터 베이스

    이 윤 환, [email protected] 한림대학교 금융정보통계학과

  • 이 윤 환, [email protected] 한림대학교 금융정보통계학과

    학과 지도교수

    A 김수정

    B 허영만

    C 강풀

    학생 학과

    학과 학번 성명

    A 0001 고길동

    A 0002 둘리

    B 0003 희동이

    B 0004 도우너

    B 0005 또치

    C 0006 마이콜

    수강과목 담당교수

    성질이론 김수정

    한식의 멋 허영만

    심리학의 이해 강풀

    생활체육 이현세

    과목_성적

    과목

    학번 수강과목 성적

    0001 성질이론 A

    0001 한식의 멋 C

    0002 성질이론 A

    0002 한식의 멋 B

    0003 한식의 멋 B

    0004 심리학의 이해 C

    0005 심리학의 이해 A

    0006 생활체육 B

  • Cartesian Product

    • 두 테이블에 존재하는 행들의 연결 o 앞선 학과 테이블과 학과 테이블의 Cartesian Product

    o 결과는 두 테이블의 행의 곱의 개수 만큼 나온다.

    이 윤 환, [email protected] 한림대학교 금융정보통계학과

    학과 지도교수

    A 김수정

    B 허영만

    C 강풀

    학과 학번 성명

    A 0001 고길동

    A 0002 둘리

    B 0003 희동이

    B 0004 도우너

    B 0005 또치

    C 0006 마이콜

  • Cartesian Product

    • SELECT * FROM hsDept, hsStudent;

    이 윤 환, [email protected] 한림대학교 금융정보통계학과

  • (INNER) JOIN

    • 앞선 Cartesian Product의 예에서 학과 테이블의 학과명과 학생 테이블의 학과명이 다른 자료는 의미없는 자료이다.

    • 이 의미없는 연결을 없애보자. o SELECT * FROM hsDept, hsStudent

    WHERE hsDept.deptName = hsStudent.deptName;

    o JOIN 조건이 이와 같이 같다(=)일 경우 동등 조인이라 한다.

    이 윤 환, [email protected] 한림대학교 금융정보통계학과

  • (INNER) JOIN

    • SQL : AS o Alias 의 줄임말로 현재 쿼리에 한해 임시로 이름을 바꿔 사용한다.

    o TABLE 명에 대해 바꿔 사용할 경우 (열이름의 경우도 대동소이)

    • SELECT A.deptName FROM hsDept AS A;

    • 해당 쿼리내에서 테이블의 이름을 AS 이후에 지정한 문자열로 바꿔 사용한다.

    • 열의 이름은 다른 테이블과 중복 사용시 임시이름.열이름으로 가리킨다.

    이 윤 환, [email protected] 한림대학교 금융정보통계학과

  • (INNER) JOIN

    • 앞선 예에서 deptName이 중복되어 나타난다. 이 중복을 없애보자. o SELECT A.deptName, A.deptProf, B.studentID, B.studName

    FROM hsDept as A, hsStudent as B

    WHERE A.deptName = B.deptName;

    o 이와 같이 중복되는 열을 제거한 것을 NATURAL JOIN 이라 한다.

    이 윤 환, [email protected] 한림대학교 금융정보통계학과

  • JOIN

    • MySQL에서 제공하는 Join o http://dev.mysql.com/doc/refman/5.1/en/join.html

    이 윤 환, [email protected] 한림대학교 금융정보통계학과

    join_table:

    table_reference [INNER | CROSS] JOIN table_factor [join_condition]

    | table_reference STRAIGHT_JOIN table_factor

    | table_reference STRAIGHT_JOIN table_factor

    ON conditional_expr

    | table_reference {LEFT|RIGHT} [OUTER] JOIN

    table_reference join_condition

    | table_reference NATURAL [{LEFT|RIGHT} [OUTER]] JOIN table_factor

    join_condition:

    ON conditional_expr

    | USING (column_list)

    http://dev.mysql.com/doc/refman/5.1/en/join.htmlhttp://dev.mysql.com/doc/refman/5.1/en/join.html

  • JOIN

    • 앞선 (INNER) JOIN을 MySQL에서 제공하는 (INNER) JOIN 문을 통해 알아보자. o SELECT A.deptName, A.deptProf, B.studentID, B.studName

    FROM hsDept as A JOIN hsStudent as B

    ON A.deptName = B.deptName;

    이 윤 환, [email protected] 한림대학교 금융정보통계학과

  • JOIN

    o SELECT A.deptName, A.deptProf, B.studentID, B.studName

    FROM hsDept as A JOIN hsStudent as B

    USING (deptName);

    • JOIN 조건으로 참여할 열의 이름이 같고 동등 조인을 실시할 경우 USING을 사용하면 편리하다.

    이 윤 환, [email protected] 한림대학교 금융정보통계학과

  • 역 정규화를 통한 테이블 합치기

    이 윤 환, [email protected] 한림대학교 금융정보통계학과

    수강과목 담당교수

    성질이론 김수정

    한식의 멋 허영만

    심리학의 이해 강풀

    생활체육 이현세

    과목_성적

    과목

    학번 수강과목 성적

    0001 성질이론 A

    0001 한식의 멋 C

    0002 성질이론 A

    0002 한식의 멋 B

    0003 한식의 멋 B

    0004 심리학의 이해 C

    0005 심리학의 이해 A

    0006 생활체육 B

    학번 수강과목 담당교수 성적

    0001 성질이론 김수정 A

    0001 한식의 멋 허영만 C

    0002 성질이론 김수정 A

    0002 한식의 멋 허영만 B

    0003 한식의 멋 허영만 B

    0004 심리학의 이해 강풀 C

    0005 심리학의 이해 강풀 A

    0006 생활체육 이현세 B

  • • SELECT B.studentID, B.className, A.profName,

    B.studScore

    FROM hsClass as A JOIN hsClassScore as B

    USING (className);

    이 윤 환, [email protected] 한림대학교 금융정보통계학과

  • 이 윤 환, [email protected] 한림대학교 금융정보통계학과

    학과 지도교수

    A 김수정

    B 허영만

    C 강풀

    학생

    학과

    학과 학번 성명

    A 0001 고길동

    A 0002 둘리

    B 0003 희동이

    B 0004 도우너

    B 0005 또치

    C 0006 마이콜

    학과 학번 성명 지도교수

    A 0001 고길동 김수정

    A 0001 고길동 김수정

    A 0002 둘리 김수정

    A 0002 둘리 김수정

    B 0003 희동이 허영만

    B 0004 도우너 허영만

    B 0005 또치 이현세

    C 0006 마이콜 강풀

  • • SELECT

    A.deptName, A.studentID, A.studName, B.deptProf

    FROM hsStudent as A JOIN hsDept as B

    USING(deptName);

    이 윤 환, [email protected] 한림대학교 금융정보통계학과

  • 이 윤 환, [email protected] 한림대학교 금융정보통계학과

    학번 수강과목 담당교수 성적

    0001 성질이론 김수정 A

    0001 한식의 멋 허영만 C

    0002 성질이론 김수정 A

    0002 한식의 멋 허영만 B

    0003 한식의 멋 허영만 B

    0004 심리학의 이해 강풀 C

    0005 심리학의 이해 강풀 A

    0006 생활체육 이현세 B

    학생

    과목_성적

    학과 학번 성명 지도교수

    A 0001 고길동 김수정

    A 0001 고길동 김수정

    A 0002 둘리 김수정

    A 0002 둘리 김수정

    B 0003 희동이 허영만

    B 0004 도우너 허영만

    B 0005 또치 이현세

    C 0006 마이콜 강풀

    학과 학번 성명 지도교수 수강과목 성적 담당교수

    A 0001 고길동 김수정 성질이론 A 김수정

    A 0001 고길동 김수정 한식의 멋 C 허영만

    A 0002 둘리 김수정 한식의 멋 B 허영만

    A 0002 둘리 김수정 성질이론 A 김수정

    B 0003 희동이 허영만 성질이론 B 김수정

    B 0004 도우너 허영만 심리학의 이해 C 강풀

    B 0005 또치 이현세 심리학의 이해 A 강풀

    C 0006 마이콜 강풀 생활체육 B 이현세

  • • SELECT * FROM

    ( SELECT B.studentID AS sid, B.className AS cn,

    A.profName AS pn, B.studScore AS sc

    FROM hsClass as A JOIN hsClassScore as B

    USING (className) ) AS AB

    JOIN

    ( SELECT C.deptName AS dn, C.studentID AS sid,

    C.studName AS sn, D.deptProf AS 에 FROM hsStudent as C JOIN hsDept as D

    USING(deptName) ) AS CD

    USING (sid);

    이 윤 환, [email protected] 한림대학교 금융정보통계학과

  • 이 윤 환, [email protected] 한림대학교 금융정보통계학과

  • 다음 시간에는 …

    • OUTER JOIN 에 대해 알아보고 Facebook Page에 올려주세요

    • PHP를 알아봅시다!

    이 윤 환, [email protected] 한림대학교 금융정보통계학과