해결된 질문
작성
·
155
1
안녕하세요.
현재 SQLD시험 공부를 하다가 의문점이 생겨 질문을 남깁니다.
강사님께서는 JOIN문에서
SELECT e.emp_id, e.emp_name, d.dept_name, e.phone
FROM employee AS e
JOIN department AS d ON e.dept_id = d.dept_id;
라고 코드를 작성해주셨는데
SQLD책에는
SELECT employee.emp_id, employee.emp_name department.dept_name, employee.phone
FROM employee, department
WHERE employee.dept_id = department.dept_id;
형식이라고 나와 있습니다.
WHERE은 '조건'으로 배웠는데,
JOIN문 사용하지 않고, 책에 나오듯이 WHERE만으로 JOIN을 해도 문제가 없나요?
답변 1
1
안녕하세요?
우선 두 쿼리문의 결과는 대부분 같습니다.
첫 번째 쿼리문, 즉 제가 강의에서 다룬 쿼리문은 ANSI SQL 표준을 따르는 명시적 조인 방식입니다. JOIN 구문을 사용함으로써 어떤 테이블이 어떻게 조인되는지 명확하게 표현됩니다. 조인의 조건이 ON 절에 명시적으로 표현되어 있어서, 나중에 쿼리를 수정하거나 디버깅할 때 좋습니다. 그리고 명시적 조인은 조인 조건을 빼먹는 실수를 방지해줍니다. 예를 들면 CROSS JOIN을 피할 수 있습니다.
두 번째 쿼리문은 비명시적 조인 방식을 사용합니다. 조인 조건이 WHERE 절에 명시되어 있습니다. 짧고 간결하게 작성될 수 있으며, 일부 오래된 데이터베이스 시스템 또는 간단한 쿼리에 적합할 수 있습니다. 하지만 대부분의 쿼리에서는 WHERE 절 내의 조인 조건과 필터 조건이 섞여 가독성이 저하될 수 있습니다. 또한 조인이 WHERE 절에 섞여 있어, 나중에 쿼리를 수정하거나 확장하는데 어려움을 겪을 수 있습니다. 그리고 조인 조건을 잘못 작성하거나 빼먹는 경우가 발생할 수 있으며, 이는 예기치 않은 CROSS JOIN으로 이어질 수 있습니다.
그래서 명시적 조인을 사용하는 첫 번째 쿼리 방식이 요즘의 SQL 작성법에 더 적합합니다. 이 방식은 쿼리의 의도를 분명히 하고, 가독성 및 유지보수성을 높여줍니다. 대부분의 데이터베이스 시스템과 SQL 표준에서는 명시적 조인을 권장하고 있습니다. 따라서, 저는 첫 번째 쿼리 사용을 강력히 추천합니다.
하지만, SQLD에서 다루는 쿼리문은 예전 방식의 쿼리문입니다. 그리고 ORACLE 데이터베이스를 기준으로 합니다. 저는 이게 마음에 들지 않습니다. 왜 특정 제품을 기준으로 시험을 보는지 모르겠어요. 아뭏든 SQLD 시험을 목표로 한다면, 적절하지 않더라도, SQLD 관련 책의 내용을 중심으로 공부하셔야 합니다. 하지만 실무에서는 첫 번째 방법을 사용하기를 다시 한번 권고합니다. 무슨 뜻인지 아시겠지요?^^
질문해 주셔서 감사합니다~
자세한 답변 덕분에 자세히 이해할 수 있었습니다!! 🙂
감사합니다~