1. cross join (카티션 곱)
: 두개의 테이블의 모든 레코드의 곱의 개수로 레코드 조회 됨. : 조회 되는 레코드 개수가 두 테이블의 레코드의 곱 이 므로 사용 시 주의함. : 테이블 명을 별명으로 지정할 수 있다.
사용 시 주의.
: 절대 사용하지 말자. but 테스트 데이터를 강제로 만들 때에는 자주 사용함.
-- 오라클 방식
select e.ename , d.dname 2 from emp e, dept d ;
-- ansi 방식.
select e.ename , d.dname 2 from emp e cross join dept d ;
<--이런식으로 join했음을 표시한다.
예시 :
select count(*) from emp -- 14건
select count(*) from dept -- 4건
select * from emp,dept -- cross join. 14*4=56
예시 :
select ename,deptno,dname from emp,dept
-- 오류 : column ambiguously defined
컬럼명이 겹쳐서 컬럼을 어디서 가져와야할지 모르겠다는 오류문구
-- 두개테이블의 컬럼명이 같은 경우 반드시 테이블명을 명시해야 함.
컬럼이 다른 경우 테이블명을 생략할 수 있다.
select ename,emp.deptno,dept.deptno,dname from emp,dept
2. 등가 조인.(equi jion)
: 두개의 테이블을 연결해주는 컬럼으로 레코드를 조회. ( 기본적인 jion 방법)
연결 컬럼의 값이 같은 경우 연결.
학생테이블(student),학과테이블(department)를 사용하여
학생이름(name),전공학과1(deptno1),전공학과이름(deptno) 출력하기.
-- 오라클 방식.
select s.name,s.deptno1,d.dname from student s,department d where s.deptno1 = d.deptno;
-- ansi 방식.
select s.name,s.deptno1,d.dname from student s join department d on s.deptno1 = d.deptno;
예시 :
select e.ename,e.deptno,d.deptno,d.dname from emp e,dept d where e.deptno = d.deptno;
select e.ename,e.deptno,d.dname from emp e,dept d where e.deptno = d.deptno;
문제 :
1. emp 테이블의 사원이름,부서코드(deptno)와 dept테이블의 부서이름 조회하기.
-- 오라클 방식
select e.ename,e.deptno, d.dname from emp e,dept d where e.deptno = d.deptno;
-- ansi 방식
select e.ename,e.deptno, d.dname from emp e join dept d on e.deptno = d.deptno;
문제 :
2. 학생테이블과 교수테이블을 이용하여 학생의이름(name),지도교수번호(profno),
지도교수이름(name)을 조회하기. 지도교수가 없는 학생은 조회하지 않는다.
-- 오라클 방식
select s.name 학생이름,s.profno 지도교수번호,p.name 교수이름
from student s, professor p where s.profno = p.profno and s.profno is not null;
-- ansi 방식
select s.name 학생이름,s.profno 지도교수번호,p.name 교수이름
from student s join professor p on s.profno = p.profno where s.profno is not null;
문제 :
3. 학생테이블과 교수테이블을 이용하여 오나라 학생의이름(name),지도교수번호(profno),
지도교수이름(name)을 조회하기. 지도교수가 없는 학생은 조회하지 않는다.
-- 오라클 방식
select s.name,s.profno,p.name from student s,professor p
where s.profno=p.profno and s.name = '오나라';
-- ansi 방식
select s.name,s.profno,p.name from student s join professor p on s.profno=p.profno
where s.name = '오나라';
문제 :
4. 학생의이름(name-student),학과이름(dname-department),지도교수이름(name-professor)을
조회하기.
-- 오라클 방식
select s.name 학생이름, d.dname 학과이름, p.name 지도교수이름
from student s,department d,professor p where s.deptno1=d.deptno and s.profno=p.profno;
--ansi 방식
select s.name 학생이름, d.dname 학과이름, p.name 지도교수이름
from student s join department d on s.deptno1 = d.deptno
join professor p on s.profno = p.profno;
'수업(국비지원) > Oracle' 카테고리의 다른 글
| [Oracle] Sub Query (0) | 2023.04.14 |
|---|---|
| [Oracle] 비등가 조인(non equi join), 아우터 조인(outer join) (0) | 2023.04.14 |
| [Oracle] SQL 복수행 함수(그룹함수) - rownum, rowid 오라클 예약어 (0) | 2023.04.14 |
| [Oracle] SQL 복수행 함수(그룹함수) - having, group by (0) | 2023.04.14 |
| [Oracle] SQL 복수행 함수(그룹함수) - max(), min(), stddev(), variance() (0) | 2023.04.14 |