--[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';
'프로그래머 > SQL(Oracle)' 카테고리의 다른 글
SQL)Oracle_SELECT_Natural조인/Using절조 (0) | 2023.03.13 |
---|---|
SQL)Oracle_SELECT_자기참조조인/외부조인 (0) | 2023.03.13 |
SQL)Oracle_SELECT_ BEWEEN연산자/IN연산자 (0) | 2023.03.13 |
SQL)Oracle_SELECT_관계연산자와 LIKE연산자 (2) | 2023.03.13 |
SQL)Oracle_SELECT_WHERE절 (6) | 2023.03.13 |