SQL 예약어와 함수 65가지 - 설명을 보고 직접 입력하며 익히는 타자 학습
설명을 읽고 해당하는 SQL 예약어나 함수를 입력하세요. 표준 SQL 기준이며 방언은 설명에 따로 적었습니다.
진행0 / 0
타/분0
정확도 %100.0
시간0:00
준비 중…
SQL 예약어와 함수 65가지 - 설명을 보고 직접 입력하며 익히는 타자 학습 한눈에 보기
| 순서 | 설명 | 정답 | 핵심 |
|---|---|---|---|
| 1 | 행을 조회한다 | SELECT |
가장 기본이 되는 질의문 |
| 2 | 조회 대상 테이블을 지정한다 | FROM |
여러 테이블을 콤마나 JOIN 으로 이어 쓴다 |
| 3 | 행을 걸러낸다 | WHERE |
그룹화 전에 적용된다 |
| 4 | 중복 행을 제거한다 | DISTINCT |
전체 컬럼 조합이 같은 행만 지운다 |
| 5 | 그룹으로 묶는다 | GROUP BY |
집계 함수와 함께 쓴다 |
| 6 | 그룹을 걸러낸다 | HAVING |
WHERE 와 달리 집계 결과에 조건을 건다 |
| 7 | 정렬한다 | ORDER BY |
ASC 가 기본이고 DESC 로 내림차순 |
| 8 | 행 수를 제한한다 | FETCH FIRST |
표준 문법이다. LIMIT 은 방언이다 |
| 9 | 건너뛸 행 수를 지정한다 | OFFSET |
FETCH 와 함께 페이지네이션에 쓴다 |
| 10 | 양쪽에 짝이 있는 행만 | INNER JOIN |
교집합. JOIN 만 쓰면 이것이다 |
| 11 | 왼쪽을 전부 남긴다 | LEFT JOIN |
짝이 없으면 오른쪽이 NULL |
| 12 | 오른쪽을 전부 남긴다 | RIGHT JOIN |
LEFT 를 뒤집은 것 |
| 13 | 양쪽을 전부 남긴다 | FULL OUTER JOIN |
합집합 |
| 14 | 모든 조합을 만든다 | CROSS JOIN |
곱집합. 조건을 빠뜨린 조인이 이것이 된다 |
| 15 | 같은 이름 컬럼으로 조인한다 | NATURAL JOIN |
편해 보이지만 컬럼이 추가되면 조용히 결과가 바뀐다 |
| 16 | 조인 조건을 컬럼 이름으로 준다 | USING |
USING (dept_id) 형태 |
| 17 | 결과를 합치고 중복을 없앤다 | UNION |
정렬 비용이 든다 |
| 18 | 결과를 합치되 중복을 남긴다 | UNION ALL |
UNION 보다 빠르다 |
| 19 | 두 결과의 교집합 | INTERSECT |
공통 행만 |
| 20 | 두 결과의 차집합 | EXCEPT |
표준 문법. Oracle 은 MINUS 를 쓴다 |
| 21 | 행을 넣는다 | INSERT |
INSERT INTO ... VALUES |
| 22 | 행을 고친다 | UPDATE |
WHERE 를 빠뜨리면 전부 바뀐다 |
| 23 | 행을 지운다 | DELETE |
WHERE 를 빠뜨리면 전부 지워진다 |
| 24 | 있으면 수정, 없으면 삽입 | MERGE |
표준 upsert 문법 |
| 25 | 테이블을 만든다 | CREATE TABLE |
테이블을 만든다. 제약 조건을 여기서 함께 선언하는 편이 안전하다 |
| 26 | 테이블 구조를 바꾼다 | ALTER TABLE |
컬럼이나 제약을 추가·변경·삭제한다. 큰 테이블에서는 잠금을 확인하고 실행한다 |
| 27 | 테이블을 없앤다 | DROP TABLE |
되돌릴 수 없다 |
| 28 | 데이터만 전부 비운다 | TRUNCATE |
DELETE 와 달리 로그를 거의 남기지 않는다 |
| 29 | 기본키를 지정한다 | PRIMARY KEY |
NOT NULL + UNIQUE 를 겸한다 |
| 30 | 다른 테이블을 참조한다 | FOREIGN KEY |
참조 무결성을 DB 가 지킨다 |
| 31 | 중복을 막는다 | UNIQUE |
NULL 은 보통 여러 개 허용된다 |
| 32 | 값 조건을 건다 | CHECK |
CHECK (quantity > 0) |
| 33 | 빈 값을 막는다 | NOT NULL |
빈 값을 허용하지 않는다. 나중에 추가하려면 기존 행을 먼저 채워야 한다 |
| 34 | 값이 없을 때 기본값 | DEFAULT |
값을 주지 않았을 때 들어갈 기본값이다 |
| 35 | NULL 이면 다른 값으로 | COALESCE |
첫 번째 NULL 아닌 값을 준다 |
| 36 | 두 값이 같으면 NULL | NULLIF |
0 나누기 방어에 쓴다 |
| 37 | 조건 분기 | CASE |
CASE WHEN ... THEN ... ELSE ... END |
| 38 | 값이 NULL 인지 본다 | IS NULL |
= NULL 은 항상 참이 아니다. 자주 틀린다 |
| 39 | 목록 안에 있는지 | IN |
서브쿼리와도 쓴다 |
| 40 | 범위 안에 있는지 | BETWEEN |
양 끝을 포함한다 |
| 41 | 문자열 패턴을 맞춘다 | LIKE |
% 는 여러 글자, _ 는 한 글자 |
| 42 | 행이 존재하는지 | EXISTS |
IN 보다 빠른 경우가 많다 |
| 43 | 행 수를 센다 | COUNT |
COUNT(*) 와 COUNT(컬럼) 은 NULL 처리가 다르다 |
| 44 | 합계 | SUM |
합계를 낸다. NULL 은 무시하고 전부 NULL 이면 결과도 NULL 이다 |
| 45 | 평균 | AVG |
NULL 은 빼고 계산한다 |
| 46 | 최댓값 | MAX |
최댓값. 문자열과 날짜에도 쓸 수 있다 |
| 47 | 최솟값 | MIN |
최솟값 |
| 48 | 순위를 매긴다 | RANK |
동률 뒤 순위를 건너뛴다 |
| 49 | 동률 뒤도 이어지는 순위 | DENSE_RANK |
1,1,2 로 이어진다 |
| 50 | 행 번호를 붙인다 | ROW_NUMBER |
동률이어도 무조건 다른 번호 |
| 51 | 윈도 함수의 범위를 정한다 | OVER |
OVER (PARTITION BY ... ORDER BY ...) |
| 52 | 윈도를 그룹으로 나눈다 | PARTITION BY |
GROUP BY 와 달리 행이 줄지 않는다 |
| 53 | 이전 행 값을 가져온다 | LAG |
같은 윈도에서 이전 행의 값을 가져온다. 전월 대비 계산에 쓴다 |
| 54 | 다음 행 값을 가져온다 | LEAD |
다음 행의 값을 가져온다. LAG 의 반대다 |
| 55 | 이름 붙인 임시 결과 | WITH |
CTE. 복잡한 질의를 단계로 나눈다 |
| 56 | 재귀 질의 | WITH RECURSIVE |
계층 구조를 펼칠 때 |
| 57 | 가상 테이블을 만든다 | CREATE VIEW |
질의에 이름을 붙여 테이블처럼 쓰게 한다. 데이터를 따로 저장하지 않는다 |
| 58 | 조회 속도를 위한 구조 | CREATE INDEX |
쓰기는 느려진다 |
| 59 | 변경을 확정한다 | COMMIT |
트랜잭션의 변경을 확정한다. 이후에는 되돌릴 수 없다 |
| 60 | 변경을 되돌린다 | ROLLBACK |
트랜잭션의 변경을 전부 취소한다 |
| 61 | 되돌릴 지점을 만든다 | SAVEPOINT |
트랜잭션 안에 되돌릴 지점을 만든다. 일부만 취소할 수 있다 |
| 62 | 트랜잭션을 시작한다 | START TRANSACTION |
트랜잭션을 시작한다. 자동 커밋이 꺼진다 |
| 63 | 권한을 준다 | GRANT |
사용자나 역할에 권한을 준다 |
| 64 | 권한을 거둔다 | REVOKE |
줬던 권한을 거둔다 |
이렇게 하면 더 잘 외워집니다
- 질의 실행 순서(FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY)를 떠올리며 묶어 외우면 빨리 붙습니다.
- WHERE 와 HAVING, UNION 과 UNION ALL, RANK 와 DENSE_RANK 와 ROW_NUMBER 처럼 짝으로 헷갈리는 것들을 함께 보세요.
- 익힌 예약어는 SQL 연습소에서 바로 실행해 보세요. 눈으로 본 것과 직접 돌려 본 것은 남는 정도가 다릅니다.
- 표준과 방언을 구분하세요. LIMIT 은 방언이고 표준은 FETCH FIRST 입니다.
자주 묻는 질문
WHERE 와 HAVING 은 무엇이 다른가요?
WHERE 는 그룹으로 묶기 전 개별 행을, HAVING 은 묶은 뒤 그룹을 거릅니다. 집계 함수 조건은 HAVING 에 씁니다.
IS NULL 대신 = NULL 을 쓰면 안 되나요?
안 됩니다. NULL 은 '모르는 값'이라 어떤 값과 비교해도 참이 되지 않습니다. IS NULL 을 써야 합니다.
여기서 익힌 SQL 을 실행해 볼 수 있나요?
SQL 연습소에서 브라우저 안의 실제 SQLite 로 바로 실행할 수 있습니다. 입력한 SQL 은 서버로 전송되지 않습니다.