MySQL에서는 하나의 쿼리 안에 세미콜론(;)으로 구분된 여러 개의 SQL 문장을 작성할 수 있습니다. 이를 활용하면 별도의 쿼리를 여러 번 실행하지 않고도, 단일 쿼리만으로 서로 다른 테이블들의 결과를 한꺼번에 얻을 수 있습니다.
기본 원리
MySQL 클라이언트에서는 각 문장을 세미콜론으로 구분하여 한 줄에 나열하기만 하면 됩니다. 그러면 MySQL이 문장들을 순서대로 실행하고, 각 문장의 결과 집합(result set)도 순차적으로 화면에 출력해 줍니다.
실제 예제
예를 들어, 'Student_info' 테이블과 'Student_detail' 테이블에서 데이터를 가져오고 싶다면 아래와 같이 하나의 쿼리에 두 개의 SELECT 문을 세미콜론으로 구분하여 작성할 수 있습니다.
mysql> Select Name, Address from Student_info; Select Studentid, Address from Student_detail; +---------+------------+ | Name | Address | +---------+------------+ | YashPal | Amritsar | | Gaurav | Chandigarh | | Raman | Shimla | | Ram | Jhansi | | Shyam | Chandigarh | | Mohan | Delhi | | Saurabh | NULL | +---------+------------+ 7 rows in set (0.00 sec) +-----------+------------+ | Studentid | Address | +-----------+------------+ | 100 | Delhi | | 101 | Shimla | | 103 | Jaipur | | 104 | Chandigarh | | 105 | Chandigarh | +-----------+------------+ 5 rows in set (0.00 sec)
위 예제에서 볼 수 있듯이, 두 개의 SELECT 문이 하나의 라인에 세미콜론으로 구분되어 입력되었으며, MySQL은 첫 번째 문장인 Student_info 테이블의 조회 결과를 먼저 출력한 뒤, 이어서 두 번째 문장인 Student_detail 테이블의 조회 결과를 순서대로 보여주었습니다.
활용 시 참고 사항
이 방식은 mysql 명령줄 클라이언트처럼 여러 문장 실행을 허용하는 환경에서 동작합니다. 다만 애플리케이션 코드에서 사용하는 경우에는 드라이버나 커넥션 설정에 따라 다중 문장(multi-statement) 실행이 기본적으로 비활성화되어 있을 수 있으므로, 해당 옵션을 활성화해야 합니다. 또한 결과가 여러 개의 결과 집합으로 반환되므로, 이를 처리하는 로직에서 각 결과 집합을 순서대로 읽어야 한다는 점도 유의해야 합니다.