MySQL에서 Excel 데이터 가져오기 및 조건 필터링

대규모 데이터셋을 활용해 MySQL을 학습하는 과정에서 Excel 파일을 데이터베이스로 가져오고, 원하는 조건으로 데이터를 추출하는 방법을 정리한다.

준비사항

MySQL 8.0 환경에서 작업하며, GUI 클라이언트로는 Navicat을 사용한다. MySQL 8.0의 기본 인증 방식(caching_sha2_password)이 기존 도구와 호환되지 않을 수 있으므로, 필요시 mysql_native_password로 변경하거나 최신 버전의 클라이언트를 사용해야 한다.

Excel 데이터 가져오기

Navicat에서 데이터베이스를 생성한 후, 해당 데이터베이스를 우클릭하여 데이터 가져오기를 선택하고 Excel 파일을 지정한다. 가져오기 과정에서 각 컬럼의 데이터 타입을 적절히 설정해야 하며, 불필요한 빈 컬럼은 제거하는 것이 중요하다.

가져오기 완료 후 디자인 테이블 기능으로 스키마를 점검하고, 변경사항이 있다면 반드시 저장해야 한다. 저장되지 않은 테이블에는 별표(*) 표시가 나타나며, 이 상태에서는 쿼리 결과에 수정 내용이 반영되지 않는다.

기본 쿼리 작성

단일 테이블에서 조건에 맞는 데이터를 조회하는 기본 구문은 다음과 같다.

SELECT * FROM `학생정보` WHERE 성별 = '여';

작성 규칙을 정리하면 다음과 같다.

  • 데이터베이스명, 테이블명: 백틱(`)으로 감싼다
  • 문자열 값: 작은따옴표(') 또는 큰따옴표(")로 감싼다
  • 컬럼명: 따옴표 없이 사용한다

다중 테이블 데이터 통합

여러 테이블을 동시에 조회할 때는 단순히 FROM 절에 나열하면 컬럼 소속이曖昧해져 오류가 발생한다.

-- 오류: Column '성별' in field list is ambiguous
SELECT * FROM `1반`, `2반`, `3반` WHERE 성별 = '여';

이 경우 UNION 연산자를 사용해 각 테이블의 결과를 세로로 연결한다. 단, 모든 SELECT 문의 컬럼 수와 데이터 타입이 일치해야 한다.

SELECT 학번, 이름, 성별, 전화번호
FROM `1반`
WHERE 성별 = '여'

UNION

SELECT 학번, 이름, 성별, 전화번호
FROM `2반`
WHERE 성별 = '여'

UNION

SELECT 학번, 이름, 성별, 전화번호
FROM `3반`
WHERE 성별 = '여';

주의사항

UNION 사용 시 1222 오류가 발생하면 각 테이블의 컬럼 수를 확인해야 한다. Excel 가져오기 과정에서 빈 컬럼(NULL)이 추가되어 컬럼 수가 달라지는 경우가 있다. 이 경우 테이블 디자인에서冗餘한 컬럼을 삭제하고 반드시 저장해야 한다.

또한 Navicat의 쿼리 에디터에서 현재 구문 실행실행 버튼의 차이를 구분하여 사용해야 한다. 현재 구문 실행은 커서가 위치한 단일 구문만 실행하며, 실행 버튼은 에디터의 모든 구문을 순차적으로 처리한다.

태그: MySQL Navicat Excel SQL UNION 데이터 가져오기

5월 22일 17:32에 게시됨