2개 테이블에서 데이터 불러오기(INNER JOIN)

앞에서 student테이블의 내용을 전부 삭제했습니다. 다음의 명령뭉늘 입력하여 student에 데이터를 재입력합니다.

study_db 데이터베이스 선택

USE study_db;

student 테이블 초기화

TRUNCATE student;

데이터 입력

INSERT INTO `student` VALUES (20120005,'snow white','w','princess','usa','snow@coreasur.com',7),(20200003,'minnie','w','disney character','usa','minnie@coreasur.com',5),(20200004,'rapunzel','w','princess','usa','rapunzel@coreasur.com',6),(20200008,'Yi Sun sin','m','general officer','korea','korea@coreasur.com',4);

자 그럼 강좌 이어가겠습니다.

MySQL JOIN

JOIN은 2개이상의 테이블에서 데이터를 가져올 때 사용하는 명령문입니다.

어떤 의미인가 싶죠?

예를들어 우리가 쿠팡같은 사이트에서 회원가입을하고 주소지를 여러개 등록할 수 있습니다.

그러면 이런 경우 주소에 대한 정보는 주소 테이블을 따로 만들어서 관리합니다.

아니면 회원테이블에서 주소 정보도 갖는다면 사용할 수 있는 레코드는 1개이므로 주소정보에 관한 여러개의 필드를 넣어서 관리할 것 입니다.

예를들어 address1, address2, address3, address4 이런식으로요.

하지만 이런경우 필드를 여러개 사용하는것보다 주소만 관리하는 테이블을 따로 만듭니다.

테이블을 따로 만들면 여러개의 주소 정보를 입력할 수 있지만 그렇지 않으면 필드 수에 신경써서 작업을 해야하기 때문입니다.

그림으로 표현한다면 다음과 같습니다.

MySQL JOIN

위 이미지에서 회원테이블에 있는 no필드와 주소 테이블에 있는 회원번호 테이블이 일치하는 조건이며

미키가 등록한 주소가 4개가 됩니다.

그럼 우리가 실제로 주소 테이블을 만들어보고 해당 레코드를 가져와 봅시다.

study_db DB에 있는 student 테이블을 회원테이블이라 생각하고 따로 주소 테이블을 만듭니다.

먼저, study_db를 선택합니다.

USE study_db;

그리고 다음의 쿼리문을 실행합니다.

CREATE TABLE `address` (
  `addressID` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `memberID` int(11) UNSIGNED NOT NULL,
  `address` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`addressID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

student 테이블의 num필드값과 address 테이블의 memberID필드값을 일치시킵니다.

그럼 다음의 레코드를 입력합니다.

INSERT INTO address(memberID, address) VALUES(20200003, 'Tokyo hachioji');
INSERT INTO address(memberID, address) VALUES(20200003, 'New York');
INSERT INTO address(memberID, address) VALUES(20200003, 'Disney');
INSERT INTO address(memberID, address) VALUES(20200003, 'Seoul Gangnam');
MySQL JOIN

자 그럼 JOIN을 사용할 준비를 마쳤습니다.

JOIN문 사용하기

JOIN문은 다음과 같이 사용합니다.

SELECT 필드명 FROM 테이블명 앨리어스 JOIN 연결할 테이블명 앨리어스 ON(두 테이블의 연결고리 역할을 할 필드 조건문)

아래의 이미지를 보면 레코드는 회원테이블에서 한개의 레코드가 주소 테이블의 여러 레코드와 연결성을 갖춥니다.

즉, 일대다(1:다수)의 관계를 갖습니다.

MySQL JOIN

먼저 1인 테이블부터 작성을 합니다.

그리고 앨리어스는 해당 테이블의 약자를 의미합니다.

ON의 조건문은 회원 테이블과 주소 테이블의 일치할 레코드를 지정합니다.

그러면 다음과 같습니다.

SELECT * FROM student s JOIN address a ON(s.num = a.memberID);

SELECT 다음에는 *을 사용했으므로 두 테이블의 모든 필드의 값이 나타납니다. 실행해보면

address필드를 보면 address테이블의 address 필드의 값이 나타납니다.

몇개의 필드만 출력해 봅시다.

student의 앨리어스는 s이고 address의 앨리어스는 a입니다.

필드명 앞에 앨리어스와점(.)을 입력하고 필드명을 입력합니다.

예를들어 이름과 주소만 출력한다면

s.name, a.address 입니다. 해봅시다.

SELECT s.name, a.address FROM student s JOIN address a ON(s.num = a.memberID);

JOIN문은 여러개가 있습니다.

INNER JOIN, LEFT JOIN, RIGHT JOIN 그리고 JOIN문만 적으면 기본적으로 INNER JOIN이 적용됩니다.

즉 우리가 사용한 JOIN문은 INNER JOIN문입니다.

그러므로 원래는 다음과 같이 작성해야합니다.

SELECT s.name, a.address FROM student s INNER JOIN address a ON(s.num = a.memberID);

그럼 다음 시작에는 LEFT JOIN, RIGHT JOIN이 무엇인지 알아봅시다.

현재까지의 db 백업 (아래는 현재까지의 작업을 백업한거라서 중도에 들어오신분들을 위한거에요.)

david_db smart study_db