Tools mentioned in this article
Open the browser-based tool while you read and try the workflow immediately.
SQL 빌더란
**Visual SQL Builder**는 테이블 이름, 가져올 컬럼, 필터 조건, JOIN 조건을 폼에 입력하면서 SELECT문을 시각적으로 조립할 수 있는 도구입니다. 매번 문법을 처음부터 떠올리는 대신 폼에서 조건을 정리하며 쿼리를 만들 수 있어, SQL을 배우는 사람에게도 실무의 데이터 추출에도 유용합니다.

입력한 테이블 이름이나 조건은 서버로 전송되지 않고, 브라우저 안에서 SQL이 생성됩니다.
쿼리를 만드는 순서
- 메인 테이블을 정한다
- 가져올 컬럼을 추가한다(미입력 시
*) - 필요하면
WHERE조건을 지정한다 - 다른 테이블이 필요하면
JOIN을 추가한다 - 생성된 SQL을 확인하고, 필요하면 SQL 포매터로 정리한다
예를 들어 사용자별 주문 수를 확인하고 싶다면 users와 orders를 결합합니다.
SELECT
users.id,
users.name,
COUNT(orders.id) AS order_count
FROM users
LEFT JOIN orders ON users.id = orders.user_id
WHERE users.deleted_at IS NULL
GROUP BY users.id, users.name
ORDER BY order_count DESC;
값의 타입을 자동 판정해 따옴표를 붙이는 원리
WHERE의 값 입력은 문자열로 받지만, 그대로 SQL에 넣으면 age > 20 같은 숫자 조건도 age > '20'처럼 불필요한 따옴표가 붙어버립니다. 이 도구는 값을 보고 숫자면 그대로, 그 외에는 자동으로 작은따옴표를 붙이는 처리를 합니다.
let val = w.value;
if (
w.operator !== 'IS NULL' &&
isNaN(Number(val)) && // 숫자로 변환 불가 = 문자열로 간주
!val.startsWith("'") // 이미 따옴표가 있으면 중복으로 감싸지 않음
) {
val = `'${val}'`;
}
isNaN(Number(val))로 숫자인지 판정하고, !val.startsWith("'")로 “사용자가 이미 'active'처럼 따옴표를 직접 입력한 경우” 중복으로 감싸지 않도록 배려합니다. IS NULL 연산자일 때는 값 자체를 쓰지 않으므로 판정에서 제외됩니다.
JOIN을 정할 때의 사고방식
JOIN이 헷갈릴 땐 먼저 “어떤 행을 남길지”를 정하면 판단이 쉬워집니다.
| 하고 싶은 것 | JOIN 종류 |
|---|---|
| 주문이 있는 사용자만 가져오고 싶다 | INNER JOIN |
| 주문이 없는 사용자도 포함하고 싶다 | LEFT JOIN |
| 마스터 정보를 덧붙이고 싶다 | LEFT JOIN |
| 관련 데이터가 있는 것만 좁히고 싶다 | INNER JOIN |
INNER JOIN은 양쪽 테이블에 일치하는 데이터가 있는 행만 가져옵니다. LEFT JOIN은 왼쪽 테이블의 행을 남긴 채 오른쪽을 연결합니다. 도구에서 JOIN 종류를 바꿔가며 생성된 SQL을 비교하면 이 차이가 체감으로 이해됩니다. RIGHT JOIN·FULL JOIN·SELF JOIN을 포함한 전체 그림은 SQL JOIN 완전 레퍼런스에서 다룹니다.
여러 테이블 결합하기
테이블이 3개 이상이어도 도구에서 JOIN을 추가하기만 하면 됩니다. 내부적으로는 joins 배열을 순서대로 이어붙이는 단순한 반복문입니다.
let sql = `SELECT ${selectParts.join(', ')}\nFROM ${mainTable}`;
state.joins.forEach((j) => {
if (j.leftTable && j.rightTable) {
sql += `\n${j.type} ${j.rightTable} ON ${j.leftTable}.${j.leftCol} = ${j.rightTable}.${j.rightCol}`;
}
});
JOIN을 추가할 때마다 한 줄씩 늘어나므로, 폼에서도 생성 결과에서도 “지금 어떤 테이블끼리 연결되어 있는지” 추적하기 쉽습니다.
생성된 SQL을 확인할 포인트
- 테이블 이름과 컬럼 이름이 실제 DB와 일치하는가
- JOIN 조건이 빠지지 않았는가
WHERE조건이 너무 강하거나 약하지 않은가- 집계 시
GROUP BY단위가 올바른가 ORDER BY나LIMIT이 필요한 곳에 들어있는가- 프로덕션 데이터에 대해 무거운 쿼리가 되지 않는가
SQL 빌더는 구문의 초안을 만드는 도구입니다. 최종적으로는 사용 중인 데이터베이스의 방언, 인덱스, 실행 계획까지 포함해 확인하는 것이 안전합니다.
SQL 초심자의 학습에도 좋은 이유
SELECT는 가져올 열, FROM은 대상 테이블, WHERE는 필터링, JOIN은 테이블 결합, ORDER BY는 정렬 — 폼을 조작하며 생성 결과를 보면 이 대응 관계가 자연스럽게 눈에 들어옵니다. 익숙해지면 생성된 쿼리를 직접 조금씩 고쳐보는 것도 좋습니다. 결과를 SQL 포매터로 정리하면 읽기 좋은 학습용 샘플로 남길 수 있습니다.
자주 묻는 질문
SQL 빌더만으로 복잡한 SQL을 완성할 수 있나요?
기본적인 SELECT, WHERE, JOIN의 초안 작성에는 적합합니다. DB 고유 함수, 복잡한 서브쿼리, 성능 튜닝이 필요한 SQL은 생성 후 직접 확인해주세요.
숫자와 문자열의 따옴표는 어떻게 판정되나요?
입력값이 Number()로 숫자로 변환되는지로 판정합니다. 변환되지 않으면 자동으로 작은따옴표가 붙고, 이미 따옴표가 있는 값은 중복으로 감싸지 않습니다. IS NULL을 선택한 경우 값 자체는 사용하지 않습니다.
SQL 초심자도 사용할 수 있나요?
네. 항목을 입력하면서 SQL의 형태를 확인할 수 있어 문법을 배우며 사용하기 좋습니다. 특히 JOIN 종류나 조건식을 비교하는 학습에 적합합니다.
입력한 테이블 이름이나 조건은 서버로 전송되나요?
아니요. SQL 빌더는 브라우저 안에서 동작하며, 입력 내용을 서버로 보내지 않고 로컬에서 SQL을 생성합니다.
정리
- SQL 빌더는 “암기해서 쓰는 것”을 “조건을 정리해서 조립하는 것”으로 바꿔준다
- 값의 따옴표는
Number()판정 + 중복 방지로 자동화되어 있다 - JOIN은 폼에서 종류를 바꿔가며 생성 결과를 비교하면 이해가 빠르다
- 여러 JOIN은 배열을 순서대로 이어붙이는 단순한 구조다
SELECT문이나 JOIN에서 막힐 때는 먼저 Visual SQL Builder로 쿼리의 뼈대를 만들고, 필요에 따라 정리·검토한 뒤 실행하세요.