2023. 3. 30. 22:44ㆍ국비지원학원 oracle
1. 게시판 관리( SEQUENCE 시퀀스 생성/ ROW_NUMBER/ 관찰)
--ㅇSEQUENCE 시퀀스: 자동으로 순차적으로 증가하는 순번을 RETURN 해줌
EX) 게시판에 글을 쓸 때 이전 글 ID 값에 +1 을 하여 고유 ID를 부여한다고 할 때,
로직 짤 필요 없이 자동으로 RETURN 해줌
--TBL_AAA 테이블 생성, 수정 시도, 삭제
--ㅇ 테이블 생성
-- # 관찰
CREATE TABLE TBL_AAA
(NO NUMBER
,NAME VARCHAR2(40)
,GRADE CHAR
);
-- ==>> Table TBL_AAA이(가) 생성되었습니다.
--ㅇ 데이터 삽입
INSERT INTO TBL_AAA(NO, NAME, GRADE) VALUES(1, '한아현', 'A');
INSERT INTO TBL_AAA(NO, NAME, GRADE) VALUES(2, '최하경', 'B');
INSERT INTO TBL_AAA(NO, NAME, GRADE) VALUES(3, '강별희', 'A');
INSERT INTO TBL_AAA(NO, NAME, GRADE) VALUES(4, '주수인', 'C');
INSERT INTO TBL_AAA(NO, NAME, GRADE) VALUES(5, '문상훈', 'A');
INSERT INTO TBL_AAA(NO, NAME, GRADE) VALUES(6, '한아현', 'B');
INSERT INTO TBL_AAA(NO, NAME, GRADE) VALUES(7, '한아현', 'B');
--==>> 1 행 이(가) 삽입되었습니다. * 7
--ㅇ 커밋
COMMIT;
--==>> 커밋 완료.
SELECT *
FROM TBL_AAA;
/*
1 한아현 A
2 최하경 B
3 강별희 A
4 주수인 C
5 문상훈 A
6 한아현 B -----> 이 데이터를 고치고 싶다고 할 때
7 한아현 B
*/
--위 숫자 데이터는 시퀀스가 자동으로 부여해준 ID
--ㅇ 수정 시도
--ㅇ UPDATE
--이름이 한아현인 친구들 성적 A로 바꾸고 싶음, 우리는 6번 아현이만 고치고싶어!
UPDATE TBL_AAA --1
SET GRADE = 'A' --3
WHERE NAME = '한아현'; --2
--6번 아현이 고치고싶어서 성적 B인 애들 검색.
UPDATE TBL_AAA --1
SET GRADE = 'A' --3
WHERE GRADE = 'B'; --2
--두 조건 만족하는 6번 아현이만 바꾸고 싶음 . 그것도 2명임!!--> 이 조건으로는 UPDATE 사용 불가능함
UPDATE TBL_AAA --1
SET GRADE = 'A' --3
WHERE NAME = '한아현' AND GRADE = 'B'; --2 --> 고유 ID NO의 필요성을 보여주기 위해 관찰함
--ㅇ 관찰 완료, 테이블 삭제
DELETE
FROM TBL_AAA;
-- SEQ_BOARD 시퀀스와 게시판 TBL_BOARD 테이블 생성 후 고유번호 관찰 + ROW_NUMBER 로 줄세우기
--ㅇ SEQUENCE 생성(시퀀스, 주문번호)
-- -> 사전적인 의미: 1.(일련의) 연속적인 사건들 2.(사건, 행동 등의) 순서
--ㅇ 시퀀스 생성
-- SEQUENCE
CREATE SEQUENCE SEQ_BOARD -- 시퀀스 기본 생성 구문(MSSQL 의 IDENTITY 와 동일한 개념)
START WITH 1 -- 시작값
INCREMENT BY 1 -- 증가값
NOMAXVALUE -- 최대값 (크기 지정/ NOMAXVALUE -> 제한없음)
NOCACHE; -- 우리는 캐시 사용안함
--==>> Sequence SEQ_BOARD이(가) 생성되었습니다.
--캐시 = 은행 번호표의 비유, 12345 인데 34가 안오면 바로 5번임
--장점 : 미리 대기표 뽑아놔서 대기열 없음(빠름). 대신 34가 없어짐
--우리가 했던 것처럼 캐시 사용안하면 대기열은 있지만 34가 비진 않음...
--ㅇ 게시판 테이블 생성
CREATE TABLE TBL_BOARD -- TBL_BOARD 이름의 테이블 생성 -> 게시판
( NO NUMBER --게시물 번호 X--(사용자가 입력X)
, TITLE VARCHAR2(50) -- 게시물 제목 O--(사용자가 입력ㅇ)
, CONTENTS VARCHAR2(2000) -- 게시물 내용 O
, NAME VARCHAR2(30) -- 게시물 작성자 △
, PW VARCHAR2(40) -- 게시물 패스워드 △
, CREATED DATE DEFAULT SYSDATE -- 게시물 작성일 X
);
--==>> Table TBL_BOARD이(가) 생성되었습니다.
--ㅇ 게시판에 데이터 입력 -> 게시판에 게시물을 작성하는 상황
INSERT INTO TBL_BOARD VALUES
(게시물번호, 게시물제목, 게시물내용, 작성자, 패스워드, 작성일);
INSERT INTO TBL_BOARD VALUES
(SEQ_BOARD.NEXTVAL, '좋은아침입니다','화이팅합시다', '김기민', 'java006$', DEFAULT); --시퀀스가 발행해주는 VALUE 를 게시물번호로
--==>> 1 행 이(가) 삽입되었습니다.
INSERT INTO TBL_BOARD VALUES
(SEQ_BOARD.NEXTVAL, '건강관리','다들 건강 챙깁시다', '권희정', 'java006$', DEFAULT);
--==>> 1 행 이(가) 삽입되었습니다.
INSERT INTO TBL_BOARD VALUES
(SEQ_BOARD.NEXTVAL, '오늘은','점심 뭐 먹지...', '문상훈', 'java006$', DEFAULT);
--==>> 1 행 이(가) 삽입되었습니다.
INSERT INTO TBL_BOARD VALUES
(SEQ_BOARD.NEXTVAL, '술은','평일에 마시지 말아야지', '김재혁', 'java006$', DEFAULT);
--==>> 1 행 이(가) 삽입되었습니다.
INSERT INTO TBL_BOARD VALUES
(SEQ_BOARD.NEXTVAL, '오늘은','좀 많이 웃어야지', '김지혜', 'java006$', DEFAULT);
--==>> 1 행 이(가) 삽입되었습니다.
INSERT INTO TBL_BOARD VALUES
(SEQ_BOARD.NEXTVAL, '여러분','오타조심하세요', '윤희주', 'java006$', DEFAULT);
--==>> 1 행 이(가) 삽입되었습니다.
INSERT INTO TBL_BOARD VALUES
(SEQ_BOARD.NEXTVAL, '미세먼지','오늘은 좀 화창하네', '양연수', 'java006$', DEFAULT);
--==>> 1 행 이(가) 삽입되었습니다.
INSERT INTO TBL_BOARD VALUES
(SEQ_BOARD.NEXTVAL, '지하철','난 정말 지하철이 싫어요', '최하경', 'java006$', DEFAULT);
--==>> 1 행 이(가) 삽입되었습니다.
INSERT INTO TBL_BOARD VALUES
(SEQ_BOARD.NEXTVAL, '질문있습니다','생각나면 다시 질문할게요', '강별희', 'java006$', DEFAULT);
--==>> 1 행 이(가) 삽입되었습니다.
INSERT INTO TBL_BOARD VALUES
(SEQ_BOARD.NEXTVAL, '여기서는','칠판이 잘 안보여요', '한아현', 'java006$', DEFAULT);
--==>> 1 행 이(가) 삽입되었습니다.
--ㅇ 확인
SELECT *
FROM TBL_BOARD;
/*
1 좋은아침입니다 화이팅합시다 김기민 java006$ 23/03/30
2 건강관리 다들 건강 챙깁시다 권희정 java006$ 23/03/30
3 오늘은 점심 뭐 먹지... 문상훈 java006$ 23/03/30
4 술은 평일에 마시지 말아야지 김재혁 java006$ 23/03/30
5 오늘은 좀 많이 웃어야지 김지혜 java006$ 23/03/30
6 여러분 오타조심하세요 윤희주 java006$ 23/03/30
7 미세먼지 오늘은 좀 화창하네 양연수 java006$ 23/03/30
8 지하철 난 정말 지하철이 싫어요 최하경 java006$ 23/03/30
9 질문있습니다 생각나면 다시 질문할게요 강별희 java006$ 23/03/30
10 여기서는 칠판이 잘 안보여요 한아현 java006$ 23/03/30
*/
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD';
--==>> Session이(가) 변경되었습니다.
--ㅇ 커밋
COMMIT;
--==>> 커밋 완료.
--게시판에 게시물 작성과 삭제를 반복하며 글 번호 NO 가 어떻게 변하는지 관찰
--ㅇ 게시물 삭제
DELETE
FROM TBL_BOARD
WHERE NO=4;
--==>> 1 행 이(가) 삭제되었습니다.
--ㅇ 게시물 작성
INSERT INTO TBL_BOARD VALUES
(SEQ_BOARD.NEXTVAL, '저는요','글자가 작은게 좋아요', '박건우', 'java006$', DEFAULT);
--==>> 1 행 이(가) 삽입되었습니다.
--ㅇ 게시물 삭제
DELETE
FROM TBL_BOARD
WHERE NO=8;
--==>> 1 행 이(가) 삭제되었습니다.
--ㅇ 게시물 삭제
DELETE
FROM TBL_BOARD
WHERE NO=2;
--==>> 1 행 이(가) 삭제되었습니다.
--ㅇ 게시물 작성
INSERT INTO TBL_BOARD VALUES
(SEQ_BOARD.NEXTVAL, '이제는','속이 아주 편해졌어요', '이기배', 'java006$', DEFAULT);
--==>> 1 행 이(가) 삽입되었습니다.
--ㅇ 커밋
COMMIT;
--==>>커밋 완료.
--ㅇ 확인
SELECT *
FROM TBL_BOARD;
/*
1 좋은아침입니다 화이팅합시다 김기민 java006$ 2023-03-30
3 오늘은 점심 뭐 먹지... 문상훈 java006$ 2023-03-30
5 오늘은 좀 많이 웃어야지 김지혜 java006$ 2023-03-30
6 여러분 오타조심하세요 윤희주 java006$ 2023-03-30
7 미세먼지 오늘은 좀 화창하네 양연수 java006$ 2023-03-30
9 질문있습니다 생각나면 다시 질문할게요 강별희 java006$ 2023-03-30
10 여기서는 칠판이 잘 안보여요 한아현 java006$ 2023-03-30
11 저는요 글자가 작은게 좋아요 박건우 java006$ 2023-03-30
12 이제는 속이 아주 편해졌어요 이기배 java006$ 2023-03-30
*/
--# 위 사례처럼 게시판의 게시물 번호를
-- SEQUENCE 나 IDENTITIY 를 사용하게 되면
-- 게시물을 삭제했을 경우, 삭제한 게시물의 자리에
-- 다음 번호를 가진 게시물이 등록되는 상황이 발생하게 된다
-- 이는, 보안 측면에서나...미관상 바람직하지 않은 상황일 수 있기 때문에
-- ROW_NUMBER() 의 사용을 고려할 수 잇다.
-- 관리의 목적으로 사용할 때에는 SEQUENCE 나 IDENTITY 를 사용하지만
-- 단순히 게시물을 보기 편하도록 목록화하여 사용자에게 리스트 형식으로 보여줄 때는
-- 사용하지 않는게 좋다
--ㅇ ROW_NUMBER() 사용, 게시물 작성, 삭제하며 고유번호 관찰
SELECT ROW_NUMBER() OVER(ORDER BY CREATED) "글번호"
, TITLE "제목", NAME "작성자", CREATED "작성일"
FROM TBL_BOARD
ORDER BY 4 DESC;
--==>>
/*
9 이제는 이기배 2023-03-30
8 저는요 박건우 2023-03-30
7 여기서는 한아현 2023-03-30
6 질문있습니다 강별희 2023-03-30
5 미세먼지 양연수 2023-03-30
4 여러분 윤희주 2023-03-30
3 오늘은 김지혜 2023-03-30
2 오늘은 문상훈 2023-03-30
1 좋은아침입니다 김기민 2023-03-30
*/
--ㅇ 게시물 작성
INSERT INTO TBL_BOARD VALUES
(SEQ_BOARD.NEXTVAL, '오늘은','숨기지 않았어요', '최이서', 'java006$', DEFAULT);
--==>> 1 행 이(가) 삽입되었습니다.
SELECT ROW_NUMBER() OVER(ORDER BY CREATED) "글번호"
, TITLE "제목", NAME "작성자", CREATED "작성일"
FROM TBL_BOARD
ORDER BY 4 DESC;
/*
10 오늘은 최이서 2023-03-30
9 이제는 이기배 2023-03-30
8 저는요 박건우 2023-03-30
7 여기서는 한아현 2023-03-30
6 질문있습니다 강별희 2023-03-30
5 미세먼지 양연수 2023-03-30
4 여러분 윤희주 2023-03-30
3 오늘은 김지혜 2023-03-30
2 오늘은 문상훈 2023-03-30
1 좋은아침입니다 김기민 2023-03-30
*/
--ㅇ 게시물 삭제
DELETE
FROM TBL_BOARD
WHERE NO=7;
SELECT ROW_NUMBER() OVER(ORDER BY CREATED) "글번호"
, TITLE "제목", NAME "작성자", CREATED "작성일"
FROM TBL_BOARD
ORDER BY 4 DESC;
/*
9 오늘은 최이서 2023-03-30
8 이제는 이기배 2023-03-30
7 저는요 박건우 2023-03-30
6 여기서는 한아현 2023-03-30
5 질문있습니다 강별희 2023-03-30
4 여러분 윤희주 2023-03-30
3 오늘은 김지혜 2023-03-30
2 오늘은 문상훈 2023-03-30
1 좋은아침입니다 김기민 2023-03-30
*/
--ㅇ 커밋
COMMIT;
--==>> 커밋 완료.
결론: SEQUENCE 를 생성하여 게시물에 자동으로 고유 값을 부여하고,
미관을 위해 조건에 따라 각 행에 번호를 붙여주는 ROW_NUMBER 를 사용한다.
2. JOIN 조인
-- ㅇ 조인이란?
-- 각각의 독립적인 테이블들에 흩어진 데이터들을 조합하여 통합적 테이블을 만들어냄
--메모리를 효율적으로 가져오기 위해 정규화(큰 테이블 작은 조각 테이블들로 쪼개기) 를 하는데
-- 이때 여러 테이블에 흩어진 데이터들을 조합해서 가져오는 기술
--ㅇ SQL 1992 CODE 버전의 JOIN ( EQUI JOIN/ NON-EQUI JOIN/ EQUI JOIN 수행 시 [+] 를 활용한 결합 방법)
--ㅇ 아래와 같은 테이블 EMP 와 DEPT 가 있다고 가정. 조회
SELECT *
FROM EMP;
/*
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- ---------- ---------- ---------- ----------
7369 SMITH CLERK 7902 1980-12-17 800 20
7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30
7521 WARD SALESMAN 7698 1981-02-22 1250 500 30
7566 JONES MANAGER 7839 1981-04-02 2975 20
7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30
7698 BLAKE MANAGER 7839 1981-05-01 2850 30
7782 CLARK MANAGER 7839 1981-06-09 2450 10
7788 SCOTT ANALYST 7566 1987-07-13 3000 20
7839 KING PRESIDENT 1981-11-17 5000 10
7844 TURNER SALESMAN 7698 1981-09-08 1500 0 30
7876 ADAMS CLERK 7788 1987-07-13 1100 20
7900 JAMES CLERK 7698 1981-12-03 950 30
7902 FORD ANALYST 7566 1981-12-03 3000 20
7934 MILLER CLERK 7782 1982-01-23 1300 10
*/
SELECT *
FROM DEPT;
/*
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
*/
--ㅇ EQUI JOIN : 서로 정확히 일치하는 데이터들끼리 관계를 구성하여 연결시키는 결합
SELECT *
FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO;
SELECT *
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO;
/*
7782 CLARK MANAGER 7839 1981-06-09 2450 10 10 ACCOUNTING NEW YORK
7839 KING PRESIDENT 1981-11-17 5000 10 10 ACCOUNTING NEW YORK
7934 MILLER CLERK 7782 1982-01-23 1300 10 10 ACCOUNTING NEW YORK
7566 JONES MANAGER 7839 1981-04-02 2975 20 20 RESEARCH DALLAS
7902 FORD ANALYST 7566 1981-12-03 3000 20 20 RESEARCH DALLAS
7876 ADAMS CLERK 7788 1987-07-13 1100 20 20 RESEARCH DALLAS
7369 SMITH CLERK 7902 1980-12-17 800 20 20 RESEARCH DALLAS
7788 SCOTT ANALYST 7566 1987-07-13 3000 20 20 RESEARCH DALLAS
7521 WARD SALESMAN 7698 1981-02-22 1250 500 30 30 SALES CHICAGO
7844 TURNER SALESMAN 7698 1981-09-08 1500 0 30 30 SALES CHICAGO
7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30 30 SALES CHICAGO
7900 JAMES CLERK 7698 1981-12-03 950 30 30 SALES CHICAGO
7698 BLAKE MANAGER 7839 1981-05-01 2850 30 30 SALES CHICAGO
7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30 30 SALES CHICAGO
*/
--ㅇ NON-EQUI JOIN : 범위 안에 포함되는 적합한 데이터들끼리 연결시키는 결합
--(범위 내를 찾는 것이기에 완전 일치 데이터는 찾기 어려움)
SELECT *
FROM SALGRADE;
SELECT *
FROM EMP;
SELECT *
FROM EMP E, SALGRADE S
WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL; --최저 급여 --최고급여 사이면 출력
/*
7369 SMITH CLERK 7902 1980-12-17 800 20 1 700 1200
7900 JAMES CLERK 7698 1981-12-03 950 30 1 700 1200
7876 ADAMS CLERK 7788 1987-07-13 1100 20 1 700 1200
7521 WARD SALESMAN 7698 1981-02-22 1250 500 30 2 1201 1400
7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30 2 1201 1400
7934 MILLER CLERK 7782 1982-01-23 1300 10 2 1201 1400
7844 TURNER SALESMAN 7698 1981-09-08 1500 0 30 3 1401 2000
7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30 3 1401 2000
7782 CLARK MANAGER 7839 1981-06-09 2450 10 4 2001 3000
7698 BLAKE MANAGER 7839 1981-05-01 2850 30 4 2001 3000
7566 JONES MANAGER 7839 1981-04-02 2975 20 4 2001 3000
7788 SCOTT ANALYST 7566 1987-07-13 3000 20 4 2001 3000
7902 FORD ANALYST 7566 1981-12-03 3000 20 4 2001 3000
7839 KING PRESIDENT 1981-11-17 5000 10 5 3001 9999
*/
--ㅇ EQUI JOIN 수행 시 [+] 를 활용한 결합 방법
-- [+] 를 사용하지 않은 CASE 관찰
SELECT *
FROM TBL_EMP E, TBL_DEPT D
WHERE E.DEPTNO = D.DEPTNO;
--==>>
/*
7369 SMITH CLERK 7902 1980-12-17 800 20 20 RESEARCH DALLAS
7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30 30 SALES CHICAGO
7521 WARD SALESMAN 7698 1981-02-22 1250 500 30 30 SALES CHICAGO
7566 JONES MANAGER 7839 1981-04-02 2975 20 20 RESEARCH DALLAS
7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30 30 SALES CHICAGO
7698 BLAKE MANAGER 7839 1981-05-01 2850 30 30 SALES CHICAGO
7782 CLARK MANAGER 7839 1981-06-09 2450 10 10 ACCOUNTING NEW YORK
7788 SCOTT ANALYST 7566 1987-07-13 3000 20 20 RESEARCH DALLAS
7839 KING PRESIDENT 1981-11-17 5000 10 10 ACCOUNTING NEW YORK
7844 TURNER SALESMAN 7698 1981-09-08 1500 0 30 30 SALES CHICAGO
7876 ADAMS CLERK 7788 1987-07-13 1100 20 20 RESEARCH DALLAS
7900 JAMES CLERK 7698 1981-12-03 950 30 30 SALES CHICAGO
7902 FORD ANALYST 7566 1981-12-03 3000 20 20 RESEARCH DALLAS
7934 MILLER CLERK 7782 1982-01-23 1300 10 10 ACCOUNTING NEW YORK
*/
--> 총 14건의 데이터가 결합되어 조회된 상황
SELECT *
FROM TBL_EMP;
-- 인턴사원 5명(부서번호 없음) 은 조회되지 않는다. 부서 번호가 없어 연결이 불가능
-- 즉, 이 경우 부서번호를 갖지 못한 사원들은(5인) 모두 누락~!!
--ㅇ EQUI JOIN 수행 시 [+] 를 활용한 결합
SELECT *
FROM TBL_EMP E, TBL_DEPT D
WHERE E.DEPTNO = D.DEPTNO(+);
-------- -----------
-- 주재료 +1 부재료 (비유)
-- 주재료에 +a 로 주재료 데이터와 일치하는 부재료 조각을 연결한다
-- 부재료(부서정보) NULL 이어도 주재료(사원정보)에 갖다붙임
-- 일반 EQUI JOIN 과 달리 주재료 값이 NULL 이어도(연결될 데이터가 없어도) 누락없이 연결됨
--==>>
/*
7934 MILLER CLERK 7782 1982-01-23 1300 10 10 ACCOUNTING NEW YORK
7839 KING PRESIDENT 1981-11-17 5000 10 10 ACCOUNTING NEW YORK
7782 CLARK MANAGER 7839 1981-06-09 2450 10 10 ACCOUNTING NEW YORK
7902 FORD ANALYST 7566 1981-12-03 3000 20 20 RESEARCH DALLAS
7876 ADAMS CLERK 7788 1987-07-13 1100 20 20 RESEARCH DALLAS
7788 SCOTT ANALYST 7566 1987-07-13 3000 20 20 RESEARCH DALLAS
7566 JONES MANAGER 7839 1981-04-02 2975 20 20 RESEARCH DALLAS
7369 SMITH CLERK 7902 1980-12-17 800 20 20 RESEARCH DALLAS
7900 JAMES CLERK 7698 1981-12-03 950 30 30 SALES CHICAGO
7844 TURNER SALESMAN 7698 1981-09-08 1500 0 30 30 SALES CHICAGO
7698 BLAKE MANAGER 7839 1981-05-01 2850 30 30 SALES CHICAGO
7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30 30 SALES CHICAGO
7521 WARD SALESMAN 7698 1981-02-22 1250 500 30 30 SALES CHICAGO
7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30 30 SALES CHICAGO
8005 윤희주 SALESMAN 7698 2023-03-28 1000
8004 양연수 SALESMAN 7698 2023-03-28 2500
8003 최하경 SALESMAN 7698 2023-03-28 2000
8002 유서영 CLERK 7556 2023-03-28 1000 0
8001 최이서 CLERK 7556 2023-03-28 1500 10
*/
--> 총 19건의 데이터가 결합되어 조회된 상황
-- 즉, 부서번호를 갖지못한(null) 사원 5인 모두 조회된 상황~!!
SELECT *
FROM TBL_EMP E, TBL_DEPT D
WHERE E.DEPTNO(+) = D.DEPTNO;
-- ---------- --------
--- 부재료 주재료
/*
7369 SMITH CLERK 7902 1980-12-17 800 20 20 RESEARCH DALLAS
7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30 30 SALES CHICAGO
7521 WARD SALESMAN 7698 1981-02-22 1250 500 30 30 SALES CHICAGO
7566 JONES MANAGER 7839 1981-04-02 2975 20 20 RESEARCH DALLAS
7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30 30 SALES CHICAGO
7698 BLAKE MANAGER 7839 1981-05-01 2850 30 30 SALES CHICAGO
7782 CLARK MANAGER 7839 1981-06-09 2450 10 10 ACCOUNTING NEW YORK
7788 SCOTT ANALYST 7566 1987-07-13 3000 20 20 RESEARCH DALLAS
7839 KING PRESIDENT 1981-11-17 5000 10 10 ACCOUNTING NEW YORK
7844 TURNER SALESMAN 7698 1981-09-08 1500 0 30 30 SALES CHICAGO
7876 ADAMS CLERK 7788 1987-07-13 1100 20 20 RESEARCH DALLAS
7900 JAMES CLERK 7698 1981-12-03 950 30 30 SALES CHICAGO
7902 FORD ANALYST 7566 1981-12-03 3000 20 20 RESEARCH DALLAS
7934 MILLER CLERK 7782 1982-01-23 1300 10 10 ACCOUNTING NEW YORK
40 OPERATIONS BOSTON
*/
--> 총 15건 데이터가 결합돼 조회된 상황
-- 위 케이스와 반대로 부재료(사원정보) NULL 이어도 주재료(부서정보)에 갖다붙임
-- 즉, 부서에 소속된 사원이 아무도 없는 부서(1개, 40번) 도 모두 조회된 상황~!!
--# + 가 없는 쪽 테이블의 데이터를 모두 메모리에 우선 적재한 후
-- + 가 있는 쪽 테이블의 데이터를 하나하나 확인하여 결합시키는 형태로
-- JOIN 이 이루어진다
SELECT *
FROM TBL_EMP E, TBL_DEPT D
WHERE E.DEPTNO(+) = D.DEPTNO(+); --(X)
-- 이런 쿼리는 존재하지 않음
--ㅇ SQL 1999 CODE 버전 : INNER JOIN/ OUTER JOIN(LEFT, RIGHT, FULL)
---- [JOIN ] 키워드 등장
--- 결합 조건은 WHERE 대신 ON
--ㅇ INNER JOIN
-- 두 테이블의 교집합
--
3. UNION/ UNION ALL
'국비지원학원 oracle' 카테고리의 다른 글
오라클 팀 프로젝트 (0) | 2023.04.23 |
---|---|
230328 TIL (0) | 2023.03.30 |
230329 TIL (0) | 2023.03.29 |
230323 (0) | 2023.03.28 |
230322 테이블플레이스, 칼럼조회 (0) | 2023.03.28 |