SQL - 기본 문법
by Kim
SQL 기본 문법
프로그램 설치 및 로그인이 완료되었으니 기본 문법에 대해 설명드리고자 합니다. SQL은 구조적인 언어여서 문법 자체가 정형화되어있기 때문에 구문이 정해져있습니다. 따라서 다른 언어들에 비해 난이도가 낮은데 몇몇 조건을 추가하다보면 성능이 떨어져서 조회 속도가 느려지게 됩니다. 여기서 쿼리를 어떻게 짰는지에 따라 성능이 달라진다고 합니다. 쿼리를 효과적으로 만드는 분들을 튜너라고 부르는데 수 년간 DB관리를 하는 소수의 분들이 이런 포지션에서 일을 하신다고 합니다.
절 이름 | 기능 |
---|---|
SELECT |
데이터 조회 |
FROM |
테이블 지정 |
WHERE |
데이터 조회 조건 |
GROUP BY |
특정 칼럼에 대해 그룹 단위로 묶기 |
SELECT |
GROUP BY 이후 조건 |
ORDER BY |
정렬 기준 설졍 |
목차
- 기본적인 데이터 조회
- WHERE : 데이터 조회 조건
- DUAL TABLE : 더미 테이블
- NULL : 공백
기본적인 데이터 조회
SELECT
절은 원하는 데이터를 조회하는 가장 기본적인 절입니다. FROM
은 데이터를 조회할 테이블을 지정하는 절입니다. 위 쿼리는 EMP
라는 테이블에서 모든 컬럼을 출력하라는 의미입니다. 여기서 주의하실 점이 있는데 테이블 EMP는 모든 계정에서 볼 수 있는 것이 아니라 로그인 시 입력한 SCOTT
계정의 소유 테이블이기 때문에 원래 문법은 SCOTT.EMP
가 맞습니다. 하지만 본인 소유의 테이블을 조회할 경우에는 본인의 이름을 편의상 생략해도 됩니다. 이에 관련된 내용은 추후 계정 권한 파트에서 다시 설명드리도록 하겠습니다.
이 쿼리는 테이블 EMP에서 ENAME, SAL 컬럼을 조회하는 쿼리입니다. 쿼리 실행시 아래와 같이 출력될 것입니다.
ENAME | SAL |
---|---|
SMITH | 800 |
JONES | 2975 |
BLAKE | 2850 |
SELECT에서 자주 사용하는 함수만 설명드리고 데이터 조회 조건으로 넘어가도록 하겠습니다.
Alias
Alias
기능은 쿼리를 실행할 때 보이는 컬럼의 이름을 바꿔서 출력합니다. 단순 조회시에는 그리 필요한 기능이 아니지만 현업에서는 가독성을 위해 자주 사용하는 기능 중 하나입니다.
Alias는 아래와 같이 사용합니다.
이름 | SAL |
---|---|
SMITH | 800 |
JONES | 2975 |
BLAKE | 2850 |
따로 주의할 점이 있다면 Alias로 사용할 이름에 빈 칸이 있으면 문법 오류가 발생하게 됩니다. 지정할 이름에 빈 칸을 넣어야 하는 경우 이름 양 끝에 ““를 붙이면 문법 오류를 막을 수 있습니다.
사원의 이름 | SAL |
---|---|
SMITH | 800 |
JONES | 2975 |
BLAKE | 2850 |
Concat 연산자
CONCAT
연산자는 출력할 컬럼들끼리 붙여주는 역할을 합니다. 컬럼 사이에 ,
(콤마)가 아닌 ||
를 입력하면 됩니다. 예를 들어 ENAME이 JAMES
고 DEPTNO가 10
일때 SELECT절에 ENAME||DEPTNO를 입력하면 JAMES10
이라고 출력이 됩니다.
ENAME||’-‘||JOB |
---|
SMITH-CLERK |
JONES-MANAGER |
BLAKE-MANAGER |
중복 제거
DISTINCT
는 중복되는 행을 제거하는 기능입니다. 예를 들어 DEPTNO 컬럼에 10, 20, 10, 30, 20, 10 이렇게 데이터가 있을 때 DISTINCT DEPTNO를 하면 10, 20, 30만 출력이 됩니다.
DISTINCT DEPTNO |
---|
10 |
20 |
30 |
WHERE 데이터 조회 조건
데이터 조회 시 필요한 부분만 출력하기 위해서는 조회 조건을 설정해주어야 합니다. 조건을 설정하는 절이 WHERE
절인데 FROM
밑에 입력해주시면 됩니다.
EMPNO | ENAME | JOB | … |
---|---|---|---|
7566 | JONES | MANAGER | … |
7698 | BLAKE | MANAGER | … |
7782 | CLARK | MANAGER | … |
가장 기본적인 연산자인 =
부터 사용해보았습니다. 주의하실 점이 있다면 문자 조건을 설정할 때는 문자 양옆에 ''
(작은따옴표)를 입력해주셔야 합니다. 그렇지 않으면 컬럼명으로 인식하기 때문에 문법 오류가 발생하게 됩니다. 위 쿼리에서도 JOB이 MANAGER인 조건을 걸 때 MANAGER 양 옆에 ''
를 붙였습니다.
다음으로는 숫자 조건을 걸어서 데이터를 조회해보도록 하겠습니다.
EMPNO | ENAME | … | SAL |
---|---|---|---|
7566 | JONES | … | 2975 |
7698 | BLAKE | … | 2850 |
7782 | CLARK | … | 2450 |
조건을 하나 더 추가하기 위해 AND
연산자를 사용했습니다. AND 앞의 조건과 뒤의 조건 모두 만족시키는 데이터만 조회하는 쿼리가 되었습니다. AND 외에도 여러 조건 중 하나만 만족시켜도 되는 OR
연산자도 있습니다.
BETWEEN 연산자
위 쿼리는 다른 방법으로도 구현할 수 있는데요. 몇 이상 몇 이하인지 설정할 수 있는 BETWEEN
이라는 연산자가 있습니다. 예를 들어 30이상 100이하로 설정하고 싶으면 WHERE절에 컬럼명 BETWEEN 30 AND 100
이라고 적으면 됩니다. 미만과 초과를 고려하지 않는다면 BETWEEN을 사용하는 것이 더 쉬워보입니다.
이쯤에서 의문점이 하나 생겼을 것입니다. 문자컬럼에 대해 여러 조건을 거는 방법이 있지 않을까? 예를 들어 JOB이 ‘MANAGER’인 사람 뿐만 아니라 ‘CLERK’인 사람도 같이 출력하게끔 말입니다. 물론 OR
연산자를 사용하면 가능하지만 시각적으로 더 편하게 작성하기 위해서 IN
연산자를 활용하는 방법에 대해 알려드리겠습니다.
IN 연산자
IN
연산자는 괄호 내에 있는 문자를 해당하는 줄을 모두 출력하는 연산자입니다. 예를 들어 JOB이 ‘MANAGER’, ‘CLERK’인 사람 모두를 출력하기 위해서는 아래와 같이 쿼리를 작성하시면 됩니다.
EMPNO | ENAME | JOB | … |
---|---|---|---|
7369 | SMITH | CLERK | … |
7566 | JONES | MANAGER | … |
7698 | BLAKE | MANAGER | … |
LIKE 연산자
LIKE
연산자는 문자 패턴을 확인하여 데이터를 조회할 수 있는 패턴 연산자입니다. 조건과 완전히 일치하는 것을 찾는 것이 아닌 비슷한 데이터를 찾아내는 것입니다. 예를 들어 이름이 ‘C’로 시작하는 사원을 검색하는 경우 LIKE 'C%'
이런 식으로 조건을 걸면 됩니다.
EMPNO | ENAME | JOB | … |
---|---|---|---|
7499 | ALLEN | SALESMAN | … |
예시 외에도 다른 패턴으로도 조회가 가능한데 아래를 참고하시면 됩니다.
S%
: S로 시작하는 자료%S%
: S를 포함하는 자료_
: 임의의 한 글자를 의미_S%
: 두번째에 A가 들어가는 자료_S___
: 두 번째에 S가 오는 5글자 자료
NOT 연산자
NOT
연산자는 부정 연산자로 조건에 일치하는 데이터를 제외하고 출력을 합니다.
EMPNO | ENAME | JOB | … |
---|---|---|---|
7369 | SMITH | CLERK | … |
7521 | WARD | SALESMAN | … |
7566 | JONES | MANAGER | … |
DUAL TABLE 더미 테이블
- 테이블이 필요없는 연산이 필요할 때 FROM 절에 입력하는 테이블이다.
- 간혹 더미 테이블이 필요없는 툴도 있다.(ex: HEIDISQL 등)
1 + 1 |
---|
2 |
NULL : 공백
미입력된 상태로 데이터 구조를 처음 접하는 사람은 0과 착각하는 경우가 있는데 NULL은 0조차 입력되지 않은 텅 비어있는 상태를 의미합니다.
간단한 예를 들면 1 + 0
은 1
이지만 1 + NULL
은 계산할 수 없기 때문에 NULL
이 출력이 됩니다.
다음 내용
GROUP BY
절에 들어가기 앞서서 자주 사용하는 함수들에 대해서 다뤄보려고 합니다.
- 대소문자 치환
- 문자에서 원하는 위치의 글자 추출
- 공백 제거
- 특정 문자를 원하는 문자로 치환
- 반올림/modulo 등의 숫자함수
- 날짜 함수
- 데이터 형 변환 함수 등
Subscribe via RSS