티스토리 뷰
8. 조인
:하나의 SQL 명령문에 의해 여러 테이블에 저장된 데이터를 한번에 조회할 수 있는 기능.
WHERE절을 이용한 EQUI JOIN
사용법
: SELECT table1.column, table2.column
FROM table1, table2
WHERE table1.column1 = table2.column2
학생테이블과 부서테이블을 EQUI JOIN 하여 학번, 이름, 학과번호, 소석학과 이름, 학과 위치를 출력
SELECT s.studno, s.name, s.deptno, d.dname, d.loc
FROM student s, department d
WHERE s.deptno=d.deptno;
자연조인(natural join)을 이용한 EQUI JOIN
: 자연조인 결과는 EQUI JOIN과 같지만 표현하는 문법은 다르다.
자연조인은 WHERE절을 사용하지 않고 NATURAL JOIN 이라는 키워드를 사용한다.
또한 NATURAL JOIN 절에서는 조인 애트리뷰트에 테이블 별명을 사용하면 오류가 발생하므로 주의해야 한다.
# EQUI JOIN에서 연결 고리가 되는 공통 칼럼을 조인 애트리뷰트(join attribute) 라고 한다
조인 애트리뷰트에 테이블 별명을 사용하지 않은경우
: SELECT s.studno, s.name, deptno, d.dname
FROM student s
NATURAL JOIN department d;
EQUI JOIN을 사용하여 4학년 학생의 이름, 학과 번호와 학과 이름을 출력
- WHERE절을 이용
SELECT s.name, s.grade, s.deptno, d.dname
FROM student s, department d
WHERE s.deptno = d.deptno
AND s.grade='4';
- NATURAL JOIN을 이용
SELECT s.name, s.grade, deptno, d.dname
FROM student s NATURAL JOIN department d
WHERE grade='4';
EQUI JOIN의 또다른 방법 JOIN~USING
: USING절에 조인 대상 칼럼을 지정하여 자연조인을 한다.(명시적 으로 지정하여 EQUI JOIN 실행) - 이때 칼럼 이름은 조인 대상 테이블에서 동일한 이름으로 정의되어 있어야 한다. 한가지 주의점은 조인 애트리뷰트에서 테이블 별명을 사용하면 오류가 발생한다.
사용법
: SELECT table1.column, table2.column
FROM table1 JOIN table2
USING (column);
JOIN~USING절을 이용하여 학번, 이름, 학과 번호, 학과 이름, 학과 위치를 출력
다음 두 질의문은 동일한 조건문.
SELECT s.studno, s.name, deptno, d.dname, d.loc
FROM student s JOIN department d USING (deptno);
SELECT studno, name, deptno, dname, loc
FROM student JOIN department USING (deptno);
EQUI JOIN 3가지 방법을 이용하여 성이 ‘김’씨인 학생들의 이름,학과,학과위치 출력
- WHERE절을 이용한 EQUI JOIN
SELECT name, dname, loc
FROM student s, department d
WHERE s.deptno = d.deptno
AND name like '김%';
- NATURAL JOIN을 이용한 EQUI JOIN
SELECT s.name, d.dname, d.loc
FROM student s NATURAL JOIN department d
WHERE name like '김%';
- JOIN~USING절을 이용한 EQUI JOIN
SELECT name, dname, loc
FROM student JOIN department
USING (deptno)
WHERE name like '김%';
NON-EQUI JOIN
: 조인 조건에서 <, BETWEEN a AND B 와같이 ‘=’조건이 아닌 다른 종류의 연산자를 사용하는 조인 방법이다.
교수 테이블과 급여 등급 테이블을 NON-EQUI JOIN하여 교수별로 등급을 출력
SELECT p.profno, p.name, p.sal, s.grade
FROM professor p, salgrade s
WHERE p.sal BETWEEN s.losal AND s.hisal;
OUTER JOIN
EQUI JOIN에서 양측 칼럼 값중의 하나가 NULL이지만 조인 결과로 출력할 필요가 있는 경우가 발생한다. 이런 경우 OUTER JOIN을 사용.
OUTER JOIN은 조인 조건의 양측 칼럼 값 중에서 하나가 NULL인 경우에도 조인 결과로 출력 할 수 있는 조인 방법이다.
사용법
: SELECT table1.column, table2.column
FROM table1, table2
WHERE table1.column(+) = table2.column (table1.column 의 값이 NULL인경우 출력)
또는 table1.column = table2.column(+) (table2.column 의 값이 NULL인경우 출력)
LEFT OUTER JOIN
FROM절의 왼쪽에 위치한 테이블이 NULL값을 가질 경우 사용하며 WHERE 절의 오른편에 + 기호를 추가한 것과 동일한 의미이다.
지도교수가 배정되지 않은 학생명단 출력
SELECT studno, s.profno, p.name
FROM student s
LEFT OUTER JOIN professor p
ON s.profno = p.profno;
=
SELECT studno, s.profno, p.name
FROM student s, professor p
WHERE s.profno = p.profno(+);
FULL OUTER JOIN
LEFT OUTER JOIN과 RIGHT JOIN을 동시에 실행한 결과를 출력
지도교수가 없는 학생과 지도학생이 배정되지 않은 교수를 함께 출력
SELECT studno, s.name, s.profno, p.name
FROM student s
FULL OUTER JOIN professor p ON s.profno=p.profno;
SELF JOIN
한 테이블에서 두개의 칼럼을 연결하여 EQUI JOIN할 하는 조인 방식
WHERE 절을 사용한 SELF JOIN 방법과 JOIN~ON절을 사용하는 방법이 있음
부서테이블에서 SELF JOIN을 이용하여 부서이름과 상위 부서 이름 출력
WHERE 절을 사용한 SELF JOIN
SELECT dept.dname||'의 소속은'|| org.dname
FROM department dept, department org
WHERE dept.college = org.deptno;
JOIN-ON 절을 사용한 SELF JOIN
SELECT dept.dname||'의 소속은'|| org.dname
FROM department dept JOIN department org
ON dept.college = org.deptno;
'it' 카테고리의 다른 글
오라클 데이터 조작어 DML (0) | 2022.08.14 |
---|---|
오라클 서브쿼리 (0) | 2022.08.14 |
LISP 특징 / LISP 장단점 (0) | 2022.08.13 |
LISP 탄생배경 / 리스프 개요 / 리스프 탄생배경 (0) | 2022.08.13 |
LISP란? / 고급언어 종류 (0) | 2022.08.13 |
- Total
- Today
- Yesterday
- 큐알코드만드는법
- 티스토리챌린지
- 노트북인터넷
- linux용량확인
- 노트북인터넷연결
- 무료사진다운
- 신데렐라게임생방
- 손해보기싫어서무료시청
- tvn무료로보기
- 신데렐라게임실시간
- 서버용량확인
- 무료사진다운로드
- linux서버용량확인
- 엄마친구아들무료보기
- 엄마친구아들무료로보기
- 엄마친구아들
- 검색기록지우는방법
- linux용량
- 오블완
- 리눅스서버용량
- qr코드만드는법
- 신데렐라게임
- 네이버검색기록삭제
- 엄마친구아들무료시청
- 엄마친구아들실시간무료보기
- 신데렐라게임실시간시청방법
- qr코드만드는방법
- 리눅스용량
- 검색히스토리삭제
- 검색히스토리
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |