[SQL/ORACLE] SQL 스터디_3일차

DANI·2023년 8월 27일
0

ORACLE_SQL

목록 보기
3/10
post-thumbnail

📕 3day 요약

1. 오라클 함수 - 형변환함수

2. 오라클 함수 - NULL 처리 함수

3. 문제 풀이

4. 다중행 함수(SUM, COUNT, MAX, MIN, AVG)

5. GROUP BY절

6. ROLLUP, CUBE

7. JOIN




📝 간략복습

📕

✏️

📖 1. 오라클 함수 - 형변환함수

📖 2. 오라클 함수 - NULL 처리 함수

📖 3. 문제 풀이

📖 4. 다중행 함수(SUM, COUNT, MAX, MIN, AVG)

📖 5. GROUP BY절

📖 6. ROLLUP, CUBE


📖 7. JOIN

여러 테이블을 하나의 테이블처럼 사용하는 조인

📌 조인 종류

  • 등가조인 : 조인 조건에 '='를 이용하는 조인
    - 등가 조인(equi join)
    • 내부 조인(inner join)
    • 단순 조인(simple join)
  • 비등가 조인 : 부등호가 포함된 조인 조건
    - 비등가 조인(non-equi join)

🔒 조회할 DEPT 테이블 데이터


🔒 조회할 EMP 테이블 데이터

🔒 조회할 SALGRADE 테이블 데이터


📌 등가조인

1. 🔍 FROM절에 여러 테이블 선언하기

💚 입력

SELECT *
FROM EMP, DEPT
ORDER BY EMPNO;

💙 출력

☑️ 결과행 일부만 출력 총 56행 출력됨

☑️ DEPT 테이블 (4행) X EMP 테이블 (14행) = 56행 : 데카르트의 곱(Cartesian Product)


❓ 데카르트의 곱(Cartesian Product) 이란?

데카르트 곱은 두 집합으로부터 각각 원소를 하나씩 고른 순서쌍으로 이루어진 집합을 만들어주는 연산


2. 🔍 등가조인

💚 입력

SELECT *
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO
ORDER BY EMPNO;

FROM EMP E, DEPT D "EMP"테이블을 "E"로 "DEPT"테이블을 "D"로 별칭
WHERE E.DEPTNO = D.DEPTNO 등가조인 "E"테이블의 "DEPTNO" 칼럼과 "D"테이블의 "DEPTNO"칼럼이 같은 것끼리 연결

💙 출력

☑️ "EMP"테이블의 "DEPTNO" 칼럼과 "DEPT"테이블의 "DEPTNO_1"칼럼이 기본키와 외래키가 되어 연결된다.

☑️ 테이블의 모든 열을 출력할지라도 "*"를 사용하지 않고 출력할 열을 하나하나 입력해 줌 (WHY? 어떤 열이 어떤 순서로 출력될지 명확히 알 수 없음 OR 특정 열이 새로 생기거나 삭제되거나 수정되었을 때 변화의 감지 및 수정이 어려울 수 있음)


3. 🔍 WHERE절에 추가로 조건식 넣어 출력하기

💚 입력

SELECT E.ENAME, E.JOB, E.DEPTNO, D.LOC, E.SAL
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO
AND E.SAL > 2000
ORDER BY EMPNO;

WHERE E.DEPTNO = D.DEPTNO AND E.SAL > 2000 "AND" 연산자로 추가로 조건식을 넣어준다

💙 출력


💡 조인 테이블 개수와 조건식 개수의 관계

  • 조건식이 최소한 전체 테이블 수보다 하나 적은 수
  • 테이블이 A,B,C라면 A와 B를 연결해 줄 열 하나, A와 B가 연결된 상태에서 C를 연결

3. 🔍 급여가 2500 이하이고 사원 번호가 9999 이하인 사원의 정보 출력하기

💚 입력

SELECT *
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO 
AND E.SAL <= 2500
AND E.EMPNO <= 9999;

💙 출력


📌 비등가조인

🔒 조회할 SALGRADE 테이블 데이터

🔒 조회할 EMP 테이블 데이터

1. 🔍 급여 범위를 지정하는 조건식으로 조인

💚 입력

SELECT *
FROM EMP E, SALGRADE S
WHRER E.SAL BETWEEN S.LOSAL AND S.HISAL;

💙 출력

📌 자체조인(self join)

하나의 테이블을 여러 개의 테이블처럼 활용하여 조인하는 방식

🔍 2. 자체조인 사용해보기

💚 입력

SELECT E1.EMPNO, E1.ENAME,E1.MGR, E2.ENAME AS MGR_NAME, E2.EMPNO AS MGR_EMPNO
FROM EMP E1, EMP E2
WHERE E1.MGR=E2.EMPNO;

💙 출력

☑️ "매니저가 있는" 사원들의 매니저 이름과 매니저의 사원번호가 출력됨

☑️ KING의 매니저 값은 NULL이므로 출력되지 않음


❓ E2 테이블 데이터 확인

💚 입력

SELECT E2.*
FROM EMP E1, EMP E2
WHERE E1.MGR=E2.EMPNO;

💙 출력

☑️ E2의 테이블에는 매니저들의 정보만 들어있다. (관리하는 아래 직원이 있는!!)

☑️ 총 13개의 행 ( KING의 매니저값은 NULL이다. ) / 매니저는 총 6명 (사원은 총 14명 : EMP테이블의 사원은 총 14명이고 KING의 매니저값이 NULL이다. )


📌 외부조인(Outer join)

한 쪽 열의 데이터값이 null이더라도 강제로 출력하는 방식

  • 왼쪽 외부 조인(Left Outer Jon) : WHERE TABLE1.COL1 = TABLE2.COL1(+)

  • 오른쪽 외부 조인(Right Outer Join) : WHERE TABLE1.COL1(+) = TABLE2.COL1(+)

    🔍3. 왼쪽 외부 조인 (위 자체조인의 쿼리 이용)

💚 입력

SELECT E1.EMPNO, E1.ENAME,E1.MGR, E2.ENAME AS MGR_NAME, E2.EMPNO AS MGR_EMPNO
FROM EMP E1, EMP E2
WHERE E1.MGR=E2.EMPNO(+);

💙 출력

☑️ 왼쪽테이블. 즉 E1의 테이블의 KING의 MGR값이 NULL임에도 결과가 출력됐다.

🔍4. 오른쪽 외부 조인 (위 자체조인의 쿼리 이용)

💚 입력

SELECT E1.EMPNO, E1.ENAME,E1.MGR, E2.ENAME AS MGR_NAME, E2.EMPNO AS MGR_EMPNO
FROM EMP E1, EMP E2
WHERE E1.MGR(+)=E2.EMPNO
ORDER BY E1.MGR ASC;

💙 출력

0개의 댓글