Oracle DB - Query 구문 (WHERE ~ JOIN)
▣ Where 절(구)에 사용되는 쿼리 구문
◎ 관계 연산자 (NOT / AND / OR)
- NOT : 가독성이 더 좋은 부정 연산자 !=, <>, ^= 등을 이용하는 것이 좋다.
- AND : 주로 사용되는 조건절
- OR : 사용할 수는 있지만, 왠만하면 AND를 사용한다.
※ AND와 OR의 혼용 시 괄호 ' ( ) ' 를 사용하여 구분해주어야 한다.
→ 연산자 우선순위 때문 : AND > OR
◎ LIKE
- %, _, # 과 같은 와일드 카드 문자 / ESCAPE 문자를 함께 사용하여 원하는 문자열 검색
◎ BETWEEN ... AND
- AND의 앞과 AND 뒤 값의 사잇 값을 출력해준다.
- 앞의 값은 뒤의 값보다 작아야한다. (유의)
- 날짜를 검색하는 경우 유의한다.
→ 날짜 데이터는 시리얼 넘버로 저장되기 때문에 시, 분, 초 값도 역시 존재한다.
→ 정확한 데이터를 출력시키려면 날짜 데이터의 포맷을 자유롭게 조절할 수 있어야 함.
→ ALTER SESSION SET nls_date_format='YYYY/MM/DD:HH24:MI:SS'
◎ IN
- 지정된 값 중 일치하는 값이 하나라도 있으면 출력해주는 조건
- 가독성이 우수
- OR 이나 = 연산자를 대체한다.
▣ Join
- 복수의 테이블을 묶어서 연관된 칼럼 값을 참조하는 기법
- 테이블을 join하기 위해서는 join 조건이 필요하다
- join 조건은 묶는 테이블의 개수가 n개일때 최소 n-1개가 필요하다.
◎ 등가 join 과 비등가 join
▷ 등가 join : 칼럼의 내용이 정확히 일치하는 레코드 만을 추려 join한다.
→ 조인 조건에 '=' 등호를 사용한다.
ex) WHERE dept.dno = emp.dno; (두 테이블의 부서번호가 같은 것만 묶음)
▷ 비등가 join : 칼럼의 내용이 특정 값 구간에 존재하는 경우
→ 조인 조건에 '<', '>' 등등 부등호가 포함된 조건을 사용한다.
ex) WHERE sal * 1.1 BETWEEN losal AND hisal; (+조인조건이 2개이다!)
◎ 자기 참조 조인 (inner join)과 외부 조인 (outer join)
▷ 자기 참조 조인
- 동일한 테이블을 자기 참조에 의해 join 한다.
- 하나의 테이블을 여러 테이블인 것처럼 사용한다.
- 구분을 위해 무조건 테이블에 별명을 지어주어야 한다.
ex) select s1.sno 학번, s1.sname 학생이름
from student s1, student s2
where s1.name = s2.name and s1.sno != s2.sno;
: 같은 테이블을 사용하여 별명을 각각 지정. 동명이인을 찾는 쿼리문이다.
▷ 외부 조인
- 조인 조건에 미처 일치하지 못한 나머지 데이터를 출력해준다.
- 조인 된 테이블의 결과를 해석할 때 오인을 방지하기 위해 사용한다.
- 데이터가 부족한 테이블 쪽의 조인 조건에 (+)를 추가해준다.
ex) select d.dno 부서번호, dname 부서명, ename 사원명
from dept d, emp e
where d.dno = e.dno (+)
order by 1;
: +가 붙은 e 테이블은 d테이블에서는 존재하지만, e 테이블엔 존재하지 않는 데이터를 조인하도록 한다.
◎ 관계 연산자 (NOT / AND / OR)
- NOT : 가독성이 더 좋은 부정 연산자 !=, <>, ^= 등을 이용하는 것이 좋다.
- AND : 주로 사용되는 조건절
- OR : 사용할 수는 있지만, 왠만하면 AND를 사용한다.
※ AND와 OR의 혼용 시 괄호 ' ( ) ' 를 사용하여 구분해주어야 한다.
→ 연산자 우선순위 때문 : AND > OR
◎ LIKE
- %, _, # 과 같은 와일드 카드 문자 / ESCAPE 문자를 함께 사용하여 원하는 문자열 검색
◎ BETWEEN ... AND
- AND의 앞과 AND 뒤 값의 사잇 값을 출력해준다.
- 앞의 값은 뒤의 값보다 작아야한다. (유의)
- 날짜를 검색하는 경우 유의한다.
→ 날짜 데이터는 시리얼 넘버로 저장되기 때문에 시, 분, 초 값도 역시 존재한다.
→ 정확한 데이터를 출력시키려면 날짜 데이터의 포맷을 자유롭게 조절할 수 있어야 함.
→ ALTER SESSION SET nls_date_format='YYYY/MM/DD:HH24:MI:SS'
◎ IN
- 지정된 값 중 일치하는 값이 하나라도 있으면 출력해주는 조건
- 가독성이 우수
- OR 이나 = 연산자를 대체한다.
▣ Join
- 복수의 테이블을 묶어서 연관된 칼럼 값을 참조하는 기법
- 테이블을 join하기 위해서는 join 조건이 필요하다
- join 조건은 묶는 테이블의 개수가 n개일때 최소 n-1개가 필요하다.
◎ 등가 join 과 비등가 join
▷ 등가 join : 칼럼의 내용이 정확히 일치하는 레코드 만을 추려 join한다.
→ 조인 조건에 '=' 등호를 사용한다.
ex) WHERE dept.dno = emp.dno; (두 테이블의 부서번호가 같은 것만 묶음)
▷ 비등가 join : 칼럼의 내용이 특정 값 구간에 존재하는 경우
→ 조인 조건에 '<', '>' 등등 부등호가 포함된 조건을 사용한다.
ex) WHERE sal * 1.1 BETWEEN losal AND hisal; (+조인조건이 2개이다!)
◎ 자기 참조 조인 (inner join)과 외부 조인 (outer join)
▷ 자기 참조 조인
- 동일한 테이블을 자기 참조에 의해 join 한다.
- 하나의 테이블을 여러 테이블인 것처럼 사용한다.
- 구분을 위해 무조건 테이블에 별명을 지어주어야 한다.
ex) select s1.sno 학번, s1.sname 학생이름
from student s1, student s2
where s1.name = s2.name and s1.sno != s2.sno;
: 같은 테이블을 사용하여 별명을 각각 지정. 동명이인을 찾는 쿼리문이다.
▷ 외부 조인
- 조인 조건에 미처 일치하지 못한 나머지 데이터를 출력해준다.
- 조인 된 테이블의 결과를 해석할 때 오인을 방지하기 위해 사용한다.
- 데이터가 부족한 테이블 쪽의 조인 조건에 (+)를 추가해준다.
ex) select d.dno 부서번호, dname 부서명, ename 사원명
from dept d, emp e
where d.dno = e.dno (+)
order by 1;
: +가 붙은 e 테이블은 d테이블에서는 존재하지만, e 테이블엔 존재하지 않는 데이터를 조인하도록 한다.
댓글
댓글 쓰기