CLASS web

MySQL

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

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

smart DB에서 연습하겠습니다.

smart 데이터베이스 선택

USE smart;

DROP TABLE문을 사용해 smart에 있는 모든 테이블을 삭제합니다.

DROP TABLE mydevices;
DROP TABLE mystudents;

member테이블을 생성합니다.

CREATE TABLE `member` ( `memberID` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(10) DEFAULT NULL, `gender` enum('m','w','n') DEFAULT 'n', `job` varchar(20) DEFAULT NULL, `area` varchar(15) DEFAULT NULL, `email` varchar(50) DEFAULT NULL, `rank` int(11) DEFAULT NULL, PRIMARY KEY (`memberID`) ) ENGINE=InnoDB CHARSET=utf8;
MySQL JOIN

연습용으로 사용할 데이터를 입력합니다.

INSERT INTO member(name,gender,job,area,email,rank) VALUES ('snow white','w','princess','usa','snow@pinkcoding.com',7),('minnie','w','disney character','usa','minnie@pinkcoding.com',5),('rapunzel','w','princess','usa','rapunzel@pinkcoding.com',6),('Yi Sun sin','m','general officer','korea','korea@pinkcoding.com',4);
MySQL JOIN

자 그럼 계속 이어가겠습니다.

MySQL JOIN

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

어떤 의미인가 싶죠?

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

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

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

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

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

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

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

MySQL JOIN

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

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

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

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

먼저, smart를 선택합니다.

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

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;
MySQL JOIN

member 테이블의 memberID필드값과 address 테이블의 memberID필드값은 서로 같은 회원값을 갖습니다.

즉 minnie의 주소를 여러개 등록하기 위해 memberID의 번호인 2를 address테이블의 memberID에 넣어 주소를 추가합니다.

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

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

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

JOIN문 사용하기

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

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

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

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

MySQL JOIN

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

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

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

그러면 다음과 같습니다.

SELECT * FROM member m JOIN address a ON(m.memberID = a.memberID);

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

MySQL JOIN

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

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

member테이블의 앨리어스는 m이고 address테이블의 앨리어스는 a입니다.

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

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

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

SELECT m.name, a.address FROM member m JOIN address a ON(m.memberID = a.memberID);
MySQL JOIN

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

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

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

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

SELECT m.name, a.address FROM member m INNER JOIN address a ON(m.memberID = a.memberID);

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





댓글 0개

정렬기준

PinkCoding

PinkCoding

X

PinkCoding

Web Scratch Pad

X

loading

            
            
        

컨텐츠로 돌아가기