쌓고 쌓다
[Oracle] EQUI JOIN, NON-EQUI JOIN 본문
EQUI JOIN
SELECT table1.column, table2.column
FROM table1, table2
WHERE table1.column1=table2.column2;
공통 칼럼 있을 때 그 값을 비교하여 같은 값을 가지는 행을 연결하여 결과를 생성한다.
join attribute(속성) : 연결 고리가 되는 공통 칼럼
EX) 학생 테이블과 부서 테이블을 EQUI JOIN하여 학번, 이름, 학과번호, 소속학과이름, 학과 위치를 출력
SELECT s.studno, s.name, s.deptno, d.dname, d.loc
FROM student s, department d
WHERE s.deptno=d.deptno;
EQUI JOIN - NATURAL JOIN
WHERE절을 사용하지 않고 NATURAL JOIN 키워드 사용
자동적으로 공통 칼럼을 찾아 조인해줌.
SELECT table1.column, table2.column
FROM table1
NATURAL JOIN table2
아래처럼 join attribute(공통 속성)에 테이블 별명을 사용하지 않거나 모든 칼럼에 별명을 사용하지 않아야 함.
-- deptno에 s.deptno나 d.deptno처럼 별명을 사용하지 않아야함.
SELECT s.studno, s.name, deptno, d.dname
FROM student s
NATURAL JOIN department d;
-- 모든 칼럼에 별명을 사용하지 않음
SELECT studno, name, deptno, dname
FROM student
NATURAL JOIN department;
EX) NATURAL JOIN으로 교수 번호, 이름, 학과 번호, 학과 이름 출력
SELECT p.profno, p.name, deptno, d.dname
FROM professor p
NATURAL JOIN department d;
EX) NATURAL JOIN으로 4학년 학생의 이름, 학과 번호와 학과 이름을 출력
SELECT s.name, deptno, d.dname
FROM student s
NATURAL JOIN department d
WHERE grade='4';
SELECT s.name, s.deptno, d.dname
FROM student s, department d
WHERE s.deptno=d.deptno AND grade='4';
EQUI JOIN - JOIN ~ USING
USING절에 조인 대상 칼럼을 지정
칼럼 이름은 두 테이블에서 동일한 이름으로 정의되어 있어야 함
SELECT table1.column, table2.column
FROM table1 JOIN table2
USING (column);
+ join attribute(공통 속성)에 테이블 별명을 사용하면 오류 발생
EX) 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 s JOIN department
USING (deptno);
EX) EQUI JOIN의 3가지 방법으로 성이 '김'씨인 학생의 이름, 학과 이름, 학과 위치 출력
-- WHERE 절
SELECT s.name, d.dname, d.loc
FROM student s, department d
WHERE s.deptno=d.deptno
AND name LIKE '김%';
-- NATURAL JOIN
SELECT s.name, d.dname, d.loc
FROM student s
NATURAL JOIN department d
WHERE name LIKE '김%';
-- JOIN USING
SELECT name, dname, loc
FROM student JOIN department
USING (deptno)
WHERE name LIKE '김%';
NON-EQUI JOIN
비교 연산자 '<', BETWEEN a AND b 등... '=' 조건이 아닌 연산자를 사용하여 조인
EX) 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;
EX) 101번 학과 교수의 이름, 급여, 급여 등급을 출력
SELECT p.name, p.sal, s.grade
FROM professor p, salgrade s
WHERE p.sal BETWEEN s.losal AND s.hisal
AND p.deptno=101;
'프로그래밍 > SQL' 카테고리의 다른 글
오라클 중심의 SQL 배움터 5장 연습문제 풀이 (0) | 2022.11.02 |
---|---|
오라클 중심의 SQL 배움터 2장 연습문제 풀이 (0) | 2022.11.02 |
[Oracle] 조인(JOIN), 카티션 곱 (0) | 2022.11.01 |
[Oracle] HAVING (0) | 2022.10.31 |
[Oracle] GROUPING SETS (0) | 2022.10.31 |
Comments