데이터베이스에서 두 개 이상의 테이블을 연결하여 하나의 결과 집합으로 합치는 방법을 말한다. 데이터베이스에서 정보는 여러 테이블에 분산되어 저장될 수 있으며, 이러한 경우에 JOIN을 사용하여 필요한 정보를 검색하고 결합할 수 있다.
- 예시
SELECT I.INGREDIENT_TYPE, SUM(F.TOTAL_ORDER) TOTAL_ORDER
FROM ICECREAM_INFO AS I, FIRST_HALF AS F
WHERE I.FLAVOR = F.FLAVOR
GROUP BY I.INGREDIENT_TYPE
ORDER BY TOTAL_ORDER ASC
WHERE절을 통해서 JOIN이 가능하다.
SELECT B.BOOK_ID, A.AUTHOR_NAME, DATE_FORMAT(B.PUBLISHED_DATE, '%Y-%m-%d') AS PUBLISHED_DATE
FROM BOOK AS B JOIN AUTHOR AS A ON B.AUTHOR_ID = A.AUTHOR_ID
WHERE B.CATEGORY LIKE '경제'
ORDER BY PUBLISHED_DATE
= JOIN, CROSS JOIN 모두 같은 의미이다.
A테이블과 B테이블의 일치하는 내용만 출력한다.
A TABLE JOIN B TABLE ON 조건 형식으로 작성
- 예시
SELECT B.BOOK_ID, A.AUTHOR_NAME
FROM BOOK AS B JOIN AUTHOR AS A
ON B.AUTHOR_ID = A.AUTHOR_ID
왼쪽 테이블(첫 번째 테이블)의 모든 레코드를 포함하고, 오른쪽 테이블(두 번째 테이블)과 공통 열의 값이 일치하는 경우 오른쪽 테이블의 해당 레코드를 추가하여 결과를 형성한다.
- 예시
SELECT CUSTOMERS.CUSTOMERID, CUSTOMERS.CUSTOMERNAME, CUSTOMERS.COUNTRY, ORDERS.ORDERID, ORDERS.ORDERDATE
FROM CUSTOMERS
LEFT JOIN ORDERS ON CUSTOMERS.CUSTOMERID = ORDERS.CUSTOMERID;
왼쪽 테이블과 오른쪽 테이블의 역할이 LEFT JOIN과 반대로 됩니다. 오른쪽 테이블의 모든 레코드를 포함하고, 왼쪽 테이블과 공통 열의 값이 일치하는 경우 왼쪽 테이블의 해당 레코드를 추가하여 결과를 형성합니다.
- 예시
SELECT CUSTOMERS.CUSTOMERID, CUSTOMERS.CUSTOMERNAME, CUSTOMERS.COUNTRY, ORDERS.ORDERID, ORDERS.ORDERDATE
FROM ORDERS
RIGHT JOIN CUSTOMERS ON ORDERS.CUSTOMERID = CUSTOMERS.CUSTOMERID;
두 테이블 간에 공통 열의 값과 상관없이 모든 레코드를 포함하여 결과를 형성합니다. 만약 공통 열의 값이 일치하지 않는 경우에는 NULL 값을 가진 레코드가 생성된다.
하지만 성능상 거의 사용되지 않는다.
여러 SELECT 문의 결과에서 중복된 레코드를 제거하여 하나의 결과 집합으로 합친다. 중복된 레코드는 제거되고, 결과 집합에는 고유한 레코드만 포함된다.
- 예시
SELECT 컬럼1, 컬럼2 FROM 테이블1
UNION
SELECT 컬럼1, 컬럼2 FROM 테이블2;
중복을 제거하지 않고 두 개 이상의 SELECT문의 결과를 모두 합친다. 중복된 레코드도 모두 결과에 포함된다.
- 예시
SELECT 컬럼1, 컬럼2 FROM 테이블1
UNION ALL
SELECT 컬럼1, 컬럼2 FROM 테이블2;
데이터베이스의 테이블을 자기 자신과 조인하는 것이다.
하나의 테이블을 두 개의 별칭을 사용하여 조인하는 것이다. 테이블 내에 있는 관련 정보를 검색하거나 비교할 때 사용한다.
- 예시
SELECT E1.EMPLOYEENAME AS EMPLOYEE, E2.EMPLOYEENAME AS MANAGER
FROM EMPLOYEES E1
LEFT JOIN EMPLOYEES E2 ON E1.MANAGERID = E2.EMPLOYEEID;