MySQL 연결 사용
Mysql 연결 사용법
이전 장에서는 테이블의 데이터를 읽는 방법을 배웠는데, 이는 비교적 간단하지만 실제 응용에서는 , 여러 데이터 테이블에서 데이터를 읽어야 하는 경우가 많습니다.
이 장에서는 MySQL의 JOIN을 사용하여 두 개 이상의 테이블에 있는 데이터를 쿼리하는 방법을 소개합니다.
SELECT, UPDATE 및 DELETE 문에서 Mysql의 JOIN을 사용하여 다중 테이블 쿼리를 조인할 수 있습니다.
JOIN은 기능에 따라 크게 다음 세 가지로 구분됩니다.
INNER JOIN(내부 조인 또는 동등 조인): 두 개 가져옵니다. 테이블 필드 일치 관계의 레코드입니다.
LEFT JOIN(왼쪽 조인): 오른쪽 테이블에 일치하는 레코드가 없더라도 왼쪽 테이블의 모든 레코드를 가져옵니다.
RIGHT JOIN(오른쪽 조인): LEFT JOIN과 달리 왼쪽 테이블에 해당하는 일치 레코드가 없더라도 오른쪽 테이블의 모든 레코드를 가져오는 데 사용됩니다.
이 장에서 사용된 데이터베이스 구조와 데이터를 다운로드하세요: php.sql.
명령 프롬프트에서 INNER JOIN 사용
PHP 데이터베이스에는 tcount_tbl과 php_tbl이라는 두 개의 테이블이 있습니다. 두 데이터 테이블의 데이터는 다음과 같습니다.
예
다음 예를 시도해 보세요.
테스트 인스턴스 데이터
mysql> use php; Database changed mysql> SELECT * FROM tcount_tbl; +---------------+--------------+ | php_author | php_count | +---------------+--------------+ | PHP中文网 | 10 | | PHP.CN | 20 | | Google | 22 | +---------------+--------------+ 3 rows in set (0.01 sec) mysql> SELECT * from php_tbl; +-----------+---------------+---------------+-----------------+ | php_id | php_title | php_author | submission_date | +-----------+---------------+---------------+-----------------+ | 1 | 学习 PHP | PHP中文网 | 2017-04-12 | | 2 | 学习 MySQL | PHP中文网 | 2017-04-12 | | 3 | 学习 Java | PHP.CN | 2015-05-01 | | 4 | 学习 Python | PHP.CN | 2016-03-06 | | 5 | 学习 C | PHP | 2017-04-05 | +-----------+---------------+---------------+-----------------+ 5 rows in set (0.01 sec)
다음으로 MySQL의 INNER JOIN(INNER를 생략하고 JOIN을 사용할 수도 있음, 효과는 동일함)을 사용하여 위의 두 테이블을 연결하여 tcount_tbl의 php_tbl 테이블에 있는 모든 php_author 필드에 해당하는 php_count 필드 값을 읽습니다. 테이블:
INNER JOIN
mysql> SELECT a.php_id, a.user_author, b.user_count FROM user_tbl a INNER JOIN tcount_tbl b ON a.user_author = b.user_author; +-------------+-----------------+----------------+ | a.user_id | a.user_author | b.user_count | +-------------+-----------------+----------------+ | 1 | PHP中文网 | 10 | | 2 | PHP中文网 | 10 | | 3 | PHP.CN | 20 | | 4 | PHP.CN | 20 | +-------------+-----------------+----------------+ 4 rows in set (0.00 sec)
위의 SQL 문은 다음과 같습니다.
WHERE 절
mysql> SELECT a.user_id, a.user_author, b.user_count FROM user_tbl a, tcount_tbl b WHERE a.user_author = b.user_author; +-------------+-----------------+----------------+ | a.user_id | a.user_author | b.user_count | +-------------+-----------------+----------------+ | 1 | PHP中文网 | 10 | | 2 | PHP中文网 | 10 | | 3 |PHP.CN | 20 | | 4 | PHP.CN | 20 | +-------------+-----------------+----------------+ 4 rows in set (0.01 sec)
MySQL LEFT JOIN
MySQL 왼쪽 조인은 조인과 다릅니다. MySQL LEFT JOIN은 오른쪽 테이블에 해당 데이터가 없더라도 왼쪽 데이터 테이블의 모든 데이터를 읽습니다.
예
MySQL LEFT JOIN의 적용을 이해하려면 php_tbl을 왼쪽 테이블로, tcount_tbl을 오른쪽 테이블로 사용하여 다음 예를 시도해 보세요.
RIGHT JOIN mysql> SELECT a.user_id, a.user_author, b.user_count FROM user_tbl a RIGHT JOIN tcount_tbl b ON a.user_author = b.user_author; +-------------+-----------------+----------------+ | a.user_id | a.user_author | b.user_count | +-------------+-----------------+----------------+ | 1 | PHP中文网 | 10 | | 2 | PHP中文网 | 10 | | 3 | PHP.CN | 20 | | 4 | PHP.CN | 20 | | NULL | NULL | 22 | +-------------+-----------------+----------------+ 5 rows in set (0.01 sec)
위의 예 RIGHT JOIN이 사용된 경우, 이 명령문은 왼쪽의 php_tbl 테이블에 해당하는 php_author 필드 값이 없더라도 오른쪽의 데이터 테이블 tcount_tbl에서 선택된 모든 필드 데이터를 읽습니다.
MySQL RIGHT JOIN
MySQL RIGHT JOIN은 해당 테이블이 없더라도 올바른 데이터 테이블의 모든 데이터를 읽습니다. 왼쪽 테이블의 데이터.
예
MySQL RIGHT JOIN의 적용을 이해하려면 php_tbl을 왼쪽 테이블로, tcount_tbl을 오른쪽 테이블로 사용하여 다음 예를 시도해 보십시오.
RIGHT JOIN mysql> SELECT a.user_id, a.user_author, b.user_count FROM user_tbl a RIGHT JOIN tcount_tbl b ON a.user_author = b.user_author; +-------------+-----------------+----------------+ | a.user_id | a.user_author | b.user_count | +-------------+-----------------+----------------+ | 1 | PHP中文网 | 10 | | 2 | PHP中文网 | 10 | | 3 |PHP.CN | 20 | | 4 | PHP.CN | 20 | | NULL | NULL | 22 | +-------------+-----------------+----------------+5 rows in set (0.01 sec)
RIGHT JOIN은 위의 예에서 사용된 이 명령문은 왼쪽의 user_tbl 테이블에 해당 user_author 필드 값이 없더라도 오른쪽의 데이터 테이블 tcount_tbl에서 선택된 모든 필드 데이터를 읽습니다.
PHP 스크립트에서 JOIN 사용
PHP에서 mysqli_query() 함수를 사용하여 SQL 문을 실행할 수 있습니다. mysqli_query() 함수에 대한 인수로 위와 동일한 SQL 문을 사용합니다.
다음 예를 시도해 보세요.
header("Content-Type: text/html;charset=utf-8");
$dbhost = 'localhost'; // mysql 서버 호스트 주소
$dbuser = 'root'; // mysql 사용자 이름
$dbpass = 'root'; );
if(! $conn )
{
die('Connection failed: ' . mysqli_error($conn));
}
//한자 깨짐 방지를 위한 인코딩 설정
mysqli_query($conn, "set names utf8");
$sql = 'SELECT a.php_id, a.php_author, b.php_count FROM php_tbl a INNER JOIN tcount_tbl b ON a.php_author = b. php_author';
mysqli_select_db( $conn, 'php' );
$retval = mysqli_query( $conn, $sql );
if(! $retval )
{
die('데이터를 읽을 수 없습니다: ' . mysqli_error($conn));
}
echo '<h2>PHP 중국어 웹사이트 MySQL JOIN test<h2> ';
echo '<table border ="1"><tr><td>튜토리얼 ID</td><td>저자</td><td>로그인 횟수</ td></tr>';
while($row = mysqli_fetch_array($retval, MYSQL_ASSOC))
{
echo "<tr><td> {$row['php_id'] }</td> ".
" "<td>{$row['php_author']} </td> ".
" " ;/td> ".
" "</tr>";
}
echo '</table>';
mysqli_close($conn) >
렌더링:
관련 비디오 튜토리얼 권장 사항: MySQL 연결 개념 및 종류