본문 바로가기

ORACLE11g/SQL

[11gSQL] JOIN 간단한 예제 예제1> 각 사원의 정보와 해당 사원이 근무하는 부서, 그리고 각 부서가 위치한 도시명도 표시해보라. 차근차근 답을 찾아가는 과정~ SQL> SELECT * FROM emp1; SQL> SELECT * FROM dept1; SQL> SELECT * FROM loc1; SQL> SELECT * FROM emp1, dept1 ORDER BY 1; SQL> SELECT * FROM emp1 e, dept1 d WHERE e.deptno = d.deptno; SQL> SELECT * FROM emp1 e, dept1 d, loc1 l WHERE e.deptno = d.deptno ORDER BY 1; 첫번째 방법. 두 번째 방법. ** 재료집합의 갯수와 조인조건의 갯수 조인조건의 갯수 = 재료집합의 갯수 -1개.. 더보기
[11gSQL] Non-Equi JOIN, Self JOIN %% Non-Equi Join비교 조건이 (=)이 아닌 조인을 말함 예를들면 아래와 같은 조인. %% Self-Join말 그대로 자기 자신과 조인하는 것을 말함.합치고자 하는 데이터가 같은 테이블에 존재할 경우 사용할 수 있다. SELECT empno, ename, mgr FROM emp의 결과값과SELECT empno, ename FROM emp의 결과값을 조인하여 조회하고 싶을 경우에.. 이 결과값과 이 결과값을 조인하면아래와 같은 쿼리문을 사용할 수 있다. 서브쿼리를 이용하여 조인하는 방법. 자기 자신인 emp 테이블을 a와 b로 선언하여 조인하는 방법. JOIN절을 사용하여 조회하는 방법. 더보기
[11gSQL] 6장 Equi JOIN(동등 조인) # Test용 Table생성 drop table loc1 purge; drop table dept1 purge; drop table emp1 purge; create table loc1 as select location_id as loc_id, city as city from locations; create table dept1 as select department_id as deptno, department_name as dname, manager_id as mgr, location_id as loc_id from departments; create table emp1 as select employee_id as empno, last_name as ename, salary as sal,manager_i.. 더보기
[11gSQL] Optimizer 실행 계획 확인 Optimizer에 대한 간략한 정보 ・Oracle Optimizer는 쿼리문을 분석하여 실행계획을 라이브러리 캐시 영역에 저장한다. ・Optimizer는 "Bester"가 아닌 "Optimizer(최적화)"이다. ・여러 번의 시행착오를 통해 최고의 결과를 만들어 내는 것이 아니라, 실행해 보기 전에 어떻게 처리할 것인가를 결정하는 것이다. ・Optimizer를 통해 최고의 결과를 얻으려면, 실행 계획을 획득할 줄 알아야 하며, 그 실행 계획을 해석할 줄 알아야 한다. 이를 통해 Optimizer가 좀 더 좋은 실행계획을 얻을 수 있도록 여러 Tuning 기법을 통해 최적의 결과를 유도할 줄 알아야 한다. 여기서는 실행 계획을 확인 하는 방법중의 하나인 Auto Trace를 이용해, 이전 포스팅에서 사용.. 더보기
[11gSQL] 8장 UNION, MINUS, ROLLUP #8-4 간단한 몸풀기 10번과 20번 부서에 속한 사원에서 20번과 30번 부서에 속한 사원을 빼보았다. 같은 쿼리에서 아래쪽에만 Alias를 줘 보았다.아무런 차이가 없다. 이번엔 위쪽에 Alias를 줘 보았다.조회된 컬럼의 이름이 바뀌었다. 조회된 결과값을 컬럼명으로 정렬하려고 했지만 오류가 발생했다. Alias명으로 정렬하니 쿼리문에 오류가 발생하지 않았다. 문제> 아래의 결과처럼 나오도록 쿼리문을 작성하시오. 역시 한번에 답을 찾아내는 것은 어려우므로천천히 답을 찾아가 보도록 하겠습니다. 우선 부서별, job별 급여 합계를 조회해봅니다. 부서별 급여 합계도 조회해보고.. 전체 급여 합계도 조회합니다. 위에 조회한 내용들을 UNION(합집합) 함수를 이용해서 합치면....오류가 발생합니다.이는 합.. 더보기
[11gSQL] 5장 GROUP BY 몸풀기! COUNT() 함수. GROUP BY를 이용하여 직업 별로 급여 평균을 표시하기. COL FORMAT은 Alias에도 지정할 수 있다. 직원들의 입사일자를 분기로 표시하기. 간단한 예제를 통해서 공부하기. 문제1> 부서별 사원수를 count 하시오. 문제2> 분기별 입사 인원수를 count 하시오. GROUP BY 함수는 Alias를 사용할 수 없음. 문제3> 입사 년도별 인원수를 count 하시오. (Row단위 grouping -> Col단위 grouping) 위와 같이 하면 쉽게 Row단위로 grouping 할 수 있다. 이번에는 Col 단위로 grouping 해보자. 한 번에 원하는 결과에 도달하기는 어려우므로 차근 차근 답을 찾아가는 과정이 필요하다.우선은 1982년에 입사한 사람은 1로.. 더보기
[11gSQL] 조건문 간단한 문제 JOB이 'CLERK'이면 (sal + comm) * 0.00145를 'SALESMAN'이면 (sal + comm) * 0.00147을 'MANAGER'이면 (sal + comm) * 0.00149를 나머지는 모두 (sal + comm) * 0.00150을세금으로 징수하는 쿼리문을 작성하라. 1) Simple CASE로 작성한 쿼리문. 2) Searched CASE로 작성한 쿼리문. 3) DECODE함수 로 작성한 쿼리문 더보기
[11gSQL] 4장 날짜,화폐단위 변경 및 조건문 # 4-17 데이터베이스에서 임의로 금액을 출력해 보았다. 화폐의 단위가 '달러'로 나오고 있다. '원'으로 바꿔보자. 현재 환경 변수는 이렇게 설정되어 있고 이렇게 변경해주면 (서버와는 관계없고 클라이언트의 설정을 바꾼 것임) '원' 단위로 변경되었다. set NLS_LANG=AMERICAN_KOREA.KO16MSWIN949 AMERICAN : Display 되는 message의 언어KOREA : 날짜형식, 숫자형식, 화폐단위KO16MSWIN949 : Client측의 Character Set 이번엔 스페인어로도 바꿔보았다. # 4-38 조건문을 배워보자. 조건문에는 크게 3가지가 있는데, Simple CASESeached CASE그리고, DECODE 함수를 사용하는 방법이 있다. 부서번호가 10번이면 .. 더보기
[11gSQL] 4장 날짜 포맷(Date Format) # 각 날짜 데이터를 포맷별로 출력해보기 월과 일에 0 없이 출력하기 월에만 0없이 출력하기 날짜에 대한 분기로 출력하기 # 4-11모든 사원을 입사한 요일(월요일부터)로 정렬해 보자 우선 요일을 출력하도록 쿼리문을 작성한다. 그 다음 요일로 정렬을 해 보니.. ABC 순서로 정렬되고 있다... 요일을 숫자로 나타내도록 쿼리문을 작성해보았다. 일요일이 1이고 월 화 수로 1씩 증가한다. 정렬을 해 보았다. 이게 아닌데.. 월요일부터 정렬되어야 한다. 요일을 나타내는 숫자에서 1씩을 빼 보았다. 자동으로 월요일이 1이 되고 1씩 증가하는 형태로 바뀌었다. 정렬에도 깔끔하게 성공하였다. 이제 요일을 숫자로 출력하는 속성을 제외하고 조회하면 원하던 결과를 얻었다. #4-14 날짜 포맷 모델의 요소 이렇게도 출.. 더보기
[11gSQL] 3장 함수 # 3-4 SQL> SELECT ceil(123.43), floor(123.43) FROM dual; CEIL(123.43) FLOOR(123.43) ------------ ------------- 124 123 ceil(123.43) : 올림floor(123.43) : 버림 ◎함수의 매개변수로 사용 가능한 것 -리터럴SQL> SELECT initcap('kBS mbc') FROM dual; INITCAP('KBSMB--------------Kbs Mbc -컬럼명SQL> SELECT empno, ename, initcap(ename) FROM emp; EMPNO ENAME INITCAP(ENAME)---------- -------------------- -------------------- 7369 SM.. 더보기