[SIST] Oracle_days12_JOIN 관련
·
TIL/Oracle
1. JOIN - 정규화(모델링)로 인해서 테이블이 쪼개져 있는 것을 같거나 서로 다른 두 개 이상의 테이블에서 컬럼을 검색(조회)하기 위해서 사용 - RDBMS = 관계형 데이터 모델을 사용하는 DBMS - 테이블과 테이블 간의 관계가 맺어져 있다. ( PK FK ) - 종류 8가지 > SELF JOIN > EQUI JOIN > NON-EQUI JOIN > INNER JOIN > OUTER JOIN > CROSS JOIN > ANTI JOIN > SEMI JOIN 1) SELF JOIN - 한 개의 테이블을 두 개의 테이블처럼 사용하기 위해 테이블 별칭을 사용하여 한 테이블을 자체적으로 JOIN하여 사용한다. - 테이블이 자신의 특정 컬럼을 참조하는 또 다른 하나의 컬럼을 가지고 있는 경우에 사용한다...
[SIST] Oracle_days11
·
TIL/Oracle
1. 만년달력 그리기 풀이1) IW로 주차를 계산하기 SELECT -- 일요일이라면 날짜(DD)를 찍고 나머지는 NULL로 찍겠다. NVL( MIN( DECODE(TO_CHAR(dates, 'D'), 1, TO_CHAR(dates, 'DD') ) ), ' ') 일 , NVL(MIN( DECODE(TO_CHAR(dates, 'D'), 2, TO_CHAR(dates, 'DD') ) ), ' ') 월 , NVL(MIN( DECODE(TO_CHAR(dates, 'D'), 3, TO_CHAR(dates, 'DD') ) ), ' ') 화 , NVL(MIN( DECODE(TO_CHAR(dates, 'D'), 4, TO_CHAR(dates, 'DD') ) ), ' ') 수 , NVL(MIN( DECODE(TO_CHAR..
[SIST] Oracle_days10
·
TIL/Oracle
1. 복습 문제 1번 문제는 오라클 자료형 문제로 days09에 정리한 것 참고! 2. emp 테이블에서 [년도별] [월별] 입사사원수 출력.( PIVOT() 함수 사용 ) [실행결과] 1982 1 0 0 0 0 0 0 0 0 0 0 0 1980 0 0 0 0 0 0 0 0 0 0 0 1 1981 0 2 0 1 1 1 0 0 2 0 1 2 SELECT * FROM (SELECT TO_CHAR(hiredate, 'YYYY') 입사년도, TO_CHAR(hiredate, 'FMMM') 입사월 FROM emp ) PIVOT(COUNT(*) FOR 입사월 IN(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)); 2-2. emp 테이블에서 각 JOB별 입사년도별 1월~ 12월 입사인원수 출력...
[SIST] Oracle_days09
·
TIL/Oracle
1. 복습 문제 문제1) emp 테이블의 각 JOB별 사원수 조회하기 SELECT * FROM (SELECT job FROM emp) PIVOT( COUNT(*) FOR job in('CLERK', 'SALESMAN', 'PRESIDENT', 'MANAGER', 'ANALYST' ) ); 문제2) emp 테이블에서 [JOB별로] 각 월별 입사한 사원의 수를 조회 방법1) COUNT, DECODE 사용 SELECT job, COUNT(*) , COUNT( DECODE( EXTRACT(MONTH FROM hiredate), 1, 'o' ) ) "1월" , COUNT( DECODE( EXTRACT(MONTH FROM hiredate), 2, 'o' ) ) "2월" , COUNT( DECODE( EXTRACT(..
[SIST] Oracle_days08
·
TIL/Oracle
오늘도 여러 문제를 풀면서 새로운 개념을 배웠다. 응용되는 문제는 git에 업로드 하였고, 새롭게 배운 내용들만 정리하였다. 1. FIRST_VALUE, LAST_VALUE 분석 함수 FIRST_VALUE는 분석 함수로 정렬된 값중에서 [현재 행까지의 첫 번째 값]을 반환한다. 만약 첫번째가 NULL이라면, IGNORE NULLS를 지정하지 않았다면 NULL을 반환하게 된다. LAST_VALUE 함수도 분석 함수로 정렬된 값중에서 [현재 행까지의 마지막 값]을 반환하는 함수이다. 【형식】 FIRST_VALUE ¦ LAST_VALUE (expr [IGNORE NULLS] ) OVER ( [PARTITION BY expr2] [,...] ORDER BY expr3 [collate_clause] [ASC ¦ ..
[SIST] Oracle_days07
·
TIL/Oracle
오늘도 여러 개의 문제를 풀고 중간 중간 새로운 개념을 배우거나 문제를 다 풀고 다른 문제에 새로운 개념을 적용하는 식으로 수업을 했다. 문제 중에 새로운 개념이 포함되거나 조금 어렵다고 느껴진 문제들을 정리하고 새로운 개념을 정리하려고한다! 1. [문제] 문제1) emp 에서 평균PAY 보다 같거나 큰 사원들만의 급여 합을 출력. 풀이1) 풀이2) 문제2) emp 테이블의 ename, pay, 최대pay값(5000)을 100%로 계산해서 각 사원의 pay를 백분률로 계산해서 10% 당 별하나(*)로 처리해서 출력 ( 소숫점 첫 째 자리에서 반올림해서 출력 ) 문제3) insa 테이블에서 '2022.10.10'을 기준으로 아래와 같이 출력하는 쿼리 작성. 풀이1) CASE 사용 풀이2) DECODE 사용..
[SIST] Oracle_days06
·
TIL/Oracle
1. 집계함수 == 그룹함수 == 복수행 함수 *** 주의할 점) NULL 값을 제외한 *** 1) SUM(n) : NULL 값을 제외한 n의 합계 2) AVG(n) : NULL 값을 제외한 N개 행의 평균값을 리턴한다. 3) COUNT(n) : NULL을 제외한 행의 갯수를 리턴한다. COUNT(*)은 NULL 값을 포함한 행(레코드)갯수. 4) MAX() : 최대값을 리턴한다. 5) MIN() : 최소값을 리턴한다. 6) STDDEV(n) : NULL 값을 제외한표준편차 구하는 함수 7) VARIANCE(n) : NULL 값을 제외한 분산값 구하는 함수 예제1) emp 테이블에서 최고급여액을 받는 사원의 정보를 출력 예제2) emp 테이블에서 최저급여를 받는 사원의 정보를 출력 예제3) emp 테이블..
[SIST] Oracle_days05
·
TIL/Oracle
1. 문제 풀기 아침마다 수업 시작하시기 전에 여러 개의 문제를 내주시는데 새롭게 배운 내용이 있는 것만 정리하였다. 문제1) insa 테이블에서 남자는 'X', 여자는 'O' 로 성별(gender) 출력하는 쿼리 작성 풀이1) 풀이2) NULLIF 함수 사용 - NULLIF( ) 함수 두 개의 값을 비교하여 두 개의 값이 같으면 NULL 값을 반환 같지 않으면 첫번째 값을 반환해주는 함수 문제2) emp 테이블에서 사원명(ename)에 'e'문자를 포함한 사원을 검색해서 아래와 같이 출력. - 주석처리 한 쿼리로도 검색해서 출력할 수 있다. ' :변수명 ' 위의 ':변수명'을 바인드 변수라고 하며, 세션(session)이 유지되는 동안 사용할 수 있는 변수이다. 바인드 변수를 사용하면 아래와 같이 입력..
[SIST] Oracle_days04
·
TIL/Oracle
1. 서브쿼리(subquery) 1) 하나의 SQL 문장의 절에 부속된(있는) 또 다른 SELECT 문장으로, 두 번의 질의를 수행해야 얻을 수 있는 결과를 한 번의 질의로 해결할 수 있는 문장이다. 2) subquery에는 두 종류의 연산자가 사용되며, 연산자의 오른쪽에 서브쿼리가 ( ) 묶여져 있다. -> 연산자 + (서브쿼리) - 결과로 하나의 행을 반환하는 연산자 >, =, - 결과로 여러 행을 반환하는 SQL 연산자 IN, ANY, ALL 3) 질의가 미지정된 값을 근거로 할 때 유용하다. 4) 서브쿼리는 메인쿼리의 조건으로도 사용된다. WHERE 조건절 안에 (서브쿼리) 5) 서브쿼리의 결과는 main out query에 의해 사용된다. 6) 실행 순서 : 서브쿼리 먼저 실행 -> 그 결과를 ..