MySQL에서 한 테이블의 열에 적용한 CONCAT() 함수의 출력 결과를, 다른 테이블의 열과 함께 조회할 수 있습니다. 이는 MySQL 조인(JOIN)을 활용하면 간단하게 구현할 수 있습니다.
기본 개념
일반적으로 CONCAT() 함수는 같은 테이블 내의 여러 열을 하나의 문자열로 합치는 데 사용됩니다. 하지만 WHERE 절에서 조인 조건을 지정하면, CONCAT() 함수로 가공한 한 테이블의 값과 다른 테이블의 값을 동시에 가져올 수 있습니다.
예제
예를 들어, 학생의 id, Name(이름), Last_name(성), Address(주소), Subjects(과목) 정보를 담고 있는 'Student' 테이블과, 학생별 id와 코멘트를 담고 있는 'Remarks' 테이블 두 개가 있다고 가정해 보겠습니다.
먼저 Remarks 테이블의 데이터는 다음과 같습니다.
mysql> Select * from remarks; +------+-------------+ | ID | Comment | +------+-------------+ | 1 | Good | | 2 | Excellent | | 15 | Average | | 20 | Good | | 21 | Outstanding | +------+-------------+ 5 rows in set (0.00 sec)
이제 아래 쿼리처럼 CONCAT() 함수와 다른 테이블의 열을 결합할 수 있습니다.
mysql> Select CONCAT(Name,' ' ,Last_Name ), Comment from student s, remarks r -> Where s.id = r.id; +------------------------------+-------------+ | CONCAT(Name,' ' ,Last_Name ) | Comment | +------------------------------+-------------+ | Gaurav Kumar | Good | | Aarav Sharma | Excellent | | Harshit Kumar | Average | | Gaurav Rathore | Good | | Yashraj Singh | Outstanding | +------------------------------+-------------+ 5 rows in set (0.00 sec)
쿼리 동작 방식
위 쿼리에서 두 테이블은 양쪽에 공통으로 존재하는 학생의 'id'를 기준으로 조인됩니다. FROM 절에서 별칭(alias) s와 r을 지정하고, WHERE 절의 s.id = r.id 조건을 통해 두 테이블의 데이터를 연결합니다.
그 결과, Student 테이블의 Name과 Last_name을 CONCAT() 함수로 합친 전체 이름과, Remarks 테이블에서 가져온 해당 학생의 코멘트가 하나의 결과 집합으로 함께 출력됩니다.
참고: 명시적 JOIN 문법 사용하기
위 예제는 암시적(implicit) 조인 방식이며, 가독성을 높이기 위해 INNER JOIN 문법으로도 동일하게 작성할 수 있습니다.
SELECT CONCAT(s.Name, ' ', s.Last_Name) AS Full_Name, r.Comment FROM student s INNER JOIN remarks r ON s.id = r.id;
명시적 JOIN 문법을 사용하면 조인 조건이 코드에서 더 분명하게 드러나므로, 실무에서는 이 방식을 권장합니다.