MySQL - join, union, sub-query
#
CREATE TABLE Reservation(ID INT, Name VARCHAR(30), ReserveDate DATE, RoomNum INT);
CREATE TABLE Customer (ID INT, Name VARCHAR(30), Age INT, Address VARCHAR(20));
INSERT INTO Reservation(ID, Name, ReserveDate, RoomNum) VALUES(1, '홍길동', '2016-01-05', 2014);
INSERT INTO Reservation(ID, Name, ReserveDate, RoomNum) VALUES(2, '임꺽정', '2016-02-12', 918);
INSERT INTO Reservation(ID, Name, ReserveDate, RoomNum) VALUES(3, '장길산', '2016-01-16', 1208);
INSERT INTO Reservation(ID, Name, ReserveDate, RoomNum) VALUES(4, '홍길동', '2016-03-17', 504);
INSERT INTO Customer (ID, Name, Age, Address) VALUES (1, '홍길동', 17, '서울');
INSERT INTO Customer (ID, Name, Age, Address) VALUES (2, '임꺽정', 11, '인천');
INSERT INTO Customer (ID, Name, Age, Address) VALUES (3, '장길산', 13, '서울');
INSERT INTO Customer (ID, Name, Age, Address) VALUES (4, '전우치', 17, '수원');
위 스키마를 이용합니다.
reservation과 customer의 교집합(intersection) 부분이 결과로 나타납니다. 결과표에서는 중복되는 경우 중복되는 수만큼 매치되어 결과표가 나옵니다.
정렬은 join 된 테이블에 의해 정렬이 됩니다. 옵션으로 left join과 right join 이 있습니다.
left와 right 순서입니다. 정렬은 위치를 정한 대로 정렬이 되고, 정한 위치의 정보는 모두 포함한 상태에서 반대 위치 테이블과 intersection 되는 부분을 매치시킵니다. tcp school의 그림을 참고하면 더욱 이해하기 쉽습니다. http://tcpschool.com/mysql/mysql_multipleTable_join
코딩교육 티씨피스쿨
4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등
tcpschool.com
#
select에서 같은 필드명을 가지는 부분만 union 하였습니다. 겹치는 부분은 하나의 데이터로 나오고 첫 번째 select 구문에 걸리는 테이블부터 정렬되어 나옵니다. 그리고 필드 개수가 달라질 경우 에러가 발생합니다.
union all 옵션이 있습니다. 해당 옵션 시 겹치는 데이터가 누락되지 않고 모두 나타납니다.
#
select 구문을 이용할 시 reservation이나 customer 테이블의 일부분만 이용할 수 있습니다. 따라서 from 절이나 where 절 모두 이용할 수 있습니다. 위 구문을 보면 reservation 테이블의 일부 데이터를 불러오는데 조건은 customer 테이블을 이용한 것을 볼 수 있습니다.
boolean 연산을 이용하여 join 과 union 또한 구현할 수 있습니다.