본문 바로가기
DB/Oracle SQL Developer

<15, 16> JOIN : 등가조인, 비등가조인, 잘못된 조인(Cross Join)

by 코딩 뉴비 2020. 12. 2.
[JOIN]
; 관계형 데이터베이스 시스템 (Oracle, MySQL(Maria), SQL-Server(MS-SQL)... )
관계형 데이터베이스 : 테이블-테이블 연관관계를 맺고 있다.
ex) emp-dno : 사원이 어느 부서에 소속되어 있는지..
              emp의 dno정보를 가지고 연관성 있는 dept 테이블에서 연관성을 찾아야 한다.
              dno라는 컬럼으로 연관을 맺고 있다. 
    dept-dno : 사원번호
    김연아 02 - 02 회계부서
    
    
  1) 각 사원의 근무 부서를 검색한다
  
SELECT dno 부서번호, eno 사번, ename 이름
FROM emp;

--등가조인 ; 같은 값을 연결시켰다.
--        :  두 테이블의 공통 컬럼을 = 연산자로 조건을 부여한 것
  
SELECT eno 사번, ename 이름, emp.dno 부서번호, --(=dept.dno 부서번호)
        dept.dno 부서번호, dname 부서명
 FROM emp, dept    --dno가 공통(이름, 자료형 모두 같아야 함. dno: varchar2로 같음)
WHERE emp.dno = dept.dno;


 2) 광주에서 근무하는 직원의 명단을 검색 (부서번호와 부서명도)
 
 SELECT loc 위치, dept.dno 부서, dname 부서명, eno 사번, ename 사원명
 FROM emp, dept
 WHERE emp.dno=dept.dno
 AND loc='광주';
 
  SELECT loc 위치, d.dno 부서, dname 부서명, eno 사번, ename 사원명
 FROM emp e, dept d
 WHERE e.dno=d.dno
 AND loc='광주';
 
 
-- 비등가 조인
3) 각 직원의 급여를 10% 인상한 경우 급여 등급을 검색한다.
SELECT eno 사번, ename 이름,
        sal*1.1 "인상 급여", grade 등급
FROM emp, salgrade
WHERE sal*1.1 BETWEEN losal AND hisal;

-- 잘못된 조인(Cross Join)
: 조인 조건이 없으면 Cross Join 이라고 하며, 테이블들의 모든 행이 1:1로 교차하게 된다.
결과에 의미가 없다.

SELECT d.dno, dname, e.dno, ename
FROM dept d, emp e;

 

연습문제

--1) 송강 교수가 강의하는 과목을 검색한다 -김가경
SELECT p.pno 교수번호, pname 이름, cname "과목 이름"
FROM professor p, course c
WHERE p.pno = c.pno
AND pname= '송강';

--2) 화학 관련 과목을 강의하는 교수의 명단을 검색한다
SELECT p.pno 교수번호, pname 이름, orders 직위, cname 과목이름
FROM professor p, course c
WHERE cname LIKE '%화학%' AND p.pno=c.pno;

--3) 학점이 2학점인 과목과 이를 강의하는 교수를 검색한다
SELECT p.pno 교수번호, pname 교수이름, cname 과목이름
FROM course c, professor p
WHERE st_num='2' AND p.pno=c.pno;


--4) 화학과 교수가 강의하는 과목을 검색한다
SELECT p.pno 교수번호, pname 교수이름, cname 과목이름
FROM professor p, course c
WHERE p.pno=c.pno 
AND cname LIKE '%화학%';


--5) 화학과 1학년 학생의 기말고사 성적을 검색한다
SELECT s.sno 학번, major 학과, syear 학년, sname 이름, cname 과목이름, result 성적
FROM student s, score sc, course
WHERE syear ='1' AND major= '화학'
AND s.sno=sc.sno; 


--6) 일반화학 과목의 기말고사 점수를 검색한다
SELECT
FROM
WHERE v   


--7) 화학과 1학년 학생의 일반화학 기말고사 점수를 검색한다
--
--
--8) 화학과 1학년 학생이 수강하는 과목을 검색한다
--
--
--9) 유기화학 과목의 평가점수가 F인 학생의 명단을 검색한다
--
--

댓글