SELECT
1. 형식
※ select (해석 순서 1 → 2 → 3 → 4 → 5 → 6)
select [distinct] [컬럼1, 컬럼2,.....][as 별명][ || 연산자][*] -- || : java 의 + 연산자 --- 6
from 테이블명 --- 1
[where 조건절] --- 2
[group by 컬럼명] --- 3
[having 조건절] --- 4
[order by 컬럼명 asc|desc ] --- 5
group by : 그룹함수(max, min, sum, avg, count..)와 같이 사용
having : 묶어놓은 그룹의 조건절
distinct : 중복제거
* : 모든
조건절 : and, or, like, in, between and, is null, is not null
order by : 정렬
asc - 오름차순 (생략가능)
desc - 내림차순
컬럼명 : 숫자로도 가능
2. 예제
연산자
1. 종류
= | 같다 |
!= ^= <> | 같지 않다 |
>= | 크거나 같다 |
<= | 작거나 같다 |
> | 크다 |
< | 작다 |
and, or, between and, in, like, is null, is not null
2. 예제
단일행 함수
1. 숫자 함수
mod, round, trunc, ceil
2. 문자 함수
lower, upper, length, instr, substr, ltrim, rtrim, trim, length, lengthb
Oracle Express | Server |
영어 1자 = 1byte 한글 1자 = 3byte |
한글 1자 = 2byte |
3. 날짜 함수
sysdate, add_month, month_between
4. 변환 함수
- 암시적(implicit) 변환 : 자동
VARCHAR2 또는 CHAR ------> NUMBER
VARCHAR2 또는 CHAR ------> DATE
NUMBER ------> VARCHAR2
DATE ------> VARCHAR2
- 명시적(explict) 변환 : 강제
TO_NUMBER TO_DATE
< ------ ------>
NUMBER CHARACTER DATE
------> <-----
TO_CHAR TO_CHAR
- 날짜 형식
YYYY | 네 자리 연도(숫자) | 2005 |
YEAR | 연도(문자) | |
MM | 두 자리 값으로 나타낸 달 | 01, 08, 12 |
MONTH | 달 전체 이름 | January |
MON | 세 자리 약어로 나타낸 달 | Jan |
DY | 세 자리 약어로 나타낸 요일 | Mon |
DAY | 요일 전체 | Monday |
DD | 요일 전체 | 01, 31 |
HH HH24(24시간제) |
숫자로 나타낸 달의 일 | |
MI | ||
SS |
- 숫자 형식
9 | 숫자 표시 |
0 | 0 강제 표시 |
$ | 부동 $기호 표시 |
L | 부동 지역통화기호 표시 |
. | 소수점 출력 |
, | 천단위 구분자 출력 |
5. 그룹(집합) 함수
avg, sum, max, min, count
6. 기타 함수
nvl(표현식, 대체 값) | 주어진 표현식이 NULL인 경우 대체 값을 반환 |
width_bucket(표현식, 최소값, 최대값, 구간) | 구간을 기준으로 값을 찾는다 임의의 값이 지정된 범위 내에 어느 위치에 있는지를 찾는다 |
ltrim | 공백 제거; 왼쪽 |
rtrim | 공백 제거; 오른쪽 |
trim | 공백 제거; 양쪽 |
sysdate | 시스템에 설정된 시간표시 |
add_months(date, 달수) | 날짜에 달 수 더하기 |
last_day(date) | 해당달의 마지막 날 |
months_between(date1, date2) | 두 날짜 사이의 달 수 계산 |
to_char(sysdate, 'YYYY-fmMM-DD') | 형식 변환 (fm 형식) fm형식 : 형식과 데이터가 반드시 일치해야함(fm - fm 사이 값만 일치) fm를 표시하면 숫자 앞의 0을 나타나지 않는다 |
decode(표현식, 검색1,결과1, 검색2,결과2....[default]) | 조건에 따라 값을 반환; 표현식과 검색을 비교하여 결과 값을 반환 다르면 default |
case value when 표현식 then 구문1 when 표현식 then 구문2 else 구문3 end |
조건에 따라 값을 반환; 각 행에 대해 개별적으로 평가 |
7. 예제
집계 함수 (Aggregate Functions)
1. 개념
- 여러 행의 값을 계산하여 하나의 값을 반환하는 함수
2. 종류
count(컬럼명) | 집계함수; 개수 |
max(컬럼명) | 집계함수; 최대 |
min(컬럼명) | 집계함수; 최소 |
avg(컬럼명) | 집계함수; 평균 |
sum(컬럼명) | 집계함수; 합 |
3. 예제
윈도우 함수 (Aggregate Functions)
1. 개념
- 집계 함수는 여러 행의 값을 계산하여 하나의 값을 반환하는 함수
2. 종류
rank 함수 rank(표현식) within group(order by 표현식) |
데이터의 순위를 계산 전체 값을 대상으로 순위를 구함 |
rank() over(쿼리파티션) | 전체 순위를 표시 |
first_value 함수 first_value(표현식) over(쿼리파티션) |
정렬된 결과 집합에서 첫 번째 값을 반환 |
3. 예제
PARTITION BY 절
1. 개념
- GROUP BY 절과 동일한 역할
- 단, GROUP BY 절을 사용하지 않고 필요한 집합으로 행들을 그룹화 시킴
- Partition by 절을 사용하여 GROUP BY 절 없이 다양한 GROUPING 집합의 집계 결과들을 함께 출력 가능
- ORDER BY 절 : Partition by 로 정의된 WINDOW 내에서의 행들의 정렬 순서 정의
select employee_id, last_name, salary, department_id,
row_number( ) over ( PARTITION BY department_id ORDER BY salary DESC ) rnum
from employees;
부서별 급여를 내림차순으로 정렬 했을 경우 Row Number
부서 번호가 바뀔 때 Row Number 는 새로 시작 되는 것을 확인 할 수 있다
NULL 값은 정렬 시 가장 큰 값으로 인식 (기본설정)
⚒️ SELECT 심화 예제
'DB > Oracle' 카테고리의 다른 글
VIEW (0) | 2024.08.20 |
---|---|
table, sequence (0) | 2024.08.20 |
SubQuery (0) | 2024.08.20 |
join (0) | 2024.08.08 |
Oracle 설치 & 설정 (0) | 2024.08.06 |