조인
하나의 SQL 질의문에 의해서 여러 테이블에 저장된 데이터를 한번에 조회할 수 있는 기능
두 개 이상의 테이블을 ‘결합’ 한다는 의미
간단한 조인
-- FROM 절에 조인에 참여하는 두 테이블을 기록함
-- 콤마 (,) 로 구분함
-- WHERE 절에 조인 조건을 기술함
예) 사번이 103 인 사원의 부서명 을 알고 싶을 때
사원 정보 : EMPLOYEE
부서 정보 : DEPARTMENT
조인 조건
EMPLOYEE.DNO = DEPARTMENT.DNO
=> 두 테이블을 dno 값으로 연결한다는 뜻
select dname from employee, department where eno=103 and employee.dno=department.dno;
조인 작성시 유의사항
컬럼 이름의 모호성
서로 다른 두 테이블의 컬럼 ( 속성 ) 명이 같을 경우
DNO = DNO
: DBMS 에서 어느 속성이 어느 테이블에 있는 것인지 알 수 없어짐
select dname from employee, department where eno=103 and dno=dno;
해결방법
컬럼 이름 앞에 테이블 이름을 표기해줌
테이블 이름과 컬럼 이름은 점 (.) 으로 구분함
DEPARTMENT.DNO = EMPLOYEE.DNO
tip ) 테이블 별명
테이블의 이름이 긴 경우 SQL 문 작성이 성가심
테이블 이름 대신 별명 사용이 가능함
FROM 절에 테이블 이름 다음에 공백을 두고 별명을 정의함
select *
from employee e , department d
where e.dno=d.dno;
point) 별명을 정의한 후에는 별명만을 써야함.
다양한 조인들
1. 카티션 프로덕트 (join 조건이 없는거)
select eno, ename, job, manager, hiredate, hiredate, salary,commission, e.dno, dname, loc
from employee e , department d
where eno='103'
;
2. 동등 조인 (조인 조건이 있는거)
select eno, ename, job, manager, hiredate, hiredate, salary,commission, e.dno, dname, loc
-- dno속성은 employee 테이블과 department 테이블 둘 다 있는 속성이므로,
-- 명확하게 구분시켜줘야한다(테이블명.속성명)
from employee e , department d
-- 테이블명 e 로 변경 employee as e -> employee e
-- 테이블이름이 길어서 sql문장 작성하기가 힘들때는 별칭을 줄 수 있음
where e.dno=d.dno -- 동등 조인
and eno='103'
;
3. 자연조인
select eno, ename, job, manager, hiredate, hiredate, salary,commission, e.dno, dname, loc
from employee e natural join department d
;
4. 쎄타조인
select eno, ename, job, manager, hiredate, hiredate, salary,commission, e.dno, dname, loc
from employee e , department d
where e.dno>=d.dno -- 쎄타 조인 >= <= 이런 등호가 들어갈 수 있음
;
5. 셀프조인
select eno, ename, job, manager, hiredate, hiredate, salary,commission, e.dno, dname, loc
from employee e , department d
where e.dno>=d.dno
;
6. 외부조인
select eno, ename, manager, hiredate, salary, commission, d.dno, dname, loc
from employee e right join department d
-- left라고하면 왼쪽에는 있지만 오른쪽에는 없는거 right라고 하면 오른쪽에는 있지만 왼쪽에는 없는것
-- left join department d : employee 테이블에는 있지만 department테이블에는 없는 속성을 조회
-- right join department d -- employee 테이블에는 없지만 department테이블에는 있는 속성을 조회
on e.dno=d.dno
; -- 외부조인 해당하는사람이 없는 항목까지 표시해주는거
'Programming > SQL' 카테고리의 다른 글
[SQL/실습] 테이블 조인 - 연습문제 풀어보기 (답안) (0) | 2020.12.17 |
---|---|
[SQL/실습] 테이블 조인 - 연습문제 풀어보기 (문제) (0) | 2020.12.17 |
[SQL] 데이터 삽입과 변경 - insert / update / delete (0) | 2020.12.17 |
[SQL/Error] (1452): Cannot add or update a child row: a foreign key constraint fails (0) | 2020.12.17 |
[SQL/실습] 데이터 검색 - 연습문제 풀어보기 2 (답안) (0) | 2020.12.16 |