[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이다.
*글 작성에 참고한 내용: 학원 쌤의 열정적인 수업
'DB > Oracle' 카테고리의 다른 글
[Oracle] 함수 :: 숫자 함수, 수학 함수(Numerical Function) (3) | 2024.03.16 |
---|---|
[Oracle] 함수 :: 집계 함수(Aggregation Function) (2) | 2024.03.16 |
[Oracle] WHERE절, BETWEEN절, IN절, LIKE절, NULL, ORDER BY절 (0) | 2024.03.15 |
[Oracle] 연산자 (0) | 2024.03.15 |
[Oracle] 잠깐! Commit에 대해 알아보자 :: SQL Developer와 DBeaver의 commit 설정 특징 (1) | 2024.03.15 |
블로그의 정보
All of My Records
캐떠린