SQL

    [Oracle] JOIN (1) 등가조인(EQUAL JOIN), 내부조인(INNER JOIN)

    두 개 이상의 테이블에서 데이터를 조회하고자 할 때 사용되는 구문 조회 결과는 하나의 결과물(RESULT SET)로 나옴 관계형 데이터베이스는 최소한의 데이터로 각각의 테이블에 데이터를 담고 있음 (중복을 최소화하기 위해 최대한 쪼개서 관리함) -- 위의 두테이블에서 어떤 사원이 어떤 부서에 속해있는지 궁금함! 코드말고.. 이름으로.. => 관계형 데이터베이스에서 SQL문을 아용한 테이블간에 "관계"를 맺는 방법 (무작정 다 조회를 해오는게 아니라 각 테이블간 연결고리로써의 데이터를 매칭해서 조회 시켜야함!!) JOIN 크게 "오라클 전용구문" 과 "ANSI 구문" (ANSI == 미국국립표준협회) => 아스키코드표 만드는 단체! [ JOIN 용어 정리 ] 1. 등가조인 (EQUAL JO..

    [Oracle] 집합 연산자

    여러개의 쿼리문을 가지고 하나의 쿼리문으로 만드는 연산자 - UNION : OR | 합집합 (두 쿼리문 수행한 결과값을 더한 후 중복되는 값은 한번만 더해지도록) - INTERSECT : AND | 교집합 (두 쿼리문 수행한 결과값에 중복된 결과값) - UNION ALL : 합집합 + 교집합 (중복되는 부분이 두 번 표현될 수 있음) - MINUS : 선행 결과값에서 후행 결과값을 뺀 나머지(차집합) -- 부서코드가 D5인 사원인 사원들 조회 (사번 ,이름, 부서코드, 급여) SELECT EMP_ID, EMP_NAME, DEPT_CODE, SALARY FROM EMPLOYEE WHERE DEPT_CODE = 'D5'; --6개 행 (박나라, 하이유, 김해..

    [Oracle] SELECT문 실행 순서

    1. FROM 조회하고자 하는 테이블명 2. WHERE 조건식 (연산자들 가지고 기술) 3. GROUP BY 그룹기준을 삼을 컬럼 | 함수식 4. HAVING 조건식 (그룹함수를 가지고 기술) 5. SELECT *|조회하고자 하는 컬럼 별칭 | 산술식 "별칭" | 함수식 AS "별칭" 6. OREDER BY 컬럼명 | 컬럼순서 | 별칭 [ ASC | DESC ] ] [ NULLS FIRST | NULLS LAST ]

    [Oracle] HAVING 절

    그룹에 대한 조건을 제시할 때 사용되는 구문(주로 그룹함수식을 가지고 조건을 제시할 때 사용) -- 각 부서별 평균 급여 조회 (부서코드, 평균급여) SELECT DEPT_CODE, AVG(SALARY) FROM EMPLOYEE GROUP BY DEPT_CODE ORDER BY 1; -- 부서별 평균 급여가 300만원 이상인 부서들만 조회 SELECT DEPT_CODE, AVG(SALARY) FROM EMPLOYEE WHERE AVG(SALARY) >= 3000000 GROUP BY DEPT_CODE; -- 오류발생 (그룹함수 가지고 조건 제시시 WHERE 절에서 안됨) 즉, 아래와 같이 변경해야된다!! SELECT DEPT_CODE, AVG(SALARY) -- 4 FROM EMP..

    [Oracle] GROUP BY 절

    그룹기준을 제시 할 수 있는 구문 (해당 그룹기준별로 여러 그룹을 묶을 수 있음) 여러개의 값들을 하나의 그룹으로 묶어서 처리할 목적으로 사용 SELECT SUM(SALARY) FROM EMPLOYEE; --> 전체 사원을 하나의 그룹으로 묶어서 총합을 구한 결과 -- 각 부서별 총 급여 합 SELECT DEPT_CODE, SUM(SALARY) FROM EMPLOYEE GROUP BY DEPT_CODE; -- 각 부서별 사원수 SELECT DEPT_CODE, COUNT(*), SUM(SALARY) FROM EMPLOYEE GROUP BY DEPT_CODE; -- 실행순서 SELECT DEPT_CODE, SUM(SALARY) -- 3 FROM EMPLOYEE -- 1 GROUP ..

    [Oracle] 함수(FUNCTION)_그룹 함수

    1. SUM(숫자타입 컬럼) : 해당 컬럼 값들의 총 합계를 구해서 반환해주는 함수 -- EMPLOYEE 테이블의 전 사원의 급여합 SELECT SUM(SALARY) FROM EMPLOYEE; -- 전체 사원이 한 그룹으로 묶임 -- 남자 사원들의 총 급여 합 SELECT SUM(SALARY) --3 FROM EMPLOYEE -- 1 WHERE SUBSTR(EMP_NO,8,1) IN ('1','3'); --2 -- 부서코드가 D5인 사원들의 총 연봉 합 SELECT SUM(SALARY * 12) FROM EMPLOYEE WHERE DEPT_CODE = 'D5'; 2. AVG(숫자타입) : 해당 컬럼값들의 평균값을 구해서 반환 SELECT ROUND(AVG(SALARY)) FROM EMPLOYEE; 3. ..

    [Oracle] 함수(FUNCTION)_선택 함수

    DECODE(비교하고자 하는 대상(컬럼|산술연산|함수식), 비교값1, 결과값1, 비교값2, 결과값2,...) SWITCH(비교대상){ CASE 비교값1 : BREAK; CASE 비교값2 : BREAK; ... DEFAULT : ) -- 사번, 사원명, 주민번호 SELECT EMP_ID, EMP_NAME, EMP_NO, SUBSTR(EMP_NO, 8, 1), DECODE(SUBSTR(EMP_NO, 8, 1),'1', '남', '2', '여') AS "성별" FROM EMPLOYEE; -- 직원의 급여 조회시 각 직급별로 인상해서 조회 -- J7인 사원은 급여를 10% 인상 (SALARY + 1.1) -- J6인 사원은 급여를 15% 인상 (SALARY * 1.15) -- J5인 사원은 급여를 20% 인상 ..

    [Oracle] 함수(FUNCTION)_NULL 처리 함수

    NVL (컬럼, 해당 컬럼이 NULL일 경우 반환할 값) SELECT EMP_NAME, BONUS, NVL(BONUS, 0) FROM EMPLOYEE; -- 전 사원의 이름 보너스 포함 연봉 SELECT EMP_NAME, (SALARY * SALARY * BONUS) * 12, (SALARY + SALARY * NVL(BONUS, 0)) * 12 FROM EMPLOYEE; SELECT DEPT_CODE, NVL(DEPT_CODE, '부서없음') FROM EMPLOYEE; NVL2(컬럼, 반환값1, 반환값2) 컬럼값이 존재할경우 반환값) 반환 컬럼값이 NULL일 경우 반환값2 반환 SELECT EMP_NAME, BONUS, NVL2(BONUS, 0.7, 0.1) FROM EMPLOYEE; SELECT EM..