코딩일기

[Oracle DB] SQL 기본

-Becca- 2022. 5. 2. 12:14

 📖 사용 가능 테이블 보기 

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)