riboooo
Daily Traveler 리보
riboooo
전체 방문자
오늘
어제
  • 분류 전체보기 (71)
    • 프로젝트,발표 (2)
    • IT (67)
      • HTML ,CSS (3)
      • JAVA (22)
      • SQL (37)
      • 자료구조,알고리즘 (0)
      • PYTHON (4)
      • 보안 (0)
      • 서버 구축 (0)
      • GITHUB (1)
    • About ribo (2)
      • 커리어 (1)
      • 회고록 (1)
      • 버킷리스트 (0)
      • 일기 (0)
      • 잡담 (0)
    • 책 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • prewise
  • ORACLE CASE
  • non-prewise
  • 시간 중복 활용
  • inspectdb
  • ORACLE 조건문
  • INSTALLED_APPS
  • ORACLE 날짜 관련 함수
  • 자바코딩컨벤션
  • 네이버핵데이
  • ORACLE 숫자 함수
  • django설계
  • 오라클
  • Django
  • java
  • SQL
  • oracle
  • join
  • ORACLE NULL 함수
  • select

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
riboooo

Daily Traveler 리보

[ORACLE / ANSI] JOIN
IT/SQL

[ORACLE / ANSI] JOIN

2020. 7. 2. 17:27

⭐ RDBMS는 중복을 최소화하는 형태의 데이터베이스

컬럼을 확장하는 방법(데이터를 연결)
분산된 다른 테이블의 컬럼을 가져온다.

ANSI - SQL (American National Standards Institute)

ANSI - NATURAL JOIN

조인하고자 하는 테이블간 컬럼명이 동일할경우 해당 칼럼으로 행을 연결
컬럼 이름뿐 아니라 데이터 타입도 동일해야함

SELECT [colummn]
FROM [table1] NATURAL JOIN [table2]

SELECT * 
FROM emp NATURAL JOIN dept;

SELECT emp.empno, emp.ename, deptno, dept.dname  -- 조인조건으로 사용된 컬럼은 테이블 한정자를 붙이면 에러
FROM emp NATURAL JOIN dept;

ANSI - JOIN with USING

조인 테이블간 동일한 이름의 컬럼이 복수개 인데
이름이 같은 칼럼중 일부로만 조인을 하고 싶을 때 사용

SELECT [colummn]
FROM [table1] JOIN [table2] USING (colummn)

SELECT *
FROM emp JOIN dept USING (deptno);

ANSI - JOIN with ON⭐⭐

NATURAL JOIN, JOIN with USING은 조인테이블의 조인컬럼명이 같아야하는 제약조건이 있음.
설계상 두 테이블 컬럼 이름이 다를경우 개발자가 직접 조인조건을 기술할 수 있도록 제공

SELECT [colummn]
FROM [table1] JOIN [table2] ON (table1.컬럼 = table2.컬럼)

SELECT *
FROM emp JOIN dept ON (emp.deptno = dept.deptno);

ORACLE - SQL⭐⭐

오라클에선 조인조건을 WHERE절에 기술

SELECT [colummn]
FROM [table1], [table2]
WHERE table1.컬럼 = table2.컬럼

SELECT emp.*, emp.deptno, dname
FROM emp, dept
WHERE emp.deptno = dept.deptno;

-- != 로도 연결이 가능함

SELECT emp.*, emp.deptno, dname
FROM emp, dept
WHERE emp.deptno != dept.deptno;

 

 

SELF-JOIN

ANSI SELF-JOIN

같은 테이블을 서로다른 alias로 명명해서 사용

SELECT [table.colummn] ...
FROM [table1] [1alias] *
JOIN** [table2] [2alias] ON (1alias.colummn = 2alias.colummn)

SELECT e.empno, e.ename, e.mgr, m.ename
FROM emp e JOIN emp m ON (e.mgr = m.empno);
--king 은 상사가 없음

ORACLE SELF-JOIN

같은 테이블을 서로다른 alias로 명명해서 사용같은 테이블을 서로다른 alias로 명명해서 사용같은 테이블을 서로다른 alias로 명명해서 사용

SELECT [colummn]
FROM [table] [alias1], [table] [alias2]
WHERE alias1.colm1 = alias2.colm2

SELECT e.empno, e.ename, e.mgr, m.ename
FROM emp e, emp m
WHERE e.mgr = m.empno AND (e.empno BETWEEN 7369 AND 7698) ;

 

nonequi join

조인 조건이 = 이 아닌 조인
ex) != 조인

--ANSI
SELECT empno, ename, sal, salgrade.grade
FROM emp JOIN salgrade
ON sal BETWEEN salgrade.losal AND salgrade.hisal;

--ORACLE 
SELECT empno, ename, sal, salgrade.grade
FROM emp, salgrade
WHERE sal BETWEEN salgrade.losal AND salgrade.hisal;

  • JOIN 실습

      --JOIN 실습 0
      SELECT empno, ename, emp.deptno, dname
      FROM emp, dept
      WHERE emp.deptno = dept.deptno;
    
      --JOIN 실습 0_1
      SELECT empno, ename, emp.deptno, dname
      FROM emp, dept
      WHERE emp.deptno = dept.deptno AND emp.deptno IN (10, 30);
    
      --JOIN 실습 0_2
      SELECT empno, ename,sal, emp.deptno, dname
      FROM emp, dept
      WHERE emp.deptno = dept.deptno AND emp.sal > 2500;
    
      --JOIN 실습 0_3
      SELECT empno, ename,sal, emp.deptno, dname
      FROM emp, dept
      WHERE emp.deptno = dept.deptno AND emp.sal > 2500 AND emp.empno > 7600;
반응형

'IT > SQL' 카테고리의 다른 글

[ORACLE]JOIN 의 종류 (OUTER, CROSS)  (0) 2020.07.08
[ORACLE] 쿼리 연습용 테이블 소스  (0) 2020.07.02
[ORACLE] GROUP BY 함수  (0) 2020.07.01
[ORACLE]SQL 조건문(Condition)  (0) 2020.07.01
[ORACLE] NULL 관련 함수  (0) 2020.06.30
    riboooo
    riboooo
    최준영 https://github.com/riboooo

    티스토리툴바