목차
1. JOIN - 등가 조인과 비등가 조인
1-1 조인이란
2. 조인문 작성 요령
2-1 조인문 작성의 어려움과 해결
2-2 조인문 작성 과정
1. JOIN - 등가 조인과 비등가 조인
1-1 조인이란
SELECT 테이블.컬럼, . . .
FROM 테이블, 테이블, . . .
WHERE 조인_조건
AND 일반_조건
ORDER BY 컬럼. . .;
‐ 조인 조건이란 테이블 간의 관계 수식이다.
‐ 동일한 이름의 컬럼이 여러 테이블에 존재하는 경우 컬럼명 앞에 반드시 테이블 명이 필요하다.
‐ 테이블 개수가 n개일 때 조인 조건은 항상 (n-1)개 이상이다.
‐ 등가 조인(Equi-join)은 조인 조건이 등호이다.
‐ 비등가 조인(Non equi-join)은 조인 조건이 부등호이다.

● 등가 조인
등가 조인을 이용하여 다음과 같이 서로 다른 테이블에 같은 컬럼이 있을 경우 그 컬럼을 기준으로 서로 다른 테이블의 컬럼을 매치시켜 출력할 수 있다.
- 각 사원의 근무 부서와 근무지를 검색한다.
SELECT dept.dno 부서번호, dname 부서, loc 근무처, eno 사번,ename 이름
FROM dept, emp WHERE dept.dno = emp.dno;
SELECT d.dno 부서번호, dname 부서, loc 근무처, eno 사번,ename 이름
FROM dept d, emp e WHERE d.dno = e.dno;
from 절의 테이블 둘이 서로 관계가 있다는 것을 where절의 '=' 수식으로 확인할 수 있다. 이전까지는 하나의 테이블만 참조하여 'dno'와 같이 컬럼의 이름만 표기하면 됐으나, 둘 이상의 테이블을 참조하게 되면 겹치는 컬럼의 경우 반드시 'dept.dno'와 같이 테이블 명을 함께 표기한다.
테이블 명에 대하여 별명을 지정할 경우 select 절, where 절 모두 별명으로 표기한다. (sql 문은 from 절부터 읽는다.)
● 비등가 조인
비등가 조인을 이용하여 컬럼이 같지 않더라도 범위조건을 부여하여 출력할 수 있다.
- 각 사원의 급여 등급을 검색한다.
SELECT eno, ename, sal, grade FROM emp e, salgrade s WHERE sal BETWEEN losal AND hisal;
- 총무 부서 사원의 급여를 10% 인상한 경우 사원의 급여 등급을 검색한다.
SELECT d.dno, dname, eno, ename, sal, sal*1.1, grade FROM dept d, emp e, salgrades
WHERE d.dno = e.dno AND sal*1.1 BETWEEN losal AND hisal AND dname = '총무';
● 잘못된 조인 조건
SELECT d.dno 부서번호, dname 부서, loc 근무처, eno 사번, ename 이름 FROM dept d, emp e;
조인 조건이 누락된 문장이다.
참조하는 테이블이 n개일 경우 조인 조건은 반드시 (n-1)개 이상이어야 한다.
2. 조인문 작성 요령
2-1 조인문 작성의 어려움과 해결
● 테이블 표현과 관계
RDB(관계형 데이터베이스)의 모든 테이블은 관계가 있다. 주어진 테이블이 적은 경우라면 머리로 모든 테이블의 관계를 생각해서 작성할 수 있으나 실무에서 테이블은 그 수가 매우 많아 모두 머리로만 생각하여 작성하는 것은 사실상 불가능하다.
이를 해결하기 위해 다음과 같이 테이블끼리의 관계를 그려놓은 그림을 미리 작성하여 보며 작업한다.

● ERD(Entity-Relationship Digagram)를 이용한 테이블 표현
ERD는 데이터베이스 내의 요소가 어떻게 관련되어 있는지 보여 주는 다이어그램으로 다음과 같이 ERD를 이용하여 테이블을 표현할 수 있다.

컬럼은 반드시 한 줄에 하나씩 작성하며, 가장 상위에 따로 나눠진 컬럼은 그 테이블에서의 프라이머리 키(주 식별자)이다.
데이터 간의 관계는 항상 부모와 자식 관계를 갖는다. 이때 먼저 값이 지정되는 데이터를 부모(primary key), 후에 부모 데이터를 보고 지정되는 데이터를 자식(foreign key)으로 본다.
부모 자식 관계와 같은 직접 연관이 없는 테이블과는 선을 하나 긋고 밑에 참고할 수 있는 컬럼을 표기한다.
2-2 조인문 작성 과정
① 검색 대상과 조건을 추출한다.
- SELECT, WHERE, ORDER BY절 구성
② SELECT 절과 FROM 절에서 검색 테이블을 추출한다.
③ 테이블 간 관계를 확인한다.
- 관계 확인을 통해 테이블이 추가될 수 있다.
④ 조인 조건을 기술한다.
⑤ 문장을 완성한다.
- SELECT 절에 내용이 추가된다.
● 조인문 작성 실습
- 화학과 일반 화학 기말고사 점수를 검색한다.
① 검색 대상과 조건을 추출한다.
검색 대상 - 기말고사 점수 : result
조건 - 화학과 학생 : major = '화학'
‐ 일반 화학 과목 : cname = '일반화학'
SELECT result
FROM
WHERE major = '화학' AND cname= '일반화학';
② select 절과 from 절에서 검색 테이블을 추출한다.
‐ result : score
‐ major : student
‐ cname : course
SELECT result
FROM student, course, score
WHERE major = '화학' AND cname= '일반화학';
③ 테이블 간 관계를 확인한다.
‐ FROM절에 기술된 테이블 간의 관계를 확인한다.
‐ 관계가 연결이 끊어지면 안된다. 관계를 위해 FROM 절에 테이블을 추가할 수 있다.
④ 조인 조건을 기술한다.
‐ FROM 절 테이블 간 관계를 기술한다.
SELECT result
FROM student s, course c, score r
WHERE s.sno = r.sno AND r.cno = c.cno
AND major = '화학' AND cname = '일반화학';
⑤ 문장을 완성한다.
‐ 문장의 의미를 갖도록 필요한 컬럼을 추가한다.
SELECT major, cname, s.sno, sname, result
FROM student s, course c, score r
WHERE s.sno= r.sno AND r.cno = c.cno
AND major = '화학' AND cname = '일반화학';
'일일 정리' 카테고리의 다른 글
APACHE - httpd.conf, 다중 행/열 서브 쿼리, 집합 연산자, 단일 행 함수와 문자 함수 (2) | 2025.02.27 |
---|---|
APACHE, 자기 참조 조인과 외부 조인, 단일 행 서브 쿼리 (0) | 2025.02.26 |
도메인 위임, SQL 다양한 조건 검색, PHP 배열(배열의 구조와 정의) (0) | 2025.02.23 |
다수의 도메인 서버, sqlplus 출력 제어, 연결 연산자와 중복 제거, 정렬을 이용한 자료 검색, WHERE 절을 이용한 조건 검색 (0) | 2025.02.20 |
Authoritative DNS 서버, 데이터베이스, SELECT 문의 이해 (0) | 2025.02.20 |