퀴즈 피드백
ex. 학생의 이름과 학생의 학년, 학생의 지도교수 이름, 지도교수의 학과 번호, 지도교수가 속한 학과이름을 출력 => 지도교수가 속한 학과가 아니라 학생이 속한 학과를 조건으로 거는건 다른 문제 !!
: 여러 테이블을 하나의 테이블처럼 사용하는 조인 (가로로 연결)
: ansi (american national standards institute) => 미국 국립 표준 협회에서 제시한 sql에 대한 보편적인 문법
: Oracle JOIN => ansi join을 좀 더 편리하게 사용하기 위해 개발..
ex.
1. ANSI JOIN
SELECT a.col1, b.col1
FROM table1 a [INNER] JOIN table2 b
ON a.col2 = b.col2;
SELECT a.col1, b.col1
FROM table1 a, table2 b
WHERE a.col2 = b.col2;
: 조건이 없을 경우 모든 경우의 수 출력
SELECT *
FROM student, professor;
ex.
--ANSI
SELECT s.name stu_name, p.profno 교수번호, p.name prof_name
FROM student S INNER JOIN professor P
ON s.profno = p.profno;
--Oracle
SELECT s.name stu_name, p.name prof_name
FROM student S, professor P
WHERE s.profno = p.profno;
SELECT st.name, sc.total, ha.grade
FROM student st, score sc, hakjum ha
WHERE st.studno = sc.studno
AND sc.total BETWEEN ha.min_point AND ha.max_point;
ex.
-- ANSI
SELECT s.name "STU_NAME", p.name "PROF_NAME"
FROM student s LEFT OUTER JOIN professor p
ON s.profno = p.profno;
SELECT s.name "STU_NAME", p.name "PROF_NAME"
FROM student s RIGHT OUTER JOIN professor p
ON s.profno = p.profno;
-- Oracle
SELECT *
FROM student s, professor p
WHERE s.profno = p.profno(+); -- 왼쪽
SELECT *
FROM student s, professor p
WHERE s.profno(+) = p.profno; -- 오른쪽
ex.
-- 사원의 상사 사번 조회
SELECT e1.empno, e1.ename, e1.mgr, e2.empno 상사사번, e2.ename 상사이름
FROM emp e1, emp e2
WHERE e1.mgr = e2.empno;
: SQL문을 실행하는 데 필요한 데이터를 추가로 조회하기 위해 SQL문 내부에서 사용하는 SELECT 문
SELECT select_list
FROM TABLE 또는 View
WHERE 조건 연산자 ( SELECT select_list
FROM TABLE
WHERE 조건 ) ;
단일 행
다중 행
연산자 | 의미 |
---|---|
IN | 서브 쿼리 결과와 같은 값을 찾음 |
EXISTS | 서브 쿼리의 값이 있을 경우 메인 쿼리를 수행 |
>ANY | 서브 쿼리 결과 중에서 최솟값을 반환 |
<ANY | 서브 쿼리 결과 중에서 최댓값을 반환 |
>ALL | 서브 쿼리 결과 중에서 최솟값을 반환 |
<ALL | 서브 쿼리 결과 중에서 최댓값을 반환 |