MySQL LIMIT로 단일 행 조회하기
MySQL에서 WHERE 조건에 해당하는 행이 여러 개 있더라도 그중 하나의 행만 가져오고 싶은 경우가 있습니다. 이럴 때 LIMIT 절을 사용하면 간단하게 해결할 수 있습니다. 이 글에서는 테이블 생성부터 데이터 삽입, 그리고 LIMIT을 활용한 단일 행 조회까지 단계별로 살펴보겠습니다.
1. 예제 테이블 생성하기
먼저 기본 키(Primary Key)를 포함한 테이블을 생성합니다. 테이블 생성 쿼리는 다음과 같습니다.
mysql> create table selectWithPrimaryKey
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> Name varchar(20),
-> Age int,
-> Marks int,
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (0.78 sec)2. 샘플 데이터 삽입하기
INSERT 명령어를 사용해 테이블에 레코드를 추가합니다.
mysql> insert into selectWithPrimaryKey(Name,Age,Marks) values('Larry',24,98);
Query OK, 1 row affected (0.15 sec)
mysql> insert into selectWithPrimaryKey(Name,Age,Marks) values('John',23,89);
Query OK, 1 row affected (0.21 sec)
mysql> insert into selectWithPrimaryKey(Name,Age,Marks) values('Mike',21,85);
Query OK, 1 row affected (0.18 sec)
mysql> insert into selectWithPrimaryKey(Name,Age,Marks) values('Sam',26,56);
Query OK, 1 row affected (0.18 sec)
mysql> insert into selectWithPrimaryKey(Name,Age,Marks) values('Carol',21,59);
Query OK, 1 row affected (0.18 sec)
mysql> insert into selectWithPrimaryKey(Name,Age,Marks) values('Bob',20,91);
Query OK, 1 row affected (0.21 sec)
mysql> insert into selectWithPrimaryKey(Name,Age,Marks) values('David',28,93);
Query OK, 1 row affected (0.15 sec)3. 전체 레코드 확인하기
SELECT 문으로 테이블에 저장된 모든 레코드를 조회해 보겠습니다.
mysql> select *from selectWithPrimaryKey;
실행 결과는 다음과 같습니다.
+----+-------+------+-------+ | Id | Name | Age | Marks | +----+-------+------+-------+ | 1 | Larry | 24 | 98 | | 2 | John | 23 | 89 | | 3 | Mike | 21 | 85 | | 4 | Sam | 26 | 56 | | 5 | Carol | 21 | 59 | | 6 | Bob | 20 | 91 | | 7 | David | 28 | 93 | +----+-------+------+-------+ 7 rows in set (0.00 sec)
4. LIMIT으로 단일 행 조회하기
이제 LIMIT을 사용해 조건에 맞는 행 중 하나만 조회하는 쿼리를 살펴보겠습니다.
mysql> select *from selectWithPrimaryKey where Id = 10 or Age = 29 or Marks = 89 limit 1;
위 쿼리는 Id가 10이거나, 나이(Age)가 29이거나, 점수(Marks)가 89인 행을 찾되, 결과를 최대 1개까지만 반환합니다. 실행 결과는 다음과 같습니다.
+----+------+------+-------+ | Id | Name | Age | Marks | +----+------+------+-------+ | 2 | John | 23 | 89 | +----+------+------+-------+ 1 row in set (0.00 sec)
결과 분석 및 정리
조건 중 Id = 10과 Age = 29에 해당하는 행은 없지만, Marks = 89 조건에 일치하는 John의 레코드가 반환된 것을 확인할 수 있습니다. 핵심은 LIMIT 1입니다. 조건에 맞는 행이 여러 개 존재하더라도 첫 번째 행 하나만 결과로 돌려받게 됩니다.
이 방식은 대용량 테이블에서 특정 조건을 만족하는 데이터의 존재 여부만 빠르게 확인하거나, 대표 값 하나만 필요한 경우에 특히 유용합니다. 불필요한 추가 조회를 줄여 쿼리 성능을 개선하는 데도 도움이 됩니다.