JOIN 절
# EQUI join 등가 조인
∙ 테이블과 테이블을 연결하여 필요한 정보를 반환한다.
∙ A테이블 B테이블을 JOIN할시 두 테이블을 이을 수 있는 컬럼이 각 테이블에 있어야 한다.
A에서 이름 칼럼을, B에서는 주소 칼럼을 가져와 새로운 정보를 반환하고 싶을때 JOIN을 사용하면 된다.
A,B TABLE에는 공통적인 ID 칼럼을 가지고 있다.
이 ID칼럼을 통해 두 테이블을 JOIN하여 원하는 값을 추출하면 된다.
✔ Oracle JOIN
SELECT a.col1, b.col1 FROM table1 a, table2 b WHERE a.co2 = b.coq2;
SELECT a.이름, b.주소 FROM A a, B b WHERE a.id = b.id;
✔ ANSI JOIN
SELECT a.col1, b.col1 FROM table a [INNER] JOIN table2 b ON a.co2 = b.col2;
SELECT a.이름, b.주소 FROM A a [INNER] JOIN B b ON a.id = b.id;
* INNER : NULL값이 안나옴 (default값이며, 생략가능)
* OUTER : NULL값이 나옴
⌨ emp, dept 테이블을 조회하여 emptno, ename, dname 출력해보자
emp TABLE과 dept TABLE에서 공통된 컬럼 "DEPTNO"이 있으므로 이 컬럼을 통해 join하여 원하는 값을 조합할 수 있다.
SELECT e.empno, e.ename, d.dname FROM emp e, dept d WHERE e.deptno = d.deptno; --#1
-- 컬럼 별칭을 주지않고 컬럼명을 써줘도 됨, BUT 길어서 번거로울 수 있음
SELECT emp.empno, emp.ename, dept.dname FROM emp, dept WHERE emp.deptno = dept.deptno; --#2
SELECT e.empno, e.ename, d.dname FROM emp e JOIN dept d ON e.deptno = d.deptno; -- ANSI --#3
-- #1,2,3 모두 동일한 값 조회됨
⌨ ANSI JOIN의 inner outer 차이
∙ inner은 null값 안나오고, outer null값 포함하여 전체의 값이 나온다. 아래의 예제를 통해 알아보자
-- 서로 연결되는 값중 null값은 제외하고 출력
SELECT s.name, p.name
FROM student s JOIN PROFESSOR p
ON s.PROFNO = p.PROFNO; --#1
-- 서로 연결되지 않는 null값도 전부 출력
--RIGHT : 테이블 쓴 순서 기준 오른쪽의 값은 전부 출력하고 연결되지 않는 왼쪽값을 NULL로 반환
SELECT s.name "학생이름", p.name "선생이름"
FROM student s RIGHT OUTER JOIN PROFESSOR p
ON s.PROFNO = p.PROFNO; --#2
--LEFR : 테이블 쓴 순서 기준 왼쪽 값은 전부 출력하고 연결되지 않는 오른쪽값을 NULL로 반환
SELECT s.name "학생이름", p.name "선생이름"
FROM student s LEFT OUTER JOIN PROFESSOR p
ON s.PROFNO = p.PROFNO; --#3
⌨ 조건에 해당하는 두 테이블의 값을 JOIN하여 출력하기
∙ studetn 테이블과 department, professor 테이블을 조인하여 학생의 이름, 학생의 학과명(1전공 deptno1), 학생의 지도 교수이름 출력
SELECT s.name "학생이름", d.dname "1전공 학과명", p.name "지도교수이름"
FROM student s, DEPARTMENT d, professor p
WHERE s.deptno1 = d.deptno
AND s.PROFNO = p.PROFNO;
∙ student 테이블을 조회하여 1전공이 101번인 학생들의 이름과 각 학생들의 지도교수이름을 출력
SELECT s.NAME "학생이름", p.name "교수이름"
FROM student s, professor p
WHERE s.profno = p.profno
AND s.deptno1 = 101;
'basic > sql' 카테고리의 다른 글
SQL[09] - 트랜젝션, 서브쿼리, 시퀀스 (0) | 2021.06.01 |
---|---|
SQL[08] - 테이블/컬럼/레코드, 생성/추가/삭제/수정 ⋯ (0) | 2021.05.31 |
SQL[06] - 일반함수, 그룹함수, GROUP BY, HAVING절 (0) | 2021.05.31 |
SQL[05] - 형변환 함수(숫자,문자,날짜 서로 형변환 하기), 오라클의 데이터 타입, 오라클 숫자 표현식 (0) | 2021.05.31 |
SQL[04] - 함수 (문자함수, 숫자함수, 날짜함수) (0) | 2021.05.28 |