[Oracle DB] SQL 기본
📖 사용 가능 테이블 보기
select * from emp
- 사용자가 만든 테이블을 볼 수 있음
📐 테이블 구조
desc 테이블명
- 테이블 구조 (이름, null, 유형)
❓ 기본 질의문
select [distinct] {*, column [alias] ...}
from 테이블명
[where query 조건]
[order by {column, 표현식} [asc | desc]];
- from → where → select 순서로 처리
- { } : 이 안에서 택 1
- [ ] : 생략 가능
- a | b : 둘 중 하나 사용
- distinct : 중복 제거
- asc : 오름차순 / desc : 내림차순
🔎 WHERE
where 조건
- 조건을 부여하기 위해 사용
- 비교 연산자 : = / > / >= / < / <= / != / <> (!=, <>는 같음)
- SQL 연산자
between ... and ... | not between ... and ... |
in (list) | not in (list) |
like | not like |
is null | is not null |
- 논리 연산자 : and / or / not
⚙️ SQL 연산자
- between ... and ...
where sal between 1000 and 2000
where sal >= 1000 and sal <= 2000
-- 같은 동작을 함
- in
where a in (1, 2, 3)
where a = 1 or a = 2 or a = 3
-- 같은 동작을 함
- like
-- 임의의 문자를 포함한 문자를 찾음
-- % : 문자 0개 이상 / _ : 문자 1개 (wildcard)
select * from emp where ename like '%A%' -- 이름에 A가 포함된 사람
select * from emp where ename like 'N%' -- 이름이 N으로 끝나는 사람
select * from emp where ename like '_A%' -- 이름의 2번째가 A인 사람
select * from emp where ename not like '%A%' -- 이름에 A가 없는 사람
- is null
-- null인지 비교
select * from emp where mgr is null
🔑 논리 연산자
- a and b : a, b 둘 다 만족
- a or b : a, b 둘 중 하나만 만족
- not a : a 만족 X
✚ 수식 표현
select 수식
select sal * 12
🔖 별칭 지정
select 수식 [as column_이름]
select sal * 12 as "연봉"
- as 사용 (생략 가능)
- 대소문자, 공백, 한글 사용 가능 (특수문자 사용 시 " " 사용)
🗂 집합 연산
- union / intersect / minus
- in / op any / op all / exists
- 중복 자동 제거 (중복 허용 : all)
🗃 IN
- 서브 쿼리의 출력 결과와 하나라도 일치하면 참
- ex. BLAKE와 같은 부서에 있는 사람
select ename, hiredate, deptno
from emp
where deptno in (select sal
from emp
where ename = 'BLAKE')
🤷♀️ ANY
- <any : 최댓값보다 작으면 참
- >any : 최솟값보다 크면 참
- =any : in 연산자와 같음
- ex. 30번 부서에서 급여를 가장 적게 받는 사원보다 더 많은 급여를 받는 사원
select ename, sal
from emp
where sal >any (select sal
from emp
where deptno = 30)
🙆♀️ ALL
- <all : 최솟값보다 작으면 참
- >all : 최댓값보다 크면 참
- ex. 30번 부서에서 급여를 가장 많이 받는 사원보다 더 많은 급여를 받는 사원
select ename, sal
from emp
where sal >all (select sal
from emp
where deptno = 30)
🔗 EXISTS
- 상호연관 서브 쿼리와 exists 연산자
- ex. 직원이 있는 부서만 출력
select dname, deptno
from dept d
where exists (select *
from emp e
where e.deptno = d.deptno)