일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 서블릿
- 자바I/O
- 테이블 설계
- 오라클
- 예제
- SQL
- 서블릿 파라미터
- DA#
- 컨텍스트 초기화 객체
- 자바공부
- 자바설치
- 스트림
- 설치방법
- 자바문제
- 자바
- OOP
- Servlet
- 입출력
- 서블릿 예제
- File
- java
- 자바객체
- 스택
- 조건문
- 자바기초
- 서블릿 값 가져오기
- 숫자야구
- 객체
- 자바 암호화
- 서블릿 동작방식
- Today
- Total
다양한 관심 :)
SQL (JOIN) 본문
JOIN
데이터결합 (JOIN)
WHERE + JOIN은 SELECT SQL의 모든 것 이라 할 수 있다 (그만큼 중요)
JOIN 은 다른 테이블과 연결하여 데이터를 확장하는 문법 (=컬럼을 확장)
** 행을 확장 - 집합연산자(UNION, INTERSECT, MINUS)
JOIN 문법 구분
- ANSI(미국 국립표준협회) - SQL
: RDBMS에서 사용하는 SQL표준
(표준을 잘 지킨 모든 RDBMS-MYSQL, MSSQL, POSTGRESQL...에서 실행가능)
2. ORACLE - SQL
: ORACLE사만의 고유문법 (직관적)
JOIN의 종류
NATURAL JOIN : 조인하고자 하는 테이블의 컬럼명이 같은 컬럼끼리 연결, 컬럼의 값이 같은 행들끼리 연결
예)
SELECT *
FROM emp e, dept d
WHERE e.deptno = d.deptno;
ANSI-SQL : SELECT 컬럼 FROM 테이블명 NATURAL JOIN 테이블명;
조인 컬럼에 테이블 한정자를 붙이면 NATURAL JOIN에서는 에러로 취급
emp.deptno (x) ==> deptno(o)
컬럼명이 한쪽 테이블에만 존재할 경우 테이블 한정자를 붙이지 않아도 상관없다.
emp.empno (O), empno (O)
표기방법
1. FROM절에 조인할 테이블을 나열한다(,)
2. WHERE절에 테이블 조인조건을 기술한다.
( 인라인뷰 별칭처럼, 테이블 별칭을 부여하는게 가능함, 컬럼과 다르게 AS키워드는 붙이지 않는다.)
ANSI-SQL : JOIN WITH USING (참고만)
조인 하려는 테이블간 같은 이름의 컬럼이 2개 이상일 때, 하나의 컬럼으로만 조인을 하고싶을때 사용
SELECT *
FROM emp JOIN dept USING (deptno);
SELECT * FROM emp JOIN dept USING (deptno);
JOIN WITH ON - 조인조건을 개발자가 직접기술
(NATURAL JOIN, JOIN WITH USING )절을 JOIN WITH ON 절을 통해 표현가능
SELECT * FROM emp JOIN dept ON (emp.deptno = dept.deptno) WHERE emp.deptno IN (20,30);
SELECT * FROM emp , dept WHERE emp.deptno = dept.deptno AND deptno IN (20,30);
논리적 형태에 따른 조인 구분
1. SELF JOIN : 조인하는 테이블이 서로 같은 경우
예제) 직원의 상급자 정보 구하기
SELECT e.empno, e.ename, e.mgr, m.ename
FROM emp e JOIN emp m ON( e.mgr = m.empno)
SELECT e.empno, e.ename, e.mgr, m.ename
FROM emp e, emp m
WHERE e.mgr = m.empno;
2.NONEQUI JOIN : 조인 조건이 =이 아닌 조인 (between사용)
예제) emp테이블에서 empno가 7369인 사원 조회
SELECT * FROM emp WHERE emp.empno = 7369;
조인 조건이 =이 아닌 조인
SELECT * FROM emp, dept WHERE emp.empno = 7369 AND emp.deptno != dept.deptno;
oracle 문법
SELECT empno,ename, sal, grade FROM emp, salgrade WHERE sal>=losal and sal<=hisal
WHERE sal Between losal and hisal
SELECT empno,ename, sal, grade
FROM emp, salgrade
WHERE sal>=losal and sal<=hisal
WHERE sal Between losal and hisal
ANSI-SQL
SELECT empno,ename, sal, grade
FROM emp join salgrade on(sal>=losal and sal<=hisal)
SELECT empno,ename, sal, grade
FROM emp join salgrade on(sal>=losal and sal<=hisal)
JOIN구분
1. 문법에 따른 구분 : ANSI-SQL, ORACLE
2. JOIN의 형태에 따른 구분 : S ELF-JOIN, NONEQUI-JOIN, CROSS-JOIN
3. JOIN의 성공여부에 따라 표시여부
: INNER JOIN - 조인이 성공했을 때 데이터를 표시
: OUTER JOIN - 조인이 실패해도 기준으로 정한 테이블의 컬럼정보는 표시
ORACLE - SQL : 데이터가 없는 쪽의 컬럼에 (+) 기호를 붙인자
ANSI-SQL : 테이블 반대편 테이블의 컬럼에 (+)을 붙인다.
(WHERE절 연결 조건에 적용)
*주의 ) 행에대한 제한조건 기술시 WHERE절에 기술 했을 때와 ON절에 기술 했을때 결과가 다르다.
데이터 결합 (full outer join) -사용x, 개념적으로만 알아두기
left와 right 중복데이터 제거 -> 집합의 개념
INNER join : 조인에 성공하는 데이터만 조회가 되는 조인방식 join 조건에 매칭되는 데이터만 조회
OUTER join : 조인에 실패해도 기준으로 정한 테이블의 컬럼은 조회가 되는 조인방식
CROSS join : 데이터 복제, 가공시 사용 JOIN조건을 기술하지 않는다.
'DataBase > Oracle' 카테고리의 다른 글
DBMS, 트랜잭션 (0) | 2020.10.10 |
---|---|
SQL 설치 (0) | 2020.10.10 |
DATABASE - ORACLE (오라클) 설치 (0) | 2020.10.10 |
ORACLE SQL (11g) - 설치시 테이블 생성, 사용자 추가, 권한 (0) | 2020.10.10 |
SQL (계정,권한설정) (0) | 2020.09.19 |