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] => )