손에 잡히는 10분 SQL 12,13장 참고
동등 조인 : Equi-Join
두 테이블에 있는 공통 열의 값이 같은 것을 결과로 가져온다.
JOIN을 한 테이블은 실제로 존재하지 않는다. 객체(Entity)가 아니라는 뜻과 같다. 쿼리가 수행되는 동안에만 유지된다.
JOIN을 하려면 포함하려는 테이블과 그 테이블 사이의 관계를 명시하면 된다.
SELECT vend_name, prod_name, prod_price
FROM Vendors, Products
WHERE Vendors.vend_id = Products.vend_id;
WHERE
절에 관계를 매치시키고 있다. JOIN 시에는 완전한 열 이름을 써서 테이블을 밝혀야 정확히 참조할 수 있다.
카티전 곱 : Cartesian Product = 상호 조인 : Cross Join
조인 조건 없이 테이블 관계에 의해 반환된 결과.
'첫 번째 테이블의 행수 * 두 번째 테이블의 행 수' 만큼의 결과가 검색되게 된다.
조인 조건절을 생략하거나 조인 조건이 잘못 설정될 경우 발생한다.
SELECT vend_name, prod_name, prod_price
FROM Vendors, Products;
이런 경우 이다.
내부 조인 : Inner Join
조인 타입을 표시할 때에는 다른 문법을 사용한다.
SELECT vend_name, prod_name, prod_price
FROM Vendors INNER JOIN Products
ON Vendors.vend_id = Products.vend_id;
동등 조인과 결과가 같다.
Oracle에서는 동등조인(Oracle JOIN)과 내부조인(ANSI JOIN) 둘 다 허용한다.
여러 개의 테이블 조인
SELECT prod_name, prod_price, vend_name, quantity
FROM Vendors, Products, OrderItems
WHERE Vendors.vend_id = Products.vend_id
AND OrderItems.prod_id = Products.prod_id
AND order_num=20007;
이렇게 할 수 있다.
ANSI JOIN을 사용하면
select customers.cust_email
from orderitems inner join orders
on orderitems.order_num = orders.order_num
inner join customers
on customers.cust_id = orders.cust_id
where orderitems.prod_id = 'BR01';
이런 식으로 작성할 수 있다.
조인할 수 있는 테이블의 수에 제한을 두지는 않지만 많은 자원을 소비하기 때문에 불필요한 테이블을 조인하지 않도록 주의를 기울여야 한다.
'Database > SQL' 카테고리의 다른 글
[코테를 위한 Oracle 정리] 8. 서브쿼리 (0) | 2024.08.04 |
---|---|
[코테를 위한 Oracle 정리] 7. 그룹핑 : GROUP BY, HAVING (0) | 2024.08.03 |
[코테를 위한 Oracle 정리] 6. 그룹 함수를 사용해 데이터 요약하기 (0) | 2024.08.03 |
[코테를 위한 Oracle 정리] 5. 데이터 조작 : 내장 함수 (0) | 2024.08.01 |
[코테를 위한 Oracle 정리] 4. 열 계산 및 연결하기 (0) | 2024.07.31 |