목차
-
문자열 합치기 (||)
-
문자 패턴 찾기 (LIKE)
-
중복제거 (DISTINCT)
-
NULL인 것만(IS NULL)
-
NULL이 아닌 것만 (IS NOT NULL)
-
NULL 대체 (NVL)
-
NULL 대체 (NVL2)
-
최대/최소 칼럼 가져오기 (KEEP)
-
계층적 쿼리 (CONNECT BY LEVEL)
-
누적 합 (OVER)
-
그룹별 누적 합 (OVER)
-
외부 조인 (LEFT OUTER JOIN )
-
조건을 충족하지 못하는 애들만 보고 싶을 때 (MINUS)
-
조건에 따라 보여주는 값이 다를 때 (CASE ~ WHEN ~ THEN ~ END)
-
DATE에서 특정 시간 추출하기 (EXTRACT)
-
날짜에서 앞에 0 빼고 싶을때(TO_CHAR)
-
조건에 따라 새로운 칼럼 만들어야 할 때
ORACLE
문자열 합치기 (||)
SELECT BOARD_ID || '/' || FILE_ID || FILE_EXT as FILE_PATH
FROM BOARD
문자 패턴 찾기 (LIKE)
SELECT WAREHOUSE_ID
FROM FOOD_WAREHOUSE
WHERE ADDRESS **LIKE** '경기도**%**'
'경기도' '%경기도' '경기도%' '%경기도%'
중복제거 (DISTINCT)
SELECT **DISTINCT** deptno
FROM emp
NULL인 것만(IS NULL)
WHERE ~ **IS NULL**
NULL이 아닌 것만 (IS NOT NULL)
WHERE ~ **IS NOT NULL**
NULL 대체 (NVL)
WHERE **NVL**(a.time, 0)
FROM clock
NULL 대체 (NVL2)
WHERE **NVL2**("값", "**NOT NULL**", "**NULL**")
FROM emp
최대/최소 칼럼 가져오기 (KEEP)
컬럼B로 ORDER BY 한 후 가장 큰값이 있는 행의 컬럼A를 가져오는 것
SELECT **MAX**(컬럼A) **KEEP (DENSE_RANK FIRST ORDER BY** 컬럼B **DESC**)
FROM 테이블A
계층적 쿼리 (CONNECT BY LEVEL)
ex) 0부터 24까지의 컬럼 만들기
SELECT **LEVEL** as HOUR
FROM **DUAL**
**CONNECT BY LEVEL < 25**
누적 합 (OVER)
over 내부의 order by절의 칼럼 순서로 누적합계 표시 ORDER BY 절의 칼럼을 모든 행의 유일한 값으로 해야 정상적으로 작동
SELECT empno, SUM(sal) **OVER(ORDER BY** empno) AS sal_sum
FROM emp
그룹별 누적 합 (OVER)
over 내부의 order by절의 칼럼 순서로 누적합계 표시 ORDER BY 절의 칼럼을 모든 행의 유일한 값으로 해야 정상적으로 작동
SELECT empno, SUM(sal) OVER(PARTITION BY job ORDER BY sal DESC, empno) AS sal_sum
FROM emp
외부 조인 (LEFT OUTER JOIN )
왼쪽 테이블은 조건에 부합하지 않아도 모두 결합되어야한다.
SELECT 컬럼 명, ... FROM 테이블명1
**LEFT OUTER JOIN** 테이블명2
**ON** 조건
조건을 충족하지 못하는 애들만 보고 싶을 때 (MINUS)
정렬은 맨 마지막에 한번에 해준다.
위 결과에서 아래 결과 빼기.
SELECT ANIMAL_ID, NAME
FROM ANIMAL_OUTS
**MINUS**
SELECT o.ANIMAL_ID, o.NAME
FROM ANIMAL_INS i, ANIMAL_OUTS o
WHERE i.ANIMAL_ID = o.ANIMAL_ID
ORDER BY ANIMAL_ID
조건에 따라 보여주는 값이 다를 때 (CASE ~ WHEN ~ THEN ~ END)
SELECT **CASE WHEN** STATUS='SALE' **THEN** '판매중'
**WHEN** STATUS='RESERVED' **THEN** '예약중'
**WHEN** STATUS='DONE' **THEN** '거래완료'
**END** as STATUS
FROM USED_GOODS_BOARD
DATE에서 특정 시간 추출하기 (EXTRACT)
SELECT **EXTRACT**(YEAR **FROM** join_date)
FROM USER_INFO
날짜에서 앞에 0 빼고 싶을때(TO_CHAR)
TO_CHAR(DATETIME, '**FM**HH24')
TO_CHAR(DATETIME, 'FMYYYY-MM-DD')
SKILL
조건에 따라 새로운 칼럼 만들어야 할 때
왼쪽 조인과 NVL을 이용하자
SELECT DISTINCT a.car_id, NVL(AVAILABILITY, '대여 가능') AVAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY a
LEFT OUTER JOIN (
SELECT car_id, '대여중' AS AVAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE <= TO_DATE('2022-10-16','YYYY-MM-DD')
AND END_DATE >= TO_DATE('2022-10-16','YYYY-MM-DD')
) b
ON a.car_id = b.car_id
order by a.car_id desc
ORACLE
문자열 합치기 (||)
SELECT BOARD_ID || '/' || FILE_ID || FILE_EXT as FILE_PATH
FROM BOARD
문자 패턴 찾기 (LIKE)
SELECT WAREHOUSE_ID
FROM FOOD_WAREHOUSE
WHERE ADDRESS **LIKE** '경기도**%**'
'경기도' '%경기도' '경기도%' '%경기도%'
중복제거 (DISTINCT)
SELECT **DISTINCT** deptno
FROM emp
NULL인 것만(IS NULL)
WHERE ~ **IS NULL**
NULL이 아닌 것만 (IS NOT NULL)
WHERE ~ **IS NOT NULL**
NULL 대체 (NVL)
WHERE **NVL**(a.time, 0)
FROM clock
NULL 대체 (NVL2)
WHERE **NVL2**("값", "**NOT NULL**", "**NULL**")
FROM emp
최대/최소 칼럼 가져오기 (KEEP)
컬럼B로 ORDER BY 한 후 가장 큰값이 있는 행의 컬럼A를 가져오는 것
SELECT **MAX**(컬럼A) **KEEP (DENSE_RANK FIRST ORDER BY** 컬럼B **DESC**)
FROM 테이블A
계층적 쿼리 (CONNECT BY LEVEL)
ex) 0부터 24까지의 컬럼 만들기
SELECT **LEVEL** as HOUR
FROM **DUAL**
**CONNECT BY LEVEL < 25**
누적 합 (OVER)
over 내부의 order by절의 칼럼 순서로 누적합계 표시 ORDER BY 절의 칼럼을 모든 행의 유일한 값으로 해야 정상적으로 작동
SELECT empno, SUM(sal) **OVER(ORDER BY** empno) AS sal_sum
FROM emp
그룹별 누적 합 (OVER)
over 내부의 order by절의 칼럼 순서로 누적합계 표시 ORDER BY 절의 칼럼을 모든 행의 유일한 값으로 해야 정상적으로 작동
SELECT empno, SUM(sal) OVER(PARTITION BY job ORDER BY sal DESC, empno) AS sal_sum
FROM emp
외부 조인 (LEFT OUTER JOIN )
왼쪽 테이블은 조건에 부합하지 않아도 모두 결합되어야한다.
SELECT 컬럼 명, ... FROM 테이블명1
**LEFT OUTER JOIN** 테이블명2
**ON** 조건
조건을 충족하지 못하는 애들만 보고 싶을 때 (MINUS)
정렬은 맨 마지막에 한번에 해준다.
위 결과에서 아래 결과 빼기.
SELECT ANIMAL_ID, NAME
FROM ANIMAL_OUTS
**MINUS**
SELECT o.ANIMAL_ID, o.NAME
FROM ANIMAL_INS i, ANIMAL_OUTS o
WHERE i.ANIMAL_ID = o.ANIMAL_ID
ORDER BY ANIMAL_ID
조건에 따라 보여주는 값이 다를 때 (CASE ~ WHEN ~ THEN ~ END)
SELECT **CASE WHEN** STATUS='SALE' **THEN** '판매중'
**WHEN** STATUS='RESERVED' **THEN** '예약중'
**WHEN** STATUS='DONE' **THEN** '거래완료'
**END** as STATUS
FROM USED_GOODS_BOARD
DATE에서 특정 시간 추출하기 (EXTRACT)
SELECT **EXTRACT**(YEAR **FROM** join_date)
FROM USER_INFO
날짜에서 앞에 0 빼고 싶을때(TO_CHAR)
TO_CHAR(DATETIME, '**FM**HH24')
TO_CHAR(DATETIME, 'FMYYYY-MM-DD')
SKILL
조건에 따라 새로운 칼럼 만들어야 할 때
왼쪽 조인과 NVL을 이용하자
SELECT DISTINCT a.car_id, NVL(AVAILABILITY, '대여 가능') AVAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY a
LEFT OUTER JOIN (
SELECT car_id, '대여중' AS AVAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE <= TO_DATE('2022-10-16','YYYY-MM-DD')
AND END_DATE >= TO_DATE('2022-10-16','YYYY-MM-DD')
) b
ON a.car_id = b.car_id
order by a.car_id desc