다음 쿼리문은 식품 유형의 상품과 가전 유형의 상품을 각각 조사하여 하나로 합침
UNION - 조회한 다수의 SELECT문을 하나로 합치고 싶을때, 중복되는 레코드는 제거
data1 data2 UNION data1 data2 >>> data1 data2
두 집합에 공통적으로 존재하는 레코드가 있다면 하나로 합침
UNION ALL - 조회한 다수의 SELECT문을 하나로 합치고 싶을때, 중복 제거 안함
data1 data2 UNION ALL data1 data2 >>> data1 data2 data1 data2
UNION을 여러번 사용해서 세개 이상의 결과셋에 대한 합집합도 만들 수 있음, 다음은 회원의 이름, 직원의 이름, 종업원의 이름을 모두 합해본것
UNION 은 합집합을 구하는데 비해 INTERSECT 연산자는 교집합을 구함
다음 쿼리는 영업부 직원 집합과 여직원 집합의 교집합을 구함
MINUS 연산자는 차집합을 구함, MINUS 지원 안함 EXCEPT 를 지원
차집합은 앞쪽 집합의 원소에서 뒤쪽 집합의 원소를 제외한 집합
다음 쿼리문은 영업부에서 여직원을 뺀 집합
차집합은 교환법칙이 성립 안됨 결과셋의 순서에 따라 집합이 달라짐
다음 쿼리는 반대로 여직원 집합에서 영업부를 뺌
조인(JOIN)은 여러개의 테이블에서 조건에 맞는 데이터를 조회하는 방법, 구문이 길고 처리시간이 오래걸려 정확성과 효율성을 항상 고려해야 함
단순조인은 두개 이상의 테이블을 특별한 조건없이 논리곱(AND)으로 조합
FROM 절에 출력대상 테이블의 목록을 콤마로 구분하여 나열
tCar, tMaker 안에서 tCar.maker = tMaker.maker 같은값을 출력
다음 쿼리는 모두 같은 값을 나타냄
SELECT car, price, tCar.maker, factory FROM tCar, tMaker WHERE tCar.maker = tMaker.maker;
SELECT tCar.car, tCar.price, tMaker.maker, tMaker.factory FROM tCar, tMaker WHERE tCar.maker = tMaker.maker;
tCar.car는 tCar테이블 안에 car필드
별명 - 테이블에 짧은 별명을 붙이고 필드명 앞에는 별명을 씀
내부조인
각 테이블의 필드값을 비교하여 조건에 맞는 레코드만 선택적으로 가져오는 명령
FROM 절의 INNER JOIN 양쪽에 조인할 테이블명을 지정하고 on 다음에 조인 조건을 작성
기본형식
SELECT 필드 FROM A [INNER] JOIN B ON 조건;
FROM 절에서 tCar 와 tMaker 를 조인하고 ON 절에 두 테이블의 회사명이 같다는 조건을 지정
단순 조인한 결과에서 ON 조건에 맞는 레코드만 나타남
단순 조인은 조건절을 생략하고 논리곱을 볼수 있지만 내부조인은 ON 절이 필수
조건 없이 출력한 논리곱은 중간 과정일 뿐 별 실용성은 없음
그래서 내부 조인은 ON을 생략하면 에러처리
위 예의 ON C.maker = M.maker 조건절을 보면 제조사와 자동차를 연결하는 외래키가 maker로 이름과 타입이 같음
이 경우 USING 를 사용하면 간결
외부조인
왼쪽 조인 , 오른쪽 조인
조인조건에 맞는 레코드는 당연히 출력하고 이 외에 왼쪽 or 오른쪽테이블인 tCar의 모든 레코드 출력
조건에 맞는 것은 물론 맞지 않는 것도 모두 출력 이때 해당 하지 않는 조건값은 NULL 출력, LEFT는 왼쪽 기준, RIGTH 오른쪽 기준
SELECT C.car, C.price, M.maker, M.factory FROM tCar C RIGHT OUTER JOIN tMaker M ON C.maker = M.maker;