select*from 첨부파일 where 첨부파일번호=?
→ 인덱스를 탈 수 없다.select*from emp, dept where emp.deptno=dept.depno;
단순히 행을 식별하기 위해 사용
1:N에서 1인 쪽의 기본키를 N인 쪽이 참조한다.
select g1.gno, g1.gname, g1.point, g2.gname from gogak g1 inner join gift g2 on g1.point between g2.g_start and g2.g_end;
select e.empno, e.ename, e.sal, s.grade from emp e inner join salgrade s on e.sal between s.losal and s.hisal where e.deptno=10
select * from emp e inner join dept d on e.deptno=d.deptno inner join salgrade s on e.sal between s.losal and s.hisal;
select * from category major, category minor where minor.parent=major.ccode;
select emp.empno, emp.ename, manager.empno, manager.ename from emp, emp manager where emp.mgr=manager.empno;
select distinct m.* from emp e, emp m where e.mgr=m.empno; select distinct m.* from emp e inner join emp m on e.mgr=m.empno
조인할 때 테이블의 교집합을 뽑아내는 조인은 inner join(내부조인), inner join 중에 조건이 =인 조인을 equi join(동일조인, 동등조인)이라고 한다.
오라클 비표준 조인
select * from emp e, dept d where e.deptno=d.deptno;
SQL 표준 조인
select * from emp e inner join dept d on e.deptno=d.deptno;
교수 학생
교수번호 이름 학생번호 이름 지도교수번호
1 양미진 111 홍길동 1
2 김길동 122 전우치 1
113 임꺽정 null
cross join은 발생하면 안된다.
inner join : 교수와 학생간에 관계를 만족하는 행만 출력, 행개수 6
select * from 교수, 학생 where 학생.지도교수번호=교수.교수번호
outer join : 관계를 만족하지 않아도 출력
<오라클 기준>
inner join에서 비교를 =로 하는
select * from emp, dept where emp.deptno=dept.deptno;
inner join에서 비교를 =로 하지 않는
select * from emp, salgrade where emp.sal between salgrade.losal and salgrade.hisal;
right outer join → (+)를 왼쪽에 붙인다.
select * from emp, dept where emptno(+)=dept.deptno;
left outer join → (+)를 오른쪽에 붙인다.
select * from dept, emp where dept.deptno=emp.deptno(+);
조인을 하려면 양 테이블 사이에 공유하는 컬럼이 있어야 한다. → 참조하는 컬럼(외래키)
참조하는 값, 즉 외래키의 값이 null은 가능
내부 조인을 하다 보면 조건을 만족하지 못하는 행들이 사라진다. 이때 외부조인으로 바꿔줘야 한다.
오라클 외부조인과 sql 표준 외부조인의 차이
: 오라클은 full outer join이 불가능
select * from emp where rownum=1; 은 출력되나 rownum=2는 출력되지 않는다. 왜?
where는 조건절이라 rownum=1 현재 첫 번째글이 출력된다. (하지만 우리는 현재 값을 알 수 없다) 첫 번째행은 버리게 된다. 다 1이다.
rownum은 1등이 있어야 2등이 있고, 2등이 있어야 3등이 있다.그래서 rownum의 경우 조건을 걸때는 select * from emp where rownum<=2;
이런식으로 작성해야 한다.