• MySQL매뉴얼
    • MySQL 5.6 매뉴얼
    • MySQL 5.1 매뉴얼
    • MySQL 5.0 매뉴얼
    • MySQL HA 매뉴얼
  • 기술문서
    • Xtrabackup 구성
    • 메모리 사용량 모니터링
  • 라이선스
  • 온라인문의
  • 회사소개
  • → 목 록 (MySQL5.6 한글메뉴얼) [close]
  • 1. MySQL 5.6 새로운 기능
  • 2. MySQL 설치 및 업그레이드
  • 3. MySQL Tutorial
  • 1. 서버에 연결 그리고 서버와 연결 끊기
    2. 쿼리 입력
    3. 데이터베이스 생성 및 사용
    1. 데이터베이스 생성 및 선택
    2. 테이블 만들기
    3. Loading Data into a Table
    4. 테이블에서 정보 검색
    1. 모든 데이터 선택
    2. 특정 행 선택
    3. 특정 컬럼의 선택
    4. 행 정렬
    5. 날짜 계산
    6. NULL 값 조작
    7. Pattern Matching
    8. Counting Rows
    9. 여러 테이블의 사용
    4. 데이터베이스 및 테이블 정보 가져 오기
    5. 배치 모드에서의 MySQL의 사용
    6. 일반적인 쿼리의 예제
    7. Apache와 MySQL 사용
  • 4. MySQL 프로그램
  • 5. MySQL 서버관리
  • 6. 보안
  • 7. 백업 및 복구
  • 8. 최적화
  • 9. Language Structure(언어구조)
  • 10. Character Sets(Globalization)
  • 11. 데이터형(Data Types)
  • 12. 함수와 연산자
  • 13. SQL 문법
  • 14. InnoDB 스토리지 엔진
  • 15. 기타 스토리지 엔진
  • 16. 고가용성 및 확장성
  • 17. 리플리케이션
  • 18. MySQL Cluster
  • 19. 파티셔닝
  • 20. Stored Programs and Views
  • 21. INFORMATION_SCHEMA
  • 22. PERFORMANCE SCHEMA
  • 23. 컨넥터 및 API
  • 24. MySQL 확장
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 28. MySQL 5.7 새로운 기능

3.3.4.9 여러 테이블의 사용

pet 테이블은 애완 동물의 기록을 보유하고 있습니다. 수의사의 진찰이나 출산 등 애완 동물의 생애 이벤트 등 애완 동물에 관한 다른 정보를 기록하려면 별도의 테이블이 필요합니다. 이 테이블은 무엇을하면 좋을까요. 다음 정보를 포함해야합니다.

  • 각 이벤트가 어떤 애완 동물 것인지를 나타 내기위한 애완 동물 이름.

  • 이벤트가 언제 발생했는지를 나타내는 날짜입니다.

  • 이벤트를 설명하는 필드.

  • 이벤트를 분류 할 수있는 경우 이벤트 유형 필드.

이들을 고려하면 event 테이블의 CREATE TABLE 문은 다음과 같이됩니다.

 mysql> CREATE TABLE event (name VARCHAR(20), date DATE,
     -> type VARCHAR(15), remark VARCHAR(255));

pet 테이블의 경우와 마찬가지로 초기 레코드를로드하는 가장 간단한 방법으로 다음의 정보를 기술 한 탭으로 구분 된 텍스트 파일을 만듭니다.

name date type remark
Fluffy 1995-05-15 litter 4 kittens 3 female 1 male
Buffy 1993-06-23 litter 5 puppies 2 female 3 male
Buffy 1994-06-19 litter 3 puppies 3 female
Chirpy 1999-03-21 vet needed beak straightened
Slim 1997-08-03 vet broken rib
Bowser 1991-10-12 kennel
Fang 1991-10-12 kennel
Fang 1998-08-28 birthday Gave him a new chew toy
Claws 1998-03-17 birthday Gave him a new flea collar
Whistler 1998-12-09 birthday First birthday

다음과 같이 레코드를로드합니다.

 mysql> LOAD DATA LOCAL INFILE 'event.txt' INTO TABLE event;

pet 테이블에서 실행 한 쿼리에서 배운 것을 토대로하면, 원칙은 동일하기 때문에 event 테이블의 레코드도 얻을 수 있어야합니다. 그러나 event 테이블만으로는 질문에 회답 할 수없는 경우는 어떤 경우입니까?

각 애완 동물의 출산시 연령을 조사합니다. 전에 두 날짜에서 나이를 계산하는 방법을 배웠습니다. 애완 동물의 출산 일은 event 테이블에 있지만 그 날짜의 나이를 계산하려면 생년월일이 필요하고, 그것은 pet 테이블에 있습니다. 따라서이 쿼리에는 두 테이블이 필요합니다.

 mysql> SELECT pet.name,
    -> (YEAR(date)-YEAR(birth)) - (RIGHT(date,5)<RIGHT(birth,5)) AS age,
    -> remark
    -> FROM pet INNER JOIN event
    ->   ON pet.name = event.name
    -> WHERE event.type = 'litter';
+--------+------+-----------------------------+
| name   | age  | remark                      |
+--------+------+-----------------------------+
| Fluffy |    2 | 4 kittens, 3 female, 1 male |
| Buffy  |    4 | 5 puppies, 2 female, 3 male |
| Buffy  |    5 | 3 puppies, 3 female         |
+--------+------+-----------------------------+

이 쿼리에 주목해야 할 점이 몇 가지 있습니다.

  • 이 쿼리는 두 테이블에서 정보를 검색해야하기 때문에, FROM 절에 두 테이블을 조인하고 있습니다.

  • 여러 테이블의 정보를 결합 (결합) 경우 하나의 테이블 레코드와 다른 테이블의 레코드가 어떻게 대응할지 여부를 지정해야합니다. 두 테이블에 name 컬럼이 있기 때문에 이것은 간단합니다. 이 쿼리는 ON 절을 사용하여 두 테이블의 레코드를 name 값에 따라 대응시키고 있습니다.

    이 쿼리는 INNER JOIN 을 사용하여 테이블을 조인하고 있습니다. INNER JOIN 은 ON 절에 지정된 조건을 모두 테이블이 충족 경우에만 결과 테이블의 행이 허용됩니다. 이 예에서는 pet 테이블의 name 컬럼과 event 테이블의 name 컬럼이 일치 할 필요가 있다고 ON 절에 지정되어 있습니다. 이름이 한 테이블에 있고 다른 하나는 없으면 ON 절 조건이 충족되지 않기 때문에 해당 행은 결과에 표시되지 않습니다.

  • name 컬럼은 두 테이블에 있기 때문에이 열을 참조 할 때 두 테이블의 것인지를 명확하게 표시해야합니다. 그러기 위해서는 열 이름 앞에 테이블 이름을 추가합니다.

두 개의 다른 테이블 않아도 병합을 수행 할 수 있습니다. 테이블의 레코드를 동일한 테이블의 다른 레코드와 비교하는 경우에 테이블을 그 자체에 결합하면 도움이 될 수 있습니다. 예를 들어, 번식 짝짓기 애완 동물을 선택하면 pet 테이블을 그 자체에 결합하여 동종의 암수 한쌍 후보를 생성 할 수 있습니다.

mysql> SELECT p1.name, p1.sex, p2.name, p2.sex, p1.species
    -> FROM pet AS p1 INNER JOIN pet AS p2
    ->   ON p1.species = p2.species AND p1.sex = 'f' AND p2.sex = 'm';
+--------+------+--------+------+---------+
| name   | sex  | name   | sex  | species |
+--------+------+--------+------+---------+
| Fluffy | f    | Claws  | m    | cat     |
| Buffy  | f    | Fang   | m    | dog     |
| Buffy  | f    | Bowser | m    | dog     |
+--------+------+--------+------+---------+

이 쿼리는 테이블 이름의 별칭을 지정하여 컬럼을 참조하여 각 컬럼이 테이블의 두 인스턴스와 관련되는지를 반드시 명확하게하고 있습니다.

서울시 강남구 영동대로 602 6층
TEL: 02-6061-0006  /  E: csr@mysqlkorea.com
주식회사 이노클러스터  등록번호 : 727-86-02261
Copyright © innocluster Co. ltd. all rights reserved