All of My Records

[Oracle] 컬럼 리스트에서 할 수 있는 행동 :: SELECT절

by 캐떠린

컬럼 리스트에서 할 수 있는 행동

1. 컬럼 명시

SELECT * FROM tblInsa;
SELECT name, ssn FROM tblInsa;

 

2. 연산

SELECT name || '님', basicpay * 2 FROM tblInsa;

 

3. 상수

SELECT 100, '홍길동' FROM tblInsa;

 

4. DISTINCT 사용

  • 중복값 제거
  • 컬럼 리스트에서 사용
  • Java Stream에서 list.stream().distinct().forEach()를 사용했었다!
  • DISTINCT 컬럼명(X) → DISTINCT 컬럼 리스트(O)
  • 사용 예시
SELECT DISTINCT continent FROM tblCountry;

-- 수많은 부서중 어떤 부서가 있는지?
SELECT DISTINCT buseo FROM tblInsa;

-- 수많은 직위중 어떤 직위가 있는지?
SELECT DISTINCT jikwi FROM tblInsa;

-- 중복값을 가지지 않는 컬럼에도 DISTINCT 사용은 가능하다.
SELECT DISTINCT name FROM tblInsa;

SELECT DISTINCT buseo, name FROM tblInsa; -- 여기서 DISTINCT의 의미는 '뒤의 두 컬럼에서 중복값이 존재할 때 없에겠습니다!'

SELECT DISTINCT buseo, jikwi FROM tblInsa;

 

5. CASE 사용

  • 대부분의 절에서 사용 가능
  • CASE-END컬럼이 들어갈 수 있는 곳에는 항상 들어갈 수 있다.
  • 조건문 역할 → 컬럼값 조작
  • 조건을 만족하지 못하면 NULL을 반환(★★★★★)
  • 사용 예시
-- ex 1)
SELECT last || first AS name, gender
  FROM tblComedian;

SELECT
    last || first as name,
    CASE
            -- WHEN 조건 THEN 값
            WHEN gender = 'm' THEN '남자'
            WHEN gender = 'f' THEN '여자'
    END AS gender
  FROM tblComedian;

-- ex 2)
SELECT
    name, continent,
    CASE
            WHEN continent = 'AS' THEN '아시아'
            WHEN continent = 'EU' THEN '유럽'
            WHEN continent = 'AF' THEN '아프리카'
            -- ELSE '기타
            ELSE continent -- 위의 3가지에 해당되지 않는 값은 가공되지 않는 값으로 반환할 수도 있음!
            -- ELSE 100 > ORA-00932: inconsistent datatypes: expected CHAR got NUMBER(continent 컬럼의 자료형은 VARCHAR2인데, NUMBER 자료형을 입력하여 오류 발생)
            END AS continentname
  FROM tblCountry;

-- ex 3)
SELECT
    last || first AS name,
    weight,
    CASE
            WHEN weight > 90 THEN '과체중'
            WHEN weight > 50 THEN '정상체중'
            ELSE '저체중'
    END AS state
  FROM tblComedian;

-- ex 4)
SELECT
    last || first AS name,
    weight,
    CASE
            WHEN weight >= 50 AND weight <= 90 THEN '정상체중'
            ELSE '주의체중'
    END AS state
  FROM tblComedian;

-- ex 5) CASE에도 BETWEEN을 사용할 수 있다.
SELECT
    last || first AS name,
    weight,
    CASE
            WHEN weight BETWEEN 50 AND 90 THEN '정상체중' -- BETWEEN이 WHERE절이 아니어도 조건으로 쓰인 곳이 있다면 사용할 수 있다.
            ELSE '주의체중'
    END AS state
  FROM tblComedian;

-- ex 6) CASE에도 IN ()을 사용할 수 있다.
SELECT
    name, jikwi,
    CASE
            WHEN jikwi = '과장' OR jikwi = '부장' THEN '관리직'
            ELSE '생산직'
    END,
    CASE
            WHEN jikwi IN ('과장', '부장') THEN '관리직'
            ELSE '생산직'
    END
  FROM tblInsa;

-- ex 7) CASE에도 LIKE를 사용할 수 있다.
SELECT
    name, sudang,
    CASE
            WHEN name LIKE '홍%' THEN 50000
            ELSE 0
    END + SUDANG
  FROM tblInsa;

-- ex 8) CASE에도 IS NULL, IS NOT NULL을 사용할 수 있다.
SELECT
    title,
    CASE
            WHEN completedate IS NULL THEN '미완료'
            WHEN completedate IS NOT NULL THEN '완료'
    END AS state
  FROM tblTodo;

 

실제 데이터 단위는 ''이다!!
Java와 비교하자면 column은 Java의 class, 행은 Java의 object이다.

 

*글 작성에 참고한 내용: 학원 쌤의 열정적인 수업

블로그의 정보

All of My Records

캐떠린

활동하기