07장 복수의 테이블 다루기 UNION으로 합집합 구하기 UNION으로 합집합 구하기 SELECT * FROM sample71_a;+ | a | + | 1 | | 2 | | 3 | + 3 rows in set (0.00 sec)
SELECT * FROM sample71_b;+ | b | + | 2 | | 10 | | 11 | + 3 rows in set (0.00 sec)
두개의 SELECT 명령을 UNION해서 합집합 구하기 SELECT * FROM sample71_aUNION SELECT * FROM sample71_b;
결과
+ | a | + | 1 | | 2 | | 3 | | 10 | | 11 | + 5 rows in set (0.00 sec)
UNION 연산을 하기 위해서는 SELECT 명령의 열의 내용이 서로 일치해야 한다.
UNION을 사용할 경우 각 SECECT명령에 ORDER BY를 지정해 정렬할 수는 없다. 마지막 SELECT 명령에만 지정하도록 한다.
두개의 SELECT 명령에 UNION ALL을 적용해 합집합 구하기 SELECT * FROM sample71_aUNION ALL SELECT * FROM sample71_b;
결과
+ | a | + | 1 | | 2 | | 3 | | 2 | | 10 | | 11 | + 6 rows in set (0.00 sec)
테이블 결합 교차 결합 FROM 구로 곱집합 구하기
FROM구에 테이블 두개를 지정해 곱집합 구하기
SELECT * FROM sample72_x, sample72_y;
결과
+ | x | y | + | A | 1 | | B | 1 | | C | 1 | | A | 2 | | B | 2 | | C | 2 | | A | 3 | | B | 3 | | C | 3 | + 9 rows in set (0.00 sec)
내부 결합 상품 테이블과 재고수 테이블을 교차결합하기
결과
+ | 상품코드 | 상품명 | 메이커명 | 가격 | 상품분류 | 상품코드 | 입고일 | 재고수 | + | 0001 | 상품1 | 메이커1 | 100 | 식료품 | 0001 | 2014 -01 -03 | 200 | | 0002 | 상품2 | 메이커2 | 200 | 식료품 | 0001 | 2014 -01 -03 | 200 | | 0003 | 상품3 | 메이커3 | 1980 | 생활용품 | 0001 | 2014 -01 -03 | 200 | | 0001 | 상품1 | 메이커1 | 100 | 식료품 | 0002 | 2014 -02 -10 | 500 | | 0002 | 상품2 | 메이커2 | 200 | 식료품 | 0002 | 2014 -02 -10 | 500 | | 0003 | 상품3 | 메이커3 | 1980 | 생활용품 | 0002 | 2014 -02 -10 | 500 | | 0001 | 상품1 | 메이커1 | 100 | 식료품 | 0003 | 2014 -02 -14 | 10 | | 0002 | 상품2 | 메이커2 | 200 | 식료품 | 0003 | 2014 -02 -14 | 10 | | 0003 | 상품3 | 메이커3 | 1980 | 생활용품 | 0003 | 2014 -02 -14 | 10 | + 9 rows in set (0.00 sec)
상품코드가 같은 행을 검색하기 SELECT * FROM 상품, 재고수 WHERE 상품. 상품코드 = 재고수.상품코드;
결과
+ | 상품코드 | 상품명 | 메이커명 | 가격 | 상품분류 | 상품코드 | 입고일 | 재고수 | + | 0001 | 상품1 | 메이커1 | 100 | 식료품 | 0001 | 2014 -01 -03 | 200 | | 0002 | 상품2 | 메이커2 | 200 | 식료품 | 0002 | 2014 -02 -10 | 500 | | 0003 | 상품3 | 메이커3 | 1980 | 생활용품 | 0003 | 2014 -02 -14 | 10 | +
검색할 행과 반환할 열 제한하기 SELECT 상품.상품명, 재고수.재고수 FROM 상품, 재고수WHERE 상품.상품코드 = 재고수.상품코드AND 상품.상품분류 = '식료품' ;
결과
+ | 상품명 | 재고수 | + | 상품1 | 200 | | 상품2 | 500 | + 2 rows in set (0.00 sec)
내부결합을 활용한 데이터 관리 상품 테이블과 메이커 테이블을 내부 결합하기 SELECT S.상품명, M.메이커명FROM 상품2 S INNER JOIN 메이커 MON S.메이커코드 = M.메이커코드;
결과
+ | 상품명 | 메이커명 | + | 상품1 | 메이커1 | | 상품2 | 메이커1 | | 상품3 | 메이커2 | + 3 rows in set (0.01 sec)
상품 테이블을 자기결합 하기 SELECT S1.상품명, S2.상품명FROM 상품 S1 INNER JOIN 상품 S2ON S1.상품코드 = S2.상품코드;
결과
+ | 상품명 | 상품명 | + | 상품1 | 상품1 | | 상품2 | 상품2 | | 상품3 | 상품3 | + 3 rows in set (0.00 sec)
내부결합에서는 상품코드가 0009인 상품이 제외된다. SELECT 상품3. 상품명, 재고수.재고수FROM 상품3 INNER JOIN 재고수ON 상품3. 상품코드 = 재고수.상품코드WHERE 상품3. 상품분류= '식료품' ;
결과
+ | 상품명 | 재고수 | + | 상품1 | 200 | | 상품2 | 500 | + 2 rows in set (0.01 sec)
외부결합으로 상품코드 0009인 상품도 결과에 포함하기 SELECT 상품3. 상품명, 재고수.재고수FROM 상품3 LEFT JOIN 재고수ON 상품3. 상품코드 = 재고수.상품코드WHERE 상품3. 상품분류 = '식료품' ;
결과
+ | 상품명 | 재고수 | + | 상품1 | 200 | | 상품2 | 500 | | 추가상품 | NULL | + 3 rows in set (0.00 sec)