본문 바로가기
프로그래머/SQL(Oracle)

SQL)Oracle_SELECT_조인

by FourthWay 2023. 3. 13.
728x90
반응형

 

--[JOIN]

--; 관계형 데이터베이스 시스템
-- (Oracle, MySQL(Maria), SQL-Server(MS-SQL)...)
-- 테이블-테이블 연관 관계를 맺고 있다
-- ex) emp-dno : 사원이 어느 부서에 소속되어 있는지
--     dept-dno : 사원번호
--     김연아 02 - 02 회계부서

 

--1) 각 사원의 근무 부서를 검색한다

SELECT dno, eno, ename
 FROM emp;

 

--등가 조인

--; 두 테이블의 공통 컬럼을 = 연산자로 조건을 부여한 것

SELECT eno, ename, emp.dno, dept.dno, dname
 FROM dept, emp
 WHERE dept.dno=emp.dno;

 

--2) 광주에서 근무하는 직원의 명단을 검색하세요
--  (부서번호와 부서명도 검색하세요)

SELECT loc, eno, ename, dept.dno, dname
 FROM dept, emp
 WHERE dept.dno=emp.dno
 AND loc='광주';

 

 

 

--비등가 조인(특정값의 범위를 얻을 때)
--; 한 테이블의 특정값을 가지고,
-- 다른 테이블에서 범위 결과를 추출할 때


--3) 각 직원의 급여를 10%인상한 경우 급여 등급을 검색한다

 

SELECT eno, ename, sal 기존급여, sal*1.1 "10% 인상급여"
 FROM emp;

 

SELECT grade, sal*1.1 "10% 인상급여", eno, ename
 FROM salgrade, emp
 WHERE sal*1.1 BETWEEN losal AND hisal
 ORDER BY grade, sal*1.1 DESC;

 

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

 

SELECT *
 FROM emp, dept;

 

 

 

 

[Example]

1) 송강 교수가 강의하는 과목을 검색한다

SELECT pname 교수명, section 과목
FROM professor
WHERE pname IN('송강');

 

2) 화학 관련 과목을 강의하는 교수의 명단을 검색한다

SELECT pname 교수명, cname 과목
FROM professor p, course c
WHERE p.pno=c.pno
AND cname LIKE '%화학';


3) 학점이 2학점인 과목과 이를 강의하는 교수를 검색한다

SELECT p.pno 번호, pname 교수명, cname 과목, ST_NUM 학점
FROM course c, professor p
WHERE p.pno = c.pno
AND ST_NUM IN(2);

 

4) 화학과 교수가 강의하는 과목을 검색한다

SELECT p.pno 번호, pname 교수명, cname 과목명
FROM course c, professor p
WHERE c.pno=p.pno
AND section IN '화학';

 

5) 화학과 1학년 학생의 기말고사 성적을 검색한다

SELECT sname 학생명, syear 학년, major 과목명, result 성적
FROM student st, score sc
WHERE st.sno=sc.sno
AND syear IN (1) AND major IN '화학';


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

SELECT cname 과목, result 기말고사점수
FROM course c, score s
WHERE c.cno=s.cno
AND cname IN '일반화학';


7) 화학과 1학년 학생의 일반화학 기말고사 점수를 검색한다

SELECT sname 학생명, syear 학년, major, cname 학과, result
FROM score sc, student st, course c
WHERE sc.sno=st.sno AND sc.cno=c.cno
AND major IN '화학' AND cname IN '일반화학' AND syear IN (1);

 

8) 화학과 1학년 학생이 수강하는 과목을 검색한다

SELECT DISTINCT cname 과목
FROM student s, course c, score r
WHERE s.sno=r.sno AND r.cno=c.cno
AND major='화학' AND syear=1;


9) 유기화학 과목의 평가점수가 F인 학생의 명단을 검색한다

SELECT s.sno 번호, sname 학생명, cname 과목명, result, grade 평가점수
FROM course c, student s, score sc, scgrade g
WHERE c.cno=sc.cno AND s.sno=sc.sno
AND result BETWEEN LOSCORE AND HISCORE
AND cname='유기화학' AND grade='F';

 

728x90
반응형