2025/01/23: 2개의 글

[DataBase] ON 절과 WHERE 절을 사용하는 조인의 차이

Posted by nkjok
2025. 1. 23. 18:00 Web/94. DataBase
반응형

ON 절과 WHERE 절을 사용한 조인의 차이에 대해 설명드릴게요. 정확한 결과를 가져오려면 ON 절에서 필터를 사용하는 것이 더 적절한 경우가 있습니다. 이 차이를 이해하기 위해 예제를 사용해 자세히 설명해 보겠습니다.

ON 절과 WHERE 절을 사용하는 조인의 차이

ON 절에서의 필터링

ON 절은 조인 조건을 지정하는 곳입니다. 테이블을 조인할 때 조건을 걸어 필터링을 수행합니다. 조인할 때마다 조건에 맞는 행만 결과 집합에 포함됩니다.

WHERE 절에서의 필터링

WHERE 절은 조인이 끝난 후 결과 집합에서 조건을 걸어 필터링을 수행합니다. 조인된 결과에서 조건에 맞는 행만 최종 결과 집합에 포함됩니다.

예제

데이터 준비

테이블 employees와 departments가 있다고 가정해보겠습니다.

ON 절을 사용하는 조인

ON 절을 사용하여 필터링하면 조인 조건이 먼저 적용됩니다. 예를 들어, dept_id = 10인 부서만 조인하려면:

SELECT e.emp_name, d.dept_name
FROM employees e
JOIN departments d ON e.dept_id = d.dept_id AND d.dept_id = 10;

결과:

emp_namedept_name
Alice HR

 

WHERE 절을 사용하는 조인

WHERE 절을 사용하여 필터링하면 조인이 모두 이루어진 후 조건이 적용됩니다. 예를 들어, dept_id = 10인 부서만 결과에 포함하려면:

SELECT e.emp_name, d.dept_name
FROM employees e
JOIN departments d ON e.dept_id = d.dept_id
WHERE d.dept_id = 10;

결과는 ON 절을 사용한 경우와 동일합니다:

emp_namedept_name
Alice HR

 

차이점 및 주의사항

  1. 조인된 행의 수: ON 절에서 필터링하는 경우, 조인 조건이 먼저 적용되므로 조건에 맞는 행만 조인됩니다. WHERE 절에서 필터링하는 경우, 모든 조인된 결과에서 조건을 적용하므로 더 많은 행이 처리될 수 있습니다.
  2. 성능 최적화: 조인 조건이 복잡한 경우, ON 절에서 필터링하면 성능이 더 좋을 수 있습니다. 이유는 조인할 때 조건이 적용되어 불필요한 조인을 방지할 수 있기 때문입니다.

요약하면, 정확한 결과를 얻으려면 ON 절을 사용하여 필터링하는 것이 좋습니다. 이를 통해 조인 조건이 먼저 적용되고, 결과 집합이 필터링됩니다.

반응형

[요구사항 확인] 미리 알아두기

Posted by nkjok
2025. 1. 23. 14:37 낙서장/1. 요구사항 확인
반응형

애자일 방법론 (Agile Methodology)

절차보다는 사람이 중심이 되어 변화에 유연하고 신속하게 적응하면서 효율적으로 시스템을 개발할 수 있는 신속 적응적 경량 개발 방법론이다.

애자일 방법론은 소프트웨어 개발에 있어서 기존의 경직된 절차보다는 사람과 팀 간의 협력을 중시하는 접근 방식입니다.

  1. 변화에 유연하게 대응: 애자일 방법론은 프로젝트 도중에 변경되는 요구사항에도 신속하게 적응할 수 있도록 설계되었습니다.
  2. 짧은 개발 주기: 보통 2~4주 정도의 짧은 반복 주기(스프린트)로 프로젝트를 진행하여, 각 주기마다 기능이 완성된 제품을 제공할 수 있습니다.
  3. 지속적인 피드백: 팀원들 간의 지속적인 커뮤니케이션과 사용자로부터의 피드백을 통해 제품을 꾸준히 개선해 나갑니다.

객체 지향 분석 (Object Oriented Analysis, OOA)

객체 지향 분석(OOA; Object Oriented Analysis)은 사용자의 요구사항을 분석하여 요구된 문제와 관련된 모든 클래스(객체), 속성과 연산, 관계를 정의하여 모델링하는 기법이다

객체 지향 분석은 소프트웨어 요구사항을 이해하고 모델링하는 단계로, 객체 지향 프로그래밍(OOP)의 이론을 바탕으로 합니다.

  1. 클래스와 객체 정의: 시스템에서 필요로 하는 모든 클래스와 객체를 식별하고 정의합니다.
  2. 속성과 메서드: 각 클래스에 대한 속성(데이터)과 메서드(행동)을 정의하여 객체의 행동과 상태를 명확히 합니다.
  3. 관계: 클래스 간의 상속, 연관 관계 등을 모델링하여 시스템 전체 구조를 이해하고 나타냅니다.

디자인 패턴 (Design Patterns)

디자인 패턴은 소프트웨어 공학의 소프트웨어 설계에서 공통으로 발생하는 문제에 대해 자주 쓰이는 설계 방법을 정리한 패턴이다.

디자인 패턴은 반복적으로 발생하는 소프트웨어 설계 문제를 해결하기 위한 일반화된 해결책입니다.

  1. 재사용 가능한 코드: 디자인 패턴을 사용하면 코드의 재사용성이 높아지고 유지보수가 쉬워집니다.
  2. 문제 해결: 특정 상황에서 자주 발생하는 문제를 해결하는 데 유용합니다.
  3. 커뮤니케이션 도구: 팀원 간의 설계 논의에서 공통의 언어로 사용되어 설계 의도를 명확히 전달할 수 있습니다.

요구사항 분석 (Requirement Analysis)

도출된 요구사항 간 상충을 해결하고 소프트웨어의 범위를 파악하여 외부 환경과 상호 작용하는 것을 분석하는 과정이다.

요구사항 분석은 시스템이 가져야 할 기능과 제약 조건을 명확히 정의하는 단계입니다.

  1. 요구사항 도출: 이해 관계자와의 인터뷰, 설문 조사 등을 통해 필요한 요구사항을 수집합니다.
  2. 요구사항 명세화: 수집된 요구사항을 명확하고 구체적으로 문서화하여 개발팀이 이해할 수 있도록 합니다.
  3. 요구사항 검증: 도출된 요구사항이 완전하고 일관성 있는지 검토하고, 상충되는 요구사항을 조정합니다.

소프트웨어 아키텍처 (Software Architecture)

소프트웨어 아키텍처(Software Architecture)는 시스템에 대한 기본 조직 체계로, 시스템을 이루는 구성요소와 구성요소들 사이의 관계, 구성요소와 주변 환경들과의 관계 및 시스템의 진화와 설계를 지배하는 원칙이다.

소프트웨어 아키텍처는 시스템의 전체 구조와 디자인 원칙을 정의하는 과정입니다.

  1. 구성 요소: 시스템을 구성하는 주요 컴포넌트와 그 역할을 정의합니다.
  2. 관계: 구성 요소 간의 인터페이스와 상호 작용 방식을 정의하여 전체적인 시스템의 작동 원리를 나타냅니다.
  3. 설계 원칙: 시스템의 확장성, 유지보수성, 성능 등을 고려한 설계 원칙을 설정하여 시스템의 일관성을 유지합니다.
반응형