English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
이전 장에서는 하나의 테이블에서 데이터를 읽는 방법을 배웠습니다. 이는 상대적으로 간단하지만, 실제 응용 프로그램에서는 여러 데이터 테이블에서 데이터를 읽는 것이 자주 필요합니다。
이 장에서는 MySQL의 JOIN을 사용하여 두 개나 많은 테이블에서 데이터를 쿼리하는 방법을 소개할 것입니다。
SELECT, UPDATE 및 DELETE 문에서 MySQL의 JOIN을 사용하여 다중 테이블을 조인할 수 있습니다。
JOIN은 기능에 따라 다음과 같은 세 가지 주요 카테고리로 나뉩니다:
INNER JOIN(내 조인, 또는 등가 조인):두 테이블의 필드 매칭 관계를 가진 기록을 가져옵니다。
LEFT JOIN(왼쪽 조인):왼쪽 테이블의 모든 기록을 가져옵니다. 오른쪽 테이블에 해당하는 기록이 없더라도。
RIGHT JOIN(오른쪽 조인): LEFT JOIN과 반대로, 왼쪽 테이블에 해당하는 기록이 없더라도 오른쪽 테이블의 모든 기록을 가져옵니다。
이 장에서 사용하는 데이터베이스 구조 및 데이터 다운로드는 다음과 같습니다:w3codebox-mysql-join-test.sql。
우리는 w3codebox 데이터베이스에는 두 개의 테이블이 있습니다 tcount_tbl과 w3codebox_tbl. 두 개의 데이터 테이블 데이터는 다음과 같습니다:
다음 예제를 시도해 보세요:
mysql> use w3codebox; Database changed mysql> SELECT * FROM tcount_tbl; +---------------+--------------+ | w3codebox_author | w3codebox_count | +---------------+--------------+ | 기본 튜토리얼 웹사이트 | 10 | | oldtoolbag.com | 20 | | Google | 22 | +---------------+--------------+ 3 rows in set (0.01 sec) mysql> SELECT * from w3codebox_tbl; +-----------+---------------+---------------+-----------------+ | w3codebox_id | w3codebox_title | w3codebox_author | submission_date | +-----------+---------------+---------------+-----------------+ | 1 | PHP 학습 | 기본 튜토리얼 웹사이트 | 2017-04-12 | | 2 | MySQL 학습 | 기본 튜토리얼 웹사이트 | 2017-04-12 | | 3 | Java 학습 | oldtoolbag.com | 2015-05-01 | | 4 | Python 학습 | oldtoolbag.com | 2016-03-06 | | 5 | C 학습 | FK | 2017-04-05 | +-----------+---------------+---------------+-----------------+ 5 rows in set (0.01 sec)
그제서야 MySQL의INNER JOIN(INNER를 생략할 수도 있으며, 결과는 같습니다)위 두 테이블을 연결하여 w를 읽기 위해 사용합니다3codebox_tbl 테이블에 모든 w3codebox_author 필드가 tcount_tbl 테이블에 해당하는 w3codebox_count 필드 값:
mysql> SELECT a.w3codebox_id, a.w3codebox_author, b.w3codebox_count FROM w3codebox_tbl a INNER JOIN tcount_tbl b ON a.w3codebox_author = b.w3codebox_author; +-------------+-----------------+----------------+ | a.w3codebox_id | a.w3codebox_author | b.w3codebox_count | +-------------+-----------------+----------------+ | 1 | 기본 튜토리얼 웹 | 10 | | 2 | 기본 튜토리얼 웹 | 10 | | 3 | oldtoolbag.com | 20 | NULL | | 4 | oldtoolbag.com | 20 | NULL | +-------------+-----------------+----------------+ 4 rows in set (0.00 sec)
위 SQL 문장은 다음과 동일합니다:
mysql> SELECT a.w3codebox_id, a.w3codebox_author, b.w3codebox_count FROM w3codebox_tbl a, tcount_tbl b WHERE a.w3codebox_author = b.w3codebox_author; +-------------+-----------------+----------------+ | a.w3codebox_id | a.w3codebox_author | b.w3codebox_count | +-------------+-----------------+----------------+ | 1 | 기본 튜토리얼 웹 | 10 | | 2 | 기본 튜토리얼 웹 | 10 | | 3 | oldtoolbag.com | 20 | NULL | | 4 | oldtoolbag.com | 20 | NULL | +-------------+-----------------+----------------+ 4 rows in set (0.01 sec)
MySQL LEFT JOIN과 JOIN은 다릅니다. MySQL LEFT JOIN은 오른쪽 테이블에 데이터가 없더라도 왼쪽 데이터 테이블의 모든 데이터를 읽습니다.
다음 예제를 시도해 보세요. w3codebox_tbl 왼쪽 테이블,tcount_tbl 오른쪽 테이블을 위한 것입니다. MySQL LEFT JOIN의 사용을 이해해 보세요:
mysql> SELECT a.w3codebox_id, a.w3codebox_author, b.w3codebox_count FROM w3codebox_tbl a LEFT JOIN tcount_tbl b ON a.w3codebox_author = b.w3codebox_author; +-------------+-----------------+----------------+ | a.w3codebox_id | a.w3codebox_author | b.w3codebox_count | +-------------+-----------------+----------------+ | 1 | 기본 튜토리얼 웹 | 10 | | 2 | 기본 튜토리얼 웹 | 10 | | 3 | oldtoolbag.com | 20 | NULL | | 4 | oldtoolbag.com | 20 | NULL | | 5 | FK | NULL | +-------------+-----------------+----------------+ 5 rows in set (0.01 sec)
위 예제에서 LEFT JOIN이 사용되었습니다. 이 문장은 왼쪽 데이터 테이블 w를 읽습니다;3codebox_tbl의 모든 선택된 필드 데이터를 읽습니다. 오른쪽 테이블 tcount_tbl에 해당하는 w가 없더라도;3codebox_author 필드 값.
MySQL RIGHT JOIN은 왼쪽 테이블에 데이터가 없더라도 오른쪽 데이터 테이블의 모든 데이터를 읽습니다.
다음 예제를 시도해 보세요. w3codebox_tbl 왼쪽 테이블,tcount_tbl 오른쪽 테이블, MySQL RIGHT JOIN의 사용을 이해하세요:
mysql> SELECT a.w3codebox_id, a.w3codebox_author, b.w3codebox_count FROM w3codebox_tbl a RIGHT JOIN tcount_tbl b ON a.w3codebox_author = b.w3codebox_author; +-------------+-----------------+----------------+ | a.w3codebox_id | a.w3codebox_author | b.w3codebox_count | +-------------+-----------------+----------------+ | 1 | 기본 튜토리얼 웹 | 10 | | 2 | 기본 튜토리얼 웹 | 10 | | 3 | oldtoolbag.com | 20 | NULL | | 4 | oldtoolbag.com | 20 | NULL | | NULL | NULL | NULL | 22 | +-------------+-----------------+----------------+ 5 rows in set (0.01 sec)
위 예제에서 RIGHT JOIN을 사용했습니다. 이 문장은 왼쪽 테이블 w에서 선택된 모든 필드 데이터를 읽습니다. 그리고 왼쪽 테이블 w에 해당하는 데이터가 없더라도.3codebox_tbl에 해당하는 w가 없습니다.3codebox_author 필드 값.
PHP 스크립트에서 mysqli_query() 함수를 사용하여 SQL 문을 실행하려면, 위의 동일한 SQL 문을 mysqli_query() 함수의 매개변수로 사용할 수 있습니다.
다음 예제를 시도해 보세요:
<?php $dbhost = 'localhost'; // MySQL 서버 호스트 주소 $dbuser = 'root'; // MySQL 사용자 이름 $dbpass = '123456'; // MySQL 사용자 이름 비밀번호 $conn = mysqli_connect($dbhost, $dbuser, $dbpass); if(! $conn) { die('연결 실패: ' . mysqli_error($conn)); } // 编码 설정, 중국어 혼란 방지 mysqli_query($conn, "set names utf8'); $sql = 'SELECT a.w3codebox_id, a.w3codebox_author, b.w3codebox_count FROM w3codebox_tbl a INNER JOIN tcount_tbl b ON a.w3codebox_author = b.w3codebox_author'; mysqli_select_db( $conn, 'w' )}3codebox' ); $retval = mysqli_query( $conn, $sql ); if(! $retval ) { die('데이터 읽기 실패: ' . mysqli_error($conn)); } echo '<h2">기본 가이드 웹 MySQL JOIN 테스트<h2">; echo '<table border="1><tr><td>가이드 ID</td><td>저자</td><td>로그인 횟수</td></tr>'; while($row = mysqli_fetch_array($retval, MYSQLI_ASSOC)) { echo "<tr><td> "{$row['w3codebox_id']}</td> ". "<td>{$row['w3codebox_author']} </td> ". "<td>{$row['w3codebox_count'} </td> ". "</tr>"; } echo '</table>'; mysqli_close($conn); ?>
출력 결과는 다음과 같습니다: