LEFT 조인은 왼쪽의 테이블의 데이터를 기준으로 오른쪽의 테이블을 결합합니다. 출력 결과는 왼쪽의 데이터를 모두 출력하고, 일치하는 오른쪽 데이터를 추가합니다.
| 쿼리 문법 |
SELECT 컬럼1, 컬럼2, 컬럼3, … from 테이블1
LEFT JOIN
테이블2 ON 테이블1.컬럼 =테이블2.컬럼
20.3.1 쿼리 실습
LEFT 조인 명령을 통하여 일치하는 데이터를 출력해 보도록 하겠습니다.
| 예제 쿼리 |
SELECT a.FirstName, a.LastName, b.code, b.email from members AS a LEFT JOIN orders1 as b ON a.email=b.email;
| 콘솔 실습 화면 |
mysql> SELECT a.FirstName, a.LastName, b.code, b.email from members AS a LEFT JOIN orders1 as b ON a.email=b.email;
+-----------+----------+-------+-------------------+
| FirstName | LastName | code | email |
+-----------+----------+-------+-------------------+
| lee | hojin | O_001 | hojin@jinyphp.com |
| lee | hojin | O_002 | hojin@jinyphp.com |
| jung | eric | O_003 | eric@jinyphp.com |
| NULL | jiny | NULL | NULL |
| kim | james | NULL | NULL |
+-----------+----------+-------+-------------------+
5 rows in set (0.01 sec)
위의 예의 출력을 보면 왼쪽의 테이블을 중심으로 데이터가 출력됩니다. 또한 join된 오 른쪽의 데이터도 출력됩니다. 서로 일치하지 않는 데이터는 NULL로 표기됩니다.
20.3.2 PHP 실습
PHP 코드를 통하여 LEFT 조인 실습을 해보도록 하겠습니다.
| PHP 예제 | mysql.class.php 파일에 메서드 예제를 추가합니다.
// LEFT조인을 처리합니다.
public function leftJoin($tbname1, $tbname2, $onWhere, $fields)
{
$queryString = "SELECT ";
// 컬럼필드 선택여부를 지정
if ($fields) {
$queryString .= $fields." ";
} else {
$queryString .= "* ";
}
$queryString .= "from $tbname1 LEFT JOIN $tbname2 ON $onWhere";
if ($result = mysqli_query($this->dbcon, $queryString)) {
$this->msgEcho("쿼리성공] ".$queryString);
$rowss = "";
$row_cnt = mysqli_num_rows($result);
for ($i=0; $i<$row_cnt; $i++) {
$rowss[$i] = mysqli_fetch_object($result);
}
$result->free();
return $rowss;
} else {
$this->msgEcho("Error] ".$queryString);
}
}
예제 파일 | join-02.php
<?php
include "dbinfo.php";
include "mysql.class.php";
// ++ Mysqli DB 연결.
$db = new JinyMysql();
if ($rowss = $db->leftJoin("members","orders","members.email=orders.email")) {
echo "tables fields = ". count($rowss) . "<br>";
for ($i=0;$i<count($rowss);$i++) {
echo $i."=";
print_r($rowss[$i]);
echo "<br>";
}
}
?>
화면 출력
mysql connected!
쿼리성공] SELECT * from members LEFT JOIN orders ON members.email=orders.email
tables fields = 7
0=stdClass Object ( [Id] => 1 [LastName] => hojin [FirstName] => lee [Address] => shinchon [City] => seoul [Country] => Korea [manager] => infohojin [email] => hojin@jinyphp.com [code] => O_001 )
1=stdClass Object ( [Id] => 2 [LastName] => hojin [FirstName] => lee [Address] => shinchon [City] => seoul [Country] => Korea [manager] => infohojin [email] => hojin@jinyphp.com [code] => O_002 )
2=stdClass Object ( [Id] => [LastName] => lee [FirstName] => hojin [Address] => [City] => [Country] => Korea [manager] => infohojin [email] => [code] => )
3=stdClass Object ( [Id] => [LastName] => james [FirstName] => kim [Address] => youngdun-po [City] => seoul [Country] => Korea [manager] => info [email] => [code] => )
4=stdClass Object ( [Id] => [LastName] => 1234 [FirstName] => jiny [Address] => [City] => [Country] => Korea [manager] => [email] => [code] => )
5=stdClass Object ( [Id] => [LastName] => 1234 [FirstName] => jiny [Address] => [City] => [Country] => Korea [manager] => [email] => [code] => )
6=stdClass Object ( [Id] => [LastName] => 123400 [FirstName] => jiny [Address] => [City] => [Country] => Korea [manager] => [email] => [code] => )