728x90

 

JOIN에 AND

SELECT F1.EMP_NO 직원번호, F1.FAM_NM 쌍둥이1, F2.FAM_NM 쌍둥이2, 'Y' "쌍둥이 여부"
FROM FAM_C F1
    JOIN FAM_C F2 ON(F1.EMP_NO = F2. EMP_NO)
AND F1.FAM_NM <> F2.FAM_NM
AND F1.REL_TYPE_CD = 'A27'
AND F1.REL_TYPE_CD = F2.REL_TYPE_CD
AND F1.BIRTH_YMD = F2.BIRTH_YMD
;

 

JOIN + WHERE절에 AND

SELECT F1.EMP_NO 직원번호, F1.FAM_NM 쌍둥이1, F2.FAM_NM 쌍둥이2, 'Y' "쌍둥이 여부"
FROM FAM_C F1
    JOIN FAM_C F2 ON(F1.EMP_NO = F2. EMP_NO)
WHERE F1.FAM_NM <> F2.FAM_NM
AND F1.REL_TYPE_CD = 'A27'
AND F1.REL_TYPE_CD = F2.REL_TYPE_CD
AND F1.BIRTH_YMD = F2.BIRTH_YMD    
;

 

위 둘의 차이는 뭘까?

 

JOIN에 AND 조회 결과

 

JOIN + WHERE절에 AND

 

조회 결과 행(ROW) 수도 같고 직원번호를 하나씩 따져봐도 같다

 

그럼 차이가 없는 걸까?

답은 NO

 

현재는 내부조인(INNER JOIN)이라 차이가 없지만 외부조인(OUTER JOIN)으로 들어가면 달라지게 된다.

FROM절에서 조건을 걸어서 이미 조건대로 걸러지는 것과

FROM절의 데이터를 토대로 WHERE에서 조건을 거는 것의 차이

쿼리의 작동 순서가 FROM절 WHERE절 순이기 때문

 

<쿼리 동작 순서>

  1. FROM
  2. WHERE
  3. GROUP BY
  4. HAVING
  5. SELECT
  6. ORDER BY

 

 

728x90
반응형
728x90

 

 

 

 

 

package controller;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.TreeSet;

import model.vo.pModelVo02;


public class pController02 {

	public void firstR() {
		
		// HashSet
		HashSet<pModelVo02> hset =new HashSet<>();
		
		hset.add(new pModelVo02("힘내",1));
		hset.add(new pModelVo02("포기 ㄴ",2));
		System.out.println(hset);
		
		pModelVo02 pmv = new pModelVo02("a",0);
		hset.add(pmv);
		hset.add(new pModelVo02("추가",3));
		System.out.println(hset);
		
		HashSet<String> strSet = new HashSet<String>();
		strSet.add("안녕");
		strSet.add(new String("안녕"));
		System.out.println(hset);
		System.out.println(strSet);
		strSet.remove(new String("안녕"));
		System.out.println(strSet);
	
	}
	public void second() {	

		// LinkedHashSet
		// 순서 유지
		LinkedHashSet<pModelVo02> lhSet = new LinkedHashSet();
		
		lhSet.add(new pModelVo02("a",1));
		lhSet.add(new pModelVo02("b",2));
		lhSet.add(new pModelVo02("c",3));
		System.out.println(lhSet);
		
		// TreeSet
		// 정렬 가능
		// 정렬 기능 + 기준 필요
		// 기준이 되는 오버라이딩은 String class 제네릭으로 대체
		TreeSet<String> tSet = new TreeSet<>();
//		tSet.add(new String("A",1));
//		tSet.add(new String("B",2));
		System.out.println(tSet);
		
		tSet.add("A");
		tSet.add("C");
		tSet.add("B"); 			  // 추가 순서는 ACB
		System.out.println(tSet); // 결과는        ABC (정렬 적용 확인)
		
		
		
	}
	
}

 

package model.vo;

public class pModelVo02 {

	private String name;
	private double weight;
	
	public pModelVo02() {}
	public pModelVo02(String name, double weight) {
		this.name = name;
		this.weight = weight;
	}


	// getter & setter
	public void setName(String name) {
		this.name = name;
	}
	public void setWeight(double weight) {
		this.weight = weight;
	}
	public String getName() {
		return name;
	}
	public double getWeight() {
		return weight;
	}
	
	//toString
	@Override
	public String toString() {
		return name+"("+weight+"kg)";
	}

}

 

package run;
import controller.pController02;

public class pRun02 {
	public static void main(String[] args) {
		
		pController02 p = new pController02();
//		p.firstR();
		p.second();

	}
	
}

 

728x90
반응형

+ Recent posts