join
여러개의 테이블을 합쳐서 하나의 테이블로 만드는과정
예시) b 테이블에 join,
a의 member_no와, b의 member_no가 같고,
현재의 no를 가진 회원의 title과 thumbnail_path을 a테이블에서 조회SELECT a.title, a.thumbnail_path FROM a JOIN b ON a.member_no = b.member_no WHERE no = :no`;//현재의 no를 가진 회원의 정보
SELECT *
FROM Reservation
LEFT JOIN Customer
ON Reservation.Name = Customer.Name
WHERE ReserveDate > '2016-02-01';
-서브쿼리
쿼리 안에 또 다른 쿼리가 담겨있는 것
괄호 안에있는 쿼리를 sub Query 또는 inner Query,
나머지 괄호 밖에 있는 쿼리를 Main Query 또는 outer Query라고 함
select 테이블1.컬럼,테이블2.컬럼
from 테이블1,테이블2
where 조건 연산자 ( select 컬럼 from 테이블 where 조건);
사원들이 다니는 부서의 이름과 사번출력
select emp.ename, dept.dname from emp, dept;
-세미조인
서브쿼리에 존재하는 데이터만 메인쿼리에서 추출함
in과 exists연잔사를 사용한 조인
-안티조인(anti join)
서브쿼리의 b 테이블에 없는 메인 쿼리의 a 테이블의 데이터만 추출
한쪽 테이블에만 있는 데이터를 추출하는 것이므로 조회조건에서 not in 이나 not exists 연산자를 사용
세미조인과 반대개념
-셀프조인(self join)
서로다른 두 테이블이 아닌 동일한 한 테이블을 두개로 나누는 방법
select e1.컬럼1, e1.컬럼2
from 컬럼1,2의 테이블명 e1
where e1.컬럼=e2.컬럼; (비교할 컬럼 입력)
and 테이블.컬럼=테이블.컬럼; (여러개의 데이터베이스를 조인할때)
select 테이블1.컬럼1,테이블1.컬럼2,테이블2.컬럼3
from 테이블1, 테이블2
where 테이블1.컬럼4=테이블2.컬럼4
and 테이블2.조건(<=1000)
order by 컬럼1;
-외부조인 (outer join)
조인조건에 만족하는 데이터 뿐만 아니라 null까지 출력 즉,모든데이터를 출력
서로 관계가 없는 레코드들만 조인
null이있는 데이터 반대편에 (+)
카다시안 조인
where절에 조인조건이 없는 조인
full outer joind
양쪽에 + 넣어도 실행 안됨
ansi로 기술해야 한다
-Ansi join ***
ansi SQL 문법을 사용한 조인
기존 조인 문법과 ansi조인의 차이점은 조인조건이 where절이 아닌 from절에 들어간다는 점
select 테이블.컬럼,테이블.컬럼,테이블.컬럼
from 테이블 join 테이블
on 테이블.컬럼=테이블.컬럼;(비교할 컬럼)
-exists 검색결과가 존재하면 데이터가 출력됨
selectfrom 테이블명 where exists(select 1 from dual);
->테이블의 모든데이터 출력
not exists 검색결과가 없어야 데이터가 출력됨
selectfrom 테이블 where not exists(select 1 from dual);
select*from 테이블 where exists(select 1 from dual where 1!=1);
->테이블에 데이터가 있을시 아무것도 출력 안됨
사원이 존재하는 부서정보만 출력
select from 테이블1 d(별명)
where exists(
select from 테이블2 e(별명) where e.컬럼=d.컬럼); (비교할컬럼)
-any,some은 여러비교 대상중 하나 이상이 일치하면 결과를 출력
all 모두 일치
ex) 부서가 50인 사원들중 한명보다 급여를 적게 받는 사람 출력
select * from 테이블1 where 컬럼1<= any(
select 컬럼1 from 테이블1 where 컬럼2=50);
-non-equl jonin(범위조회)
where절에 범위를 사용하여 해당 테이블을 합치는 방법
마지막 줄에 order by min/max등등;