코딩테스트를 위한 SQL 간단 벼락치기

1. 세미콜론

 

모든 수행 문장이 끝날 때 최종적으로 마지막에 세미콜론 ; 으로 끝냄

 

2. 특정 칼럼 조회

 

2-1) 기본형식

 

select (칼럼) from (테이블명);

 

2-2) 모든 칼럼 조회

 

select * from (테이블명);

 

 

3. 조건 지정

 

3-1) where문 사용

 

select * from (테이블명) where (조건):

 

> 테이블에 존재하는 모든 칼럼을 조회하는데 조건에 맞는 행만을 조회함

 

> where emp.ename="kim"; 처럼 (테이블명).(칼럼명)으로 칼럼을 지정할 수 있음

 

3-2) 연산자

 

일반적인 프로그래밍 언어와 비슷한 연산자들을 지원함

 

where A = 1000;

where A >= 1000;

where A <= 1000;

where A != 1000;

where A >= 1000 AND B <= 2000;

 

 

SQL에서 사용하는 특별한 연산자들도 있다

 

where A between 1000 and 2000;

 

> A가 1000이상 2000이하인 행을 조회

 

where A IS NULL;

 

> A가 NULL인 행을 조회

 

where A IS NOT NULL;

 

> A가 NULL이 아닌 행을 조회

 

4. 별칭

 

칼럼명을 원하는 별칭을 지정하여 조회할 수 있음

 

4-1) as 사용

 

select A as "이름" B as "연봉" from (테이블명);

 

>테이블에서 A,B를 조회하는데 A를 "이름"으로 B를 "연봉"으로 출력함

 

4-2) 테이블의 별칭

 

(테이블명) 바로 뒤에 별칭을 써서 다음 문장부터 별칭으로 사용할 수 있음

 

select A as "이름" B as "연봉" from (테이블명) a 

where a.C=1000;

 

> 테이블에서 A,B를 조회하는데 테이블의 칼럼 중 C=1000을 만족하는 행만을 조회하고 A는 "이름", B는 "연봉"으로 출력을 함

 

 

5. 정렬

 

order by를 사용하여 정렬한 상태로 조회할 수 있음

 

select (칼럼) from (테이블)

order by (칼럼1) , (칼럼2) desc;

 

> 테이블에서 (칼럼)을 조회할건데 (칼럼1)로 오름차순 정렬하고 (칼럼1)이 서로 같으면 (칼럼2)로 내림차순 정렬함

 

> desc는 내림차순 정렬이고 asce는 오름차순 정렬인데 따로 지정하지 않으면 오름차순 정렬함

 

 

6. 통계량 계산

 

칼럼에 대한 통계량을 계산하고 싶은 경우 select 문에서 통계량 함수를 칼럼에 적용시켜서 조회할 수 있음

 

count() : 칼럼의 행 수를 조회

 

> count(*) null을 포함한 모든 행 수를 계산함

> count(칼럼명) null을 제외하고 행 수를 계산함

 

sum() : 칼럼의 총 합을 계산

avg() : 칼럼의 평균을 계산

max(), min() : 최댓값과 최솟값

stddev() : 칼럼의 표준편차를 계산

varian() : 칼럼의 분산을 계산

 

abs() : 절댓값을 계산

mod(a,b) : a를 b로 나눈 나머지를 계산

ceil() : 해당 숫자보다 크거나 같은 최소의 정수를 계산

floor() : 해당 숫자보다 작거나 같은 최대의 정수를 계산

 

-------------------------------

ceil (천장)

숫자

floor (바닥)

-------------------------------

 

round(a,m) : a를 소수점 m자리로 반올림

trunc(a,m) : a를 소수점 m자리로 버림

 

select sum(B) from (테이블명)

where C between 1000 and 2000;

 

> 테이블에서 C가 1000이상 2000이하인 칼럼 B의 모든 값의 총합을 sum(B)로 나타내면서 조회함

 

 

7. 그룹화

 

group by를 사용하여 해당 칼럼의 값들로 그룹화 시킬 수 있음

 

select A,B from (테이블명)

group by C;

 

> 칼럼 C의 값들을 기준으로 그룹화 하여 A,B를 조회함

 

통계량 계산에 많이 이용함

 

예를 들어 테이블 EMP가 다음과 같다면

 

A B
10 100
10 200
20 50
20 100
30 300
30 200

 

 

select A,sum(B) from EMP

group by A;

 

A를 기준으로 그룹화를 시킨 뒤 각 그룹별로 B의 총합을 조회해줌

 

A는 그룹이 10,20,30으로 나뉠 수 있고 각 그룹의 B값들의 합을 조회해줌

 

결과는 다음과 같을 것이다.

 

A sum(B)
10 300
20 150
30 500

 

조건문을 사용하여 원하는 행만을 조회할 수 있는데 GROUP BY를 사용하면 WHERE이 아니라 HAVING을 사용함

 

select A,sum(B) from EMP

group by A

having sum(B) > 200;

 

위 테이블에서 sum(B)가 200보다 큰 행만을 조회함

 

결과는 다음과 같을 것이다.

 

A sum(B)
10 300
30 500

 

 

8. IF문

 

DECODE( <조건> , <조건이 참> , <조건이 거짓> )

 

select DECODE(A,1000,'TRUE','FALSE') from emp;

 

> emp 테이블에서 A=1000이면 TRUE로 나타내고 1000이 아니면 FALSE로 나타내어 출력함

 

>칼럼 이름은 DECODE(A,1000,'TRUE','FALSE') 로 나옴

 

DECODE가 = 조건만 나타내니까 CASE문을 활용

 

CASE

 

when (조건1) then (조건1이 참이면)

when (조건2) then (조건1이 거짓이고 조건2가 참이면)

else (조건1이 거짓이고 조건2도 거짓이면)

 

end;

 

 

9 테이블 결합

 

 

9-1) inner join

 

두 테이블 table1, table2가 동일한 칼럼 C를 가지면 C를 기준으로 inner join하여 결합할 수 있다

 

select A,B from table1,table2

where table1.C=table2.C;

 

select A,B from table1 inner join table2

on table1.C=table2.C;

 

그림1. inner join

 

 

9-2) outer join

 

두 테이블 table1, table2가 동일한 칼럼 C를 가지면 C를 기준으로 outer join하여 결합할 수 있다

 

select A,B from table1 left outer join table2

on table1.C = table2.C;

 

select A,B from table1 right outer join table2

on table1.C = table2.C;

 

그림2. left outer join과 right outer join

 

 

9-3) cross join

 

두 테이블을 그대로 붙여서 조회해줌

 

select * from A,B;

 

select * from A cross join B;

 

그림3. cross join 설명

 

 

9-4) 집합 연산

 

UNION, UNION ALL, MINUS로 집합연산이 가능

 

UNION ALL은 중복을 제거하지 않고 모두 조회하고 UNION은 합집합을 구하면서 중복을 제거함

 

select A from table1

union

select A from table2;

 

select A from table1

union all

select A from table2;

 

select A from table1

minus

select A from table2;

 

 

10. 기타

 

 

10-1) 중복 제거

 

칼럼 앞에 distinct를 붙이면 중복을 제거하고 조회할 수 있음

 

select distinct A from table;

 

> table에서 A를 조회하는데 중복인 행은 제거함

 

 

10-2) IN

 

파이썬 프로그래밍에서 value가 리스트에 존재하는지 아닌지 검사할 때 쓰는 in이랑 비슷함

 

select * from table

where A in (x,y);

 

> A=x나 A=y인 행을 조회함

 

 

10-3) %

 

어떤 문자를 포함하는 모든 문자들을 조회함

 

예를 들어

 

where A LIKE 'test%'; 

 

A가 test로 시작하는 모든 문자와 같은지 조회함

 

where A LIKE '%est%';

 

A가 중간에 est가 들어가는 모든 문자와 같은지 조회함

 

where A LIKE '%3';

 

A가 끝이 3으로 끝나는 모든 문자와 같은지 조회함

 

_는 오직 하나의 문자만을 나타냄

 

where A LIKE 'test_';

 

A가 test로 시작하면서 뒤에 문자가 딱 하나만 더 있는 (예를 들어 testa, testb, testc, test3, test2, testd,....) 문자와 같은지 조회함

 

 

 

 

TAGS.

Comments