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)

img_innerjoin.gif

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에서 선택된 모든 필드 데이터를 읽습니다.

img_leftjoin.gif

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에서 선택된 모든 필드 데이터를 읽습니다.

img_rightjoin.gif

PHP 스크립트에서 JOIN 사용

PHP에서 mysqli_query() 함수를 사용하여 SQL 문을 실행할 수 있습니다. mysqli_query() 함수에 대한 인수로 위와 동일한 SQL 문을 사용합니다.

다음 예를 시도해 보세요.

<?php
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) >

렌더링:

Image 3.jpg

관련 비디오 튜토리얼 권장 사항: MySQL 연결 개념 및 종류