정규화와 select (ii) - kocwcontents.kocw.net/document/07-join.pdf · 2012. 1. 2. · • sql :...
TRANSCRIPT
-
정규화와 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] 한림대학교 금융정보통계학과