일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- jsp 팝업띄우기
- 프로그래머스 쿼리문
- 오라클설치
- spring crud게시판
- 날짜지정팝업
- 스프링 CRUD게시판
- PLSQL
- 자바기초
- jsp게시판만들기
- 정처기실기정리
- 프로그래머스 SQL
- 2020정보처리기사실기요약
- 2020정보처리기사실기
- CRUD게시판만들기
- Oracle기초
- 2020정보처리기사실기정리
- 스프링게시판만들기
- 자바배열예제
- jsp 날짜팝업
- 자바연산자
- 정보처리기사실기정리
- 오버라이딩
- crud게시판
- 자바 정규표현식 예제
- js datepicker
- html기초
- 게시판만들기
- spring crud
- 스프링 crud
- 프로그래머스 MYSQL
- Today
- Total
영보의 SystemOut.log
[Oracle] JOIN / EQUI_JOIN / NON_EQUI_JOIN/ JOIN예제 본문
# JOIN
1) 하나의 SQL명령문에 의해 여러 테이블에 저장된 데이터를 한번에 조회할 수 있는 기능
2) 관계형 데이터베이스 분야의 표준
3) 두개 이상의 테이블을 '결합'한다는 의미
# JOIN 종류
INNER JOIN(교집합) => 다른 테이이블에서 데이터를 연결
EQUI_JOIN : = 연산자 |
1. Oracle JOIN : Oracle에서만 사용하는 쿼리 문장 형식) SELECT 컬럼명, 컬렴명... FROM 테이블명, 테이블명 WHERE 테이블명.col=테이블명.col ***컬럼명이 다른 경우에는 테이블(별칭). 생략이 가능 emp, dept |
2. ANSI JOIN : 전체 데이터베이스에서 사용하는 쿼리 형식) SELECT 컬럼명, 컬렴명... FROM 테이블명 (INNER)JOIN 테이블명 ON 테이블명.col=테이블명.col |
|
3. NATRUAL JOIN 형식) SELECT 컬럼명, 컬럼명... FROM emp NATURAL JOIN dept; |
|
4. JOIN~USI 형식) SELECT 컬럼명, 컬럼명... FROM emp JOIN dept USING(deptno); ===================3,4 반드시 같은 컬럼명이 존재 |
|
NON EQUI_JOIN : =이 아닌 연산자 |
|
OUTER JOIN => 다른 테이블에서 데이터를 연결 |
|
SELF JOIN => 같은 테이블에서 데이터 연결 |
# 삭제 연산
- DROP - 파일 통채로 다 없애버림
- TRUNCATE - 안에 있는 데이터만 잘라내버림
- DELETE - 하나씩 지움
# 조인 예제
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
--1. 직업이 SALESMAN인 사원들 중에서 최대 월급을 출력
SELECT MAX(sal) FROM emp WHERE job='SALESMAN';
--2 부서번호, 부서번호별 최대 월급을 출력
SELECT deptno, MAX(sal) FROM emp GROUP BY deptno;
--GROUP BY : 그룹별로 따로 계산이 가능하다
--3 위의 결과에서 20번은 제외하고 출력하시오
SELECT deptno, MAX(sal) FROM emp WHERE deptno<>20 GROUP BY deptno;
--4 직업, 직업별 최소 월급을 출력하는데, 직업이 SALESMAN인 사원들을 제외하고 출력하시오
SELECT MIN(sal) FROM emp WHERE job!='SALESMAN' GROUP BY job;
--5 위의 결과에서 최소 월급이 높은 것부터 출력하시오
--SELECT job, MIN(sal) FROM emp WHERE job!='SALESMAN' GROUP BY job ORDER BY MIN(sal) DESC;
--6 직업과 직업별 토탈 월급을 출력하는데, 직업별 토탈 월급이 4000이상인 것만 출력하시오
SELECT job, SUM(sal) FROM emp
--WHERE SUM(sal)>=4000 WHERE에서 집합 함수를 사용할 수 없다.
GROUP BY job HAVING SUM(sal)>=4000;
--7 직업, 직업별 토탈 월급을 출력하는데, 직업이 SALESMAN은 제외하고 출력하고, 직업별 토탈 월급이 4000 이상인 것만 출력하고 또 직업별 토탈 월급이 높은 것부터 출력하시오.
SELECT job, SUM(sal) FROM emp WHERE job!='SALESMAN' GROUP BY job HAVING SUM(sal)>=4000 ORDER BY 2 DESC;
--8 입사한 년도(4자리), 입사한 년도별 토탈 월급을 출력하시오
SELECT TO_CHAR(hiredate, 'RRRR'), SUM(sal) FROM emp GROUP BY TO_CHAR(hiredate, 'RRRR');
--9 위의 문제에서 토탈 월급을 출력할때 콤마가 찍히게 천단위를 부여하시오
--SELECT TO_CHAR(hiredate, 'RRRR'), TO_CHAR(SUM(sal),'99,999') FROM emp GROUP BY TO_CHAR(hiredate, 'RRRR');
--10 사원 테이블의 사원수가 몇명인지 조회하시오
SELECT COUNT(*) FROM emp;
-- 11 커미션을 카운트하시오
SELECT COUNT(comm) FROM emp;
-- 12 사원 테이블의 커미션의 평균 값을 출력하시오
SELECT ROUND(AVG(comm),2) FROM emp;
-- 13 직업, 직업별 인원수를 출력하는데, 직업이 SALESMAN은 제외하고 출력하고, 직업별 인원수가 3명 이상인 것만 출력하고, 직업별 인원수가 높은것 부터 출력하시오
SELECT job, COUNT(*) FROM emp WHERE job!='SALESMAN' GROUP BY job HAVING COUNT(*)>=3 ORDER BY 2 DESC;
-- 14 직업, 직업별 인원수를 출력하는데 직업별 인원수가 3명 이상인 것만 출력하시오
SELECT job, COUNT(*) FROM emp GROUP BY job HAVING COUNT(*)>=3;
-- 15 부서번호, 부서번호별 평균 월급을 출력하는데, 20번 부서번호는 제외하고 출력하고 부서번호별 평균 월급이 2000이상인 것만 출력하며, 부서번호별 평균 월급이 높은 것부터 출력하시오.
SELECT deptno, AVG(sal)
FROM emp
WHERE deptno!=20
GROUP BY deptno
HAVING AVG(sal)>=2000 ORDER BY 2 DESC;
-- 16 사원이름, 부서위치를 출력하시오
SELECT ename, loc FROM emp, dept WHERE emp.deptno=dept.deptno;
-- 17 직업이 SALESMAN인 사원들의 이름과 월급과 직업과 부서위치를 출력하시오
SELECT ename, sal, job, loc FROM emp, dept
WHERE emp.deptno=dept.deptno
AND job='SALESMAN';
-- 18 사원이름, 월급, 부서위치, 부서번호를 출력하세요
--같은 컬럼이면 가지고오는 테이블을 꼭 적어야한다.
SELECT ename, sal, loc, emp.deptno FROM emp, dept WHERE emp.deptno=dept.deptno;
-- 19 DALLAS에서 근무하는 사원들의 이름과 부서위치와 월급을 출력하시오
SELECT e.ename, e.sal, d.loc FROM emp e, dept d WHERE e.deptno= d.deptno AND d.loc ='DALLAS';
-- 20 월급이 3000이상인 사원들의 월급과 부서위치와 입사일을 출력하시오
SELECT ename, sal, loc, hiredate From emp, dept where emp.deptno=dept.deptno And sal>=3000;
-- 21 1981년도에 입사한 사원들의 이름과 입사일과 부서위치를 출력하시오
SELECT ename, hiredate, loc FROM emp, dept WHERE emp.deptno=dept.deptno
AND TO_CHAR(hiredate,'YYYY')=1981;
--AND SUBSTR(hiredate,1,2)=81;
--AND hiredate LIKE '81%';
-- AVG => ROUND
-- SUM => TO_CHAR(SUM(sal), '99,999')
-- 22 부서위치, 부서위치별 토탈월급을 출력하시오
SELECT loc, SUM(sal) FROM emp, dept WHERE emp.deptno=dept.deptno GROUP BY loc;
-- 23 위의 문제에서 토탈월급에 콤마를 찍어서 출력하시오
SELECT loc, TO_CHAR(SUM(sal), '99,999') FROM emp, dept WHERE emp.deptno=dept.deptno GROUP BY loc;
-- 24 emp테이블과 salgrade 테이블을 조인해서 이름과 월급과 grade(급여등급)을 출력하시오.
SELECT ename, sal, grade
FROM emp, salgrade s
WHERE sal BETWEEN s.losal AND s.hisal;
-- 25 사원이름, 자기의 직송상사의 이름을 출력하시오
SELECT e1.ename "본인이름", e2.ename "사수이름" FROM emp e1, emp e2 WHERE e1.mgr=e2.empno;
|
cs |
'Database > Oracle' 카테고리의 다른 글
[Oracle] Sub Query(서브쿼리) 종류와 예제(1) (0) | 2020.11.10 |
---|---|
[Oracle] DML / 데이터형 / Oralce 제약조건 (0) | 2020.08.18 |
[Oracle] SQL 복수행함수 / 그룹함수 / 집합함수 / SQL 함수 예제 (0) | 2020.08.11 |
[Oracle]Database(Oracle) 데이터 HTML에 출력하기 (0) | 2020.08.11 |
[Oracle] 단일행함수/ 오라클 함수/ 단일행 함수 예제 (0) | 2020.08.07 |