MySQl 조인 사용

이전 장에서 우리는 한 번에 하나의 테이블에서 데이터를 가져 왔습니다. 이것은 간단한 테이크에 충분하지만 대부분의 실제 MySQL 사용에서는 단일 쿼리로 여러 테이블에서 데이터를 가져와야하는 경우가 많습니다.

단일 SQL 쿼리에서 여러 테이블을 사용할 수 있습니다. MySQL에서 조인하는 행위는 두 개 이상의 테이블을 단일 테이블로 분할하는 것을 의미합니다.

SELECT, UPDATE 및 DELETE 문에서 JOINS를 사용하여 MySQL 테이블을 조인 할 수 있습니다. 간단한 MySQL JOIN과 다른 LEFT JOIN의 예도 볼 수 있습니다.

명령 프롬프트에서 조인 사용

두 개의 테이블이 있다고 가정합니다. tcount_tbltutorials_tbl, 튜토리얼에서. 이제 아래 주어진 예를 살펴보십시오.

다음 예-

root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * FROM tcount_tbl;
+-----------------+----------------+
| tutorial_author | tutorial_count |
+-----------------+----------------+
|      mahran     |       20       |     
|      mahnaz     |      NULL      |        
|       Jen       |      NULL      |          
|      Gill       |       20       |          
|    John Poul    |        1       |      
|     Sanjay      |        1       |        
+-----------------+----------------+
6 rows in set (0.01 sec)
mysql> SELECT * from tutorials_tbl;
+-------------+----------------+-----------------+-----------------+
| tutorial_id | tutorial_title | tutorial_author | submission_date |
+-------------+----------------+-----------------+-----------------+
|      1      |  Learn PHP     |     John Poul   |    2007-05-24   |   
|      2      |  Learn MySQL   |      Abdul S    |    2007-05-24   |   
|      3      | JAVA Tutorial  |      Sanjay     |    2007-05-06   |   
+-------------+----------------+-----------------+-----------------+
3 rows in set (0.00 sec)
mysql>

이제이 두 테이블을 조인하는 SQL 쿼리를 작성할 수 있습니다. 이 쿼리는 테이블에서 모든 작성자를 선택합니다.tutorials_tbl 에서 해당하는 수의 자습서를 선택합니다. tcount_tbl.

mysql> SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count
   -> FROM tutorials_tbl a, tcount_tbl b
   -> WHERE a.tutorial_author = b.tutorial_author;
+-------------+-----------------+----------------+
| tutorial_id | tutorial_author | tutorial_count |
+-------------+-----------------+----------------+
|      1      |    John Poul    |        1       |
|      3      |     Sanjay      |        1       |
+-------------+-----------------+----------------+
2 rows in set (0.01 sec)
mysql>

PHP 스크립트에서 조인 사용

PHP 스크립트에서 위에서 언급 한 SQL 쿼리를 사용할 수 있습니다. SQL 쿼리를 PHP 함수로 전달하기 만하면됩니다.mysql_query() 그런 다음 일반적인 방법으로 결과를 가져옵니다.

다음 예-

<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'root';
   $dbpass = 'rootpassword';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);
   
   if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }

   $sql = 'SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count
      FROM tutorials_tbl a, tcount_tbl b
      WHERE a.tutorial_author = b.tutorial_author';

   mysql_select_db('TUTORIALS');
   $retval = mysql_query( $sql, $conn );

   if(! $retval ) {
      die('Could not get data: ' . mysql_error());
   }

   while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
      echo "Author:{$row['tutorial_author']}  <br> ".
         "Count: {$row['tutorial_count']} <br> ".
         "Tutorial ID: {$row['tutorial_id']} <br> ".
         "--------------------------------<br>";
   } 
   echo "Fetched data successfully\n";
   mysql_close($conn);
?>

MySQL LEFT JOIN

MySQL 레프트 조인은 단순 조인과 다릅니다. MySQL LEFT JOIN은 왼쪽에있는 테이블을 추가로 고려합니다.

내가 할 경우 LEFT JOIN, 동일한 방식으로 일치하는 모든 레코드를 가져오고 조인의 왼쪽 테이블에서 일치하지 않는 각 레코드에 대한 추가 레코드를 얻습니다. 따라서 모든 AUTHOR가 멘션을 얻도록 보장합니다.

LEFT JOIN을 이해하려면 다음 예제를 시도하십시오.

root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count
   -> FROM tutorials_tbl a LEFT JOIN tcount_tbl b
   -> ON a.tutorial_author = b.tutorial_author;
+-------------+-----------------+----------------+
| tutorial_id | tutorial_author | tutorial_count |
+-------------+-----------------+----------------+
|      1      |    John Poul    |       1        |
|      2      |     Abdul S     |      NULL      |
|      3      |     Sanjay      |       1        |
+-------------+-----------------+----------------+
3 rows in set (0.02 sec)

JOINS에 익숙해 지려면 더 많은 연습이 필요합니다. 이것은 MySQL / SQL에서 약간 복잡한 개념이며 실제 예제를 수행하는 동안 더 명확해질 것입니다.