[oracle] alias, 비교연산자, ISNULL, ISNOTNULL

심심이·2024년 2월 18일

oracle

목록 보기
3/40

AS(alias)

  • 내가 원하는 이름(별칭)을 붙여주는 것.
SELECT 
    employee_id AS "사원번호",
    first_name AS "이름",
    last_name 성,
    salary "기본 급여",
    commission_pct 커미션퍼센티지,
    salary + (salary * commission_pct) AS "1월급", 
    NVL( salary + ( salary * commission_pct),salary ) AS "월급2"
FROM 
    employees;




-- AS 는 "" 로 한다. AS, " " 생략 가능함 
-- 별칭(별명, alias)에서 별칭명이 숫자로 시작한다라면 반드시 "" 로 해주어야 한다. 

비교연산자

  1. 같다 =
  2. 같지않다 != <> ^=
  3. 크다. 작다 > <
  4. 같거나크다. 같거나작다 >= <=
  5. NULL 은 존재하지 않는 것이므로 비교대상이 될 수가 없다!
    그러므로 비교연산( = != <> ^= > < >= <= )을 할 수가 없다.
    그래서 비교연산을 하려면 nvl()함수, nvl2()함수를 사용하여 처리한다. (!!)
  • 오라클에서 컬럼들을 붙일때(연결할때)는 문자타입이든 숫자타입이든 날짜타입이든 관계없이 || 를 쓰면 된다.
--employees 테이블에서 부서번호가 30번에 근무하는 사원들만 
-- 사원번호, 사원명, 월급, 부서번호를 나타내세요

SELECT
    employee_id AS 사원번호,
    first_name || ' ' || last_name AS 사원명,  -- 성과 이름 띄어쓰기 ' ' 더함 
    NVL(salary + (salary * commission_pct), salary) AS 월급, -- 총 월급은 보너스를 더해서 계산
    department_id AS 부서번호
FROM 
    employees
WHERE
    DEPARTMENT_ID = 30; -- 부서번호가 30번인 사원들만 조회 

NULL 조회 : IS NULL, IS NOT NULL

  • null은 is 연산자를 사용하여 구한다.
  • IS NULL : NULL인 경우
  • IS NOT NULL : NULL이 아닌 경우

IS NULL 사용예시


-- ISNULL 사용안하고 조회하기
SELECT
    employee_id AS 사원번호,
    first_name || ' ' || last_name AS 사원명,
    NVL(salary + (salary * commission_pct), salary) AS 월급,
    department_id AS 부서번호
FROM 
    employees
WHERE
    NVL(department_id, -9999) = -9999;
    
-- ISNULL 사용
SELECT
    employee_id AS 사원번호,
    first_name || ' ' || last_name AS 사원명,
    NVL(salary + (salary * commission_pct), salary) AS 월급,
    department_id AS 부서번호
FROM 
    employees
WHERE
    department_id IS NULL; --department_id 칼럼의 값이 null인 행들만 메모리RAM에 퍼올리는 것이다.

ISNOTNULL 사용예시

-- employees 테이블에서 부서번호가 null이 아닌 사원들만 
-- 사원번호, 사원명, 월급, 부서번호를 나타내세요
SELECT 
    employee_id AS 사원번호,
    first_name || ' ' || last_name AS 사원명,
    NVL(salary + (salary * commission_pct), salary) AS 월급,
    department_id AS 부서번호 -- 오리지널 값 NULL 이 나타내진다. (SELECT 절에 NVL 사용한 것이 아님)
FROM 
    employees
WHERE 
    NVL( department_id, -9999 ) != -9999;
-- NULL이 아닌 사람들만 출력하기 위해, 
-- -9999라는 NULL 값 대체의 임의의 숫자를 입력하여 -9999가 아닌 사람을 조건으로 걸음.

--- 또는
WHERE department_id IS NOT NULL;
--- 또는
WHERE NOT department_id IS NULL; -- WHERE 뒤에 NOT 을 붙이면 이 절 자체를 부정시켜버린다. JAVA의 !(코드) 와 같다. 



+ 문제

  • employees 테이블에서 부서번호가 30번이 아닌 사원들만 사원번호, 사원명, 월급, 부서번호를 나타내세요
--- ** select 구문을 작성하기 전 반드시 해당 테이블의 구조를 먼저 확인하자 !!! ---

DESC employees; --1. 테이블 구조를 먼저 확인 , 컬럼의 NULL 여부와 유형 조회
-- 2. 구하고자 하는 데이터 확인

SELECT 
	employee_id AS "사원번호", 
    first_name || ' ' || last_name AS "사원명", -- 성과 이름 띄어쓰기 ' ' 더함 
    NVL(salary + (salary * commission_pct), salary) AS "월급", -- 총 월급은 보너스를 더해서 계산
    department_id AS "부서번호" -- 오리지널 값 NULL 이 나타내진다. 
FROM 
	employees
WHERE 
	NVL( department_id, -9999 ) != 30; 
    -- department_id 가 NULL 이라면 -9999. NULL이 아니라면 자기자신 출력. 
    -- NULL 처리를 꼭 해줘야 한다!! (구조 파악하고 NOT NULL인 경우 NULL처리 필요 X)

profile
개발하는 심심이

0개의 댓글