MySQl 조인 사용
이전 장에서 우리는 한 번에 하나의 테이블에서 데이터를 가져 왔습니다. 이것은 간단한 테이크에 충분하지만 대부분의 실제 MySQL 사용에서는 단일 쿼리로 여러 테이블에서 데이터를 가져와야하는 경우가 많습니다.
단일 SQL 쿼리에서 여러 테이블을 사용할 수 있습니다. MySQL에서 조인하는 행위는 두 개 이상의 테이블을 단일 테이블로 분할하는 것을 의미합니다.
SELECT, UPDATE 및 DELETE 문에서 JOINS를 사용하여 MySQL 테이블을 조인 할 수 있습니다. 간단한 MySQL JOIN과 다른 LEFT JOIN의 예도 볼 수 있습니다.
명령 프롬프트에서 조인 사용
두 개의 테이블이 있다고 가정합니다. tcount_tbl 과 tutorials_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에서 약간 복잡한 개념이며 실제 예제를 수행하는 동안 더 명확해질 것입니다.