happy cat image

everdevel

僕の戦争 Reiner Transformation

login
알림X
  • 현재 댓글에 대한 답변만 표시합니다.
  • 표시할 댓글 이력이 없거나 로그인해 주세요.

EEOS

에버디벨 책을 학습할 수 있는 클라우드 개발 환경을 제공합니다.
개발환경구축없이 태블릿에서도 개발할 수 있는 책의 예제와 프로젝트
오직 당신을 위한 스토리지, URL, DB, 무제한 트래픽
그리고 웹기반 개발환경을 제공합니다.

더 알아보기
에버디벨이 만든 무료 클라우드 개발환경을 소개합니다.

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

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

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 다음에는 *을 사용했으므로 두 테이블의 모든 필드의 값이 나타납니다. 실행해보면

MySQL JOIN

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

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이 무엇인지 알아봅시다.









봐주셔서 감사합니다. 문의 또는 잘못된 설명은 아래의 댓글에 부탁드립니다.


    
    

강좌로 돌아가기

댓글 0개

정렬기준