Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 나의 프로젝트
- 주식이야기
- Node.js
- express for node.js
- node.js web framework
- 베트남어
- scala
- 나의 취미
- ror실행
- C/C++
- nodejs express
- Lift
- 디즈니씨
- rss
- 메일왕창보내는법
- 명사 분석기
- Cross
- php
- php thumbnail
- ejb
- flex3
- iBatis
- 명사 추출기
- Eclipse
- 책이야기
- docker
- 스킨 스쿠버
- ajax
- 명사 뽑아내기
- 도커
Archives
- Today
- Total
nkdk의 세상
오라클 DB 설계 및 활용 5일째 2번째 내용 본문
꼭 foreign 이 아니더라도 공통 칼럼만 있다면 JOIN이 가능하다 그렇지 않다면 JOIN할 수 없다.
inner join과 outer join 이 있음
DESC SAWON;
ALTER TABLE SAWON MODIFY BUSER_NUM NUMBER(4) NULL;
UPDATE SAWON SET BUSER_NUM=NULL WHERE SAWON_NO=2;
SELECT * FROM SAWON;
SELECT * FROM BUSER;
INSERT INTO BUSER VALUES(50, '비서실', '서울', '02-511-4444')
*** JOIN: 하나 이상의 테이블로부터 원하는 컬럼 추출
-- CROSS JOIN
SELECT SAWON_NAME, BUSER_NAME FROM SAWON BUSER;
SELECT SAWON_NAME, BUSER_NAME FROM SAWON CROSS JOIN BUSER;
(두개는 서로 같으나 비활용적이라 쓰이지 않음)
-- JOIN(EQUI)
SELECT SAWON_NO, SAWON_NAME, BUSER_NAME FROM SAWON, BUSER WHERE BUSER_NUM=BUSER_NO;
(자주 쓰이는 문으로 숙지하고 있으면 활용성이 좋음)
FROM 값에서 테이블에 대한 별명을 줄 수 있다.
FROM SAWON S, BUSER B 이런식으로 별명 값을 줄 수 있다.
예)
SELECT S.SAWON_NO,S.SAWON_NAME, B.BUSER_NAME FROM SAWON S, BUSER B WHERE S.BUSER_NUM=B.BUSER_NO AND SAWON_JIK = '사원';
INNER조인의 대한 예)
공통 칼럼이 있을 경우에만 나오게 된다.
SELECT S.SAWON_NO,S.SAWON_NAME, B.BUSER_NAME FROM SAWON S, BUSER B WHERE S.BUSER_NUM=B.BUSER_NO AND BUSER_LOC = '서울';
SELECT SAWON_NO, SAWON_NAME, BUSER_NAME FROM SAWON INNER JOIN BUSER ON BUSER_NUM=BUSER_NO WHERE BUSER_LOC = '서울';
두개는 같은 명령이다. 서로 같은 값을 출력 한다.
-- NON-EQUI JOIN
CREATE TABLE PAYGRADE(GRADE NUMBER(1) PRIMARY KEY, LPAY NUMBER, HPAY NUMBER);
INSERT INTO PAYGRADE VALUES(1,0,1999);
INSERT INTO PAYGRADE VALUES(2,2000,2999);
INSERT INTO PAYGRADE VALUES(3,3000,3999);
INSERT INTO PAYGRADE VALUES(4,4000,4999);
INSERT INTO PAYGRADE VALUES(5,5000,9999);
SELECT * FROM PAYGRADE;
SELECT SAWON_NO, SAWON_NAME, GRADE FROM SAWON S, PAYGRADE P WHERE S.SAWON_PAY >= P.LPAY AND S.SAWON_PAY >= P.HPAY;
-- OUTER JOIN: INNER + 누락행 함께보기
(+) 첨가 : 한쪽 테이블에만 사용
누락 된 행의 반대쪽에 (+) 기호 표시
SELECT A.SAWON_NO, A.SAWON_NAME, B.BUSER_NAME FROM SAWON A, BUSER B WHERE A.BUSER_NUM=B.BUSER_NO;
NULL에 대한 값은 나오지 않는다.
RIGHT OUTER JOIN 예:
SELECT A.SAWON_NO, A.SAWON_NAME, B.BUSER_NAME FROM SAWON A, BUSER B WHERE A.BUSER_NUM(+)=B.BUSER_NO;
SELECT A.SAWON_NO, A.SAWON_NAME, B.BUSER_NAME FROM SAWON A RIGHT OUTER JOIN BUSER B ON A.BUSER_NUM=B.BUSER_NO;
2개가 모두 같은 말이다.
LEFT OUTER JOIN 예:
SELECT A.SAWON_NO, A.SAWON_NAME, B.BUSER_NAME FROM SAWON A, BUSER B WHERE A.BUSER_NUM=B.BUSER_NO(+);
SELECT A.SAWON_NO, A.SAWON_NAME, B.BUSER_NAME FROM SAWON A LEFT OUTER JOIN BUSER B ON A.BUSER_NUM=B.BUSER_NO;
연습) 부서명별 급여의 합을 구하시요.(부서가 없는 직원은 '계약직' 으로 표시)
SELECT NVL(BUSER_NAME, '계약직'), SUM(SAWON_PAY) FROM BUSER, SAWON WHERE BUSER_NUM=BUSER_NO(+) GROUP BY BUSER_NAME;
SELECT NVL(BUSER_NAME, '계약직'), SUM(SAWON_PAY) FROM BUSER RIGHT OUTER JOIN SAWON ON BUSER_NUM=BUSER_NO GROUP BY BUSER_NAME;
이렇게 2개의 방법이 있겠네요. 오츠까레 사마 데시따~ 밥 맛있게 먹읍시다. ^_^~
inner join과 outer join 이 있음
DESC SAWON;
ALTER TABLE SAWON MODIFY BUSER_NUM NUMBER(4) NULL;
UPDATE SAWON SET BUSER_NUM=NULL WHERE SAWON_NO=2;
SELECT * FROM SAWON;
SELECT * FROM BUSER;
INSERT INTO BUSER VALUES(50, '비서실', '서울', '02-511-4444')
*** JOIN: 하나 이상의 테이블로부터 원하는 컬럼 추출
-- CROSS JOIN
SELECT SAWON_NAME, BUSER_NAME FROM SAWON BUSER;
SELECT SAWON_NAME, BUSER_NAME FROM SAWON CROSS JOIN BUSER;
(두개는 서로 같으나 비활용적이라 쓰이지 않음)
-- JOIN(EQUI)
SELECT SAWON_NO, SAWON_NAME, BUSER_NAME FROM SAWON, BUSER WHERE BUSER_NUM=BUSER_NO;
(자주 쓰이는 문으로 숙지하고 있으면 활용성이 좋음)
FROM 값에서 테이블에 대한 별명을 줄 수 있다.
FROM SAWON S, BUSER B 이런식으로 별명 값을 줄 수 있다.
예)
SELECT S.SAWON_NO,S.SAWON_NAME, B.BUSER_NAME FROM SAWON S, BUSER B WHERE S.BUSER_NUM=B.BUSER_NO AND SAWON_JIK = '사원';
INNER조인의 대한 예)
공통 칼럼이 있을 경우에만 나오게 된다.
SELECT S.SAWON_NO,S.SAWON_NAME, B.BUSER_NAME FROM SAWON S, BUSER B WHERE S.BUSER_NUM=B.BUSER_NO AND BUSER_LOC = '서울';
SELECT SAWON_NO, SAWON_NAME, BUSER_NAME FROM SAWON INNER JOIN BUSER ON BUSER_NUM=BUSER_NO WHERE BUSER_LOC = '서울';
두개는 같은 명령이다. 서로 같은 값을 출력 한다.
-- NON-EQUI JOIN
CREATE TABLE PAYGRADE(GRADE NUMBER(1) PRIMARY KEY, LPAY NUMBER, HPAY NUMBER);
INSERT INTO PAYGRADE VALUES(1,0,1999);
INSERT INTO PAYGRADE VALUES(2,2000,2999);
INSERT INTO PAYGRADE VALUES(3,3000,3999);
INSERT INTO PAYGRADE VALUES(4,4000,4999);
INSERT INTO PAYGRADE VALUES(5,5000,9999);
SELECT * FROM PAYGRADE;
SELECT SAWON_NO, SAWON_NAME, GRADE FROM SAWON S, PAYGRADE P WHERE S.SAWON_PAY >= P.LPAY AND S.SAWON_PAY >= P.HPAY;

-- OUTER JOIN: INNER + 누락행 함께보기
(+) 첨가 : 한쪽 테이블에만 사용
누락 된 행의 반대쪽에 (+) 기호 표시
SELECT A.SAWON_NO, A.SAWON_NAME, B.BUSER_NAME FROM SAWON A, BUSER B WHERE A.BUSER_NUM=B.BUSER_NO;
NULL에 대한 값은 나오지 않는다.
RIGHT OUTER JOIN 예:
SELECT A.SAWON_NO, A.SAWON_NAME, B.BUSER_NAME FROM SAWON A, BUSER B WHERE A.BUSER_NUM(+)=B.BUSER_NO;
SELECT A.SAWON_NO, A.SAWON_NAME, B.BUSER_NAME FROM SAWON A RIGHT OUTER JOIN BUSER B ON A.BUSER_NUM=B.BUSER_NO;
2개가 모두 같은 말이다.
LEFT OUTER JOIN 예:
SELECT A.SAWON_NO, A.SAWON_NAME, B.BUSER_NAME FROM SAWON A, BUSER B WHERE A.BUSER_NUM=B.BUSER_NO(+);
SELECT A.SAWON_NO, A.SAWON_NAME, B.BUSER_NAME FROM SAWON A LEFT OUTER JOIN BUSER B ON A.BUSER_NUM=B.BUSER_NO;
연습) 부서명별 급여의 합을 구하시요.(부서가 없는 직원은 '계약직' 으로 표시)
SELECT NVL(BUSER_NAME, '계약직'), SUM(SAWON_PAY) FROM BUSER, SAWON WHERE BUSER_NUM=BUSER_NO(+) GROUP BY BUSER_NAME;
SELECT NVL(BUSER_NAME, '계약직'), SUM(SAWON_PAY) FROM BUSER RIGHT OUTER JOIN SAWON ON BUSER_NUM=BUSER_NO GROUP BY BUSER_NAME;
이렇게 2개의 방법이 있겠네요. 오츠까레 사마 데시따~ 밥 맛있게 먹읍시다. ^_^~