JOIN (day58)

코딩기록·2024년 12월 31일

[ 📚 1. 기본 ]

🔸ANSI

-- SELECT [DISTINCT] { 열이름 .... } 
-- FROM  테이블 또는 뷰 이름
-- JOIN  테이블 또는 뷰 이름
-- ON    조인 조건
-- WHERE 조회 조건
-- GROUP BY  열을 그룹화
-- HAVING    그룹화 조건
-- ORDER BY  정렬할 열 [ASC | DESC];

🔸 Oracle

SELECT 열이름
FROM 테이블 1, 테이블 2
WHERE 조인 조건



[ 📚 2. Natural Join(ANSI) ]

  • 동일한 이름을 갖는 컬럼들에 대해 자동으로 조인조건을 생성
    SELECT 
       테이블1.컬럼1, **(테이블명 없이!).공통칼럼,** 테이블2.컬럼X
    FROM 
       테이블1
    **NATURAL** JOIN 
       테이블2;
       ```
       



[ 📚 3. Using Join(ANSI) ]

  • JOIN ON 과 동일 효과
    SELECT 
       E.emp_no
       , D.dept_nm
    FROM tb_emp E
    **JOIN** tb_dept D
     -- using ( 공통 칼럼(alias나 컬럼명 없이))
    **USING (dept_cd)**
    ;



[ 📚 4. CROSS JOIN(ANSI) ]

  • 두 테이블 간의 모든 조합 반환(예시: a 테이블 10행, b 테이블 4행이면, 10 x 4 = 40행 반환)
    SELECT
      *
    FROM testa
    CROSS JOIN test_b
    ;

<br><br>
## [ 📚 5. Self Join(ANSI) ] 

- 자기 자신과 조인(아래 예시: 직원 테이블(tb_emp)에서 각 직원의 매니저 이름을 알고 싶을 때.
### 🔸ANSI
```sql
SELECT
    E1.emp_no AS Employee_ID,
    E1.emp_nm AS Employee_Name,
    E2.emp_nm AS Manager_Name
FROM tb_emp E1
LEFT JOIN tb_emp E2
ON E1.mgr_id = E2.emp_no;

🔸Oracle 방언

SELECT
    E1.emp_no AS Employee_ID,
    E1.emp_nm AS Employee_Name,
    E2.emp_nm AS Manager_Name
FROM tb_emp E1, tb_emp E2
WHERE E1.mgr_id = E2.emp_no;

[ 📚 5. LEFT/RIGHT OUTER JOIN ]

🔸ANSI

SELECT
    E.emp_no,
    E.emp_nm,
    E.dept_cd,
    D.dept_name
FROM tb_emp E
LEFT OUTER JOIN tb_dept D
ON E.dept_cd = D.dept_cd;

🔸Oracle 방언

SELECT
   E.emp_no,
   E.emp_nm,
   E.dept_cd,
   D.dept_name
FROM tb_emp E, tb_dept D
WHERE E.dept_cd = D.dept_cd(+);

[ 📚 6. FULL OUTER JOIN ]

🔸ANSI(ORACLE 방언 없음)

SELECT
    E.emp_no,
    E.emp_nm,
    E.dept_cd,
    D.*
FROM tb_emp E
FULL OUTER JOIN tb_dept D
ON E.dept_cd = D.dept_cd;

0개의 댓글