- 데이터 딕셔너리
: DBMS만이 추가, 수정, 삭제가 가능하며 사용자는 조회만 가능함
테이블 목록 조회하기
select * from tab;
테이블 정보 조회하기
desc 테이블명;
- DML - Select 기본
모든 컬럼의 데이터 가져오기
select * from 테이블명;
특정 컬럼의 데이터 가져오기
select 컬럼명1, 컬럼명2 from 테이블명;
- DML - 연산자 사용하기
산술 연산자
+, -, *, /
: 오라클에서 null값은 무한대를 의미함
: null값이랑 숫자 더하면 null값이 나옴
: nvl(해당값, 0)하면 null값을 0으로 바꿔줌
ex) nvl(comm, 0)
Concat 연산자
: 문자열을 합치는 연산자
문자열 || 컬럼 || 문자열 || 컬럼
ex) select ename || '사원의 담당 직무는 ' || job || '입니다'
from emp;
Distinct
: select문을 통해 가져온 모든 로우 중에서 중복된 로우를 제거하는 키워드
select distinct 컬럼명
from 테이블명;
- 조건절 사용하기
조건절
select 컬럼명
from 테이블명
where 조건절;
: select ~ from 까지를 통해 모든 로우를 가져오고 각 로우를 조건절과 비교하여 참인 로우만 남겨주고 거짓인 로우는 제거함
: select ~ from ~ where 작성해주고, 테이블명/조건/데이터 순으로 작성
비교 연산자
<, >, <=, >=, =
<>, !=, ^= (3개 같은 의미)
- 논리 연산자 사용하기
and: 좌우 조건식이 모두 참일 경우 참or: 좌우 조건식이 모두 거짓일 경우 거짓not: 조건식의 결과를 부정between and: 범위 조건in: 항목 조건
- Like 연산자
Like 연산자
select 컬럼명
from 테이블명
where 컬럼명
like '와일드카드';
_: 글자 하나를 의미함
%: 글자 0개 이상을 의미함
- null
is null이나 is not null을 통해 null 비교가 가능함
- 정렬
정렬
select 컬럼명
from 테이블명
where 조건
order by 컬럼명 [ASC|DESC];
asc: 오름차순, 생략가능
desc: 내림차순
- 숫자 함수
숫자 함수
https://docs.oracle.com/database/121/SQLRF/functions.htm#SQLRF006
abs(): 절댓값
floor(): 소수점 이하 버림
round(값, 자릿수): 반올림
trunc(값, 자릿수): 버림
mod(): 나머지
- 문자열 함수
문자열 함수
lower(): 대문자 -> 소문자
upper(): 소문자 -> 대문자
initcap(): 첫 글자만 대문자로, 나머지는 소문자로
concat(): 문자열 연결
length(): 문자열 길이
lengthb(): 문자열 길이 (byte 단위)
substr(문자열, 인덱스, 개수): 문자열 잘라내기 (주의! 인덱스는 0부터 시작이 아닌 1부터 시작)
instr(문자열, 찾을 문자열): 문자열 찾기
lpad(문자열, 채울 자릿수, 채울 문자열): 왼쪽에 특정 문자열로 채우기
rpad(문자열, 채울 자릿수, 채울 문자열): 오른쪽에 특정 문자열로 채우기
trim(문자열): 양쪽 공백 제거
rtrim(문자열): 오른쪽 공백 제거
ltrim(문자열): 왼쪽 공백 제거
replace(문자열, 바꿀 문자열, 대체 문자열): 문자열 변경
- 날짜 함수
날짜 함수
sysdate: 현재 날짜와 시간을 반환함
months_betweeen(날짜, 날짜): 두 날짜 간의 개월 수를 구함
add_months(날짜, 날짜): 주어진 개월 수 만큼 더함
to_char(날짜, 형식): 날짜와 숫자를 문자로 변환
to_date(문자, 형식): 데이터를 날짜 형식으로 변환
- DECODE, CASE
Decode
: 값에 따라 반환값이 결정되는 구문
decode(컬럼명, 값1, 반환값1, 값2, 반환값2, 값3, 반환값3)
-- 각 사원의 부서 이름을 가져온다.
-- 10: 인사과, 20: 개발부, 30: 경영지원팀, 40: 생산부
select empno, ename,
decode(deptno, 10, '인사과',
20, '개발부',
30, '경영지원팀',
40, '생산부')
from emp;
case
: 조건에 따라 반환값이 결정되는 구문
case when 조건식1 then 반환값1
when 조건식2 then 반환값2
end
-- 직원들의 급여를 다음과 같이 인상한다.
-- 1000 이하: 100%
-- 1000 초과 2000미만: 50%
-- 2000 이상: 200%
select empno, ename,
case when sal <= 1000 then sal*2
when sal > 1000 and sal < 2000 then sal*1.5
when sal >= 2000 then sal*3
end
from emp;
- 그룹함수
그룹함수
sum: 총합
avg: 평균
count: 로우의 수
max: 최대값
min: 최소값
- Group By
Group By
: select~from~where절까지 모두 수행하여 가져온 결과를 하나의 그룹으로 묶어 총합, 평균 등을 구할 수 있음
select 컬럼명
from 테이블명
where 조건절
group by 그룹기준
order by 정렬기준;
- Having
Having
: Having은 Group by절의 조건이 됨
(주의사항! where은 로우의 조건, having은 그룹의 조건)
select 컬럼명
from 테이블명
where 조건절
group by 그룹기준
having 그룹기준에 대한 조건절;
-- 부서별 최소 급여액이 1000 이하인 부서에서 직무가 CLERK인 사원들의 급여 총합을 구한다.
select deptno, sum(sal)
from emp
where job = 'CLERK'
group by deptno
having min(sal) <= 1000;