공든탑앱 열기

SELECT 기본

SQLD (SQL 개발자) · SQL 기본 · 약 12분

쉽게 말하면

SELECT는 '이 표에서 이 칸들만 보여 줘'라고 부탁하는 문장이에요. FROM 뒤에 표 이름, SELECT 뒤에 보고 싶은 칸을 적어요. *는 모든 칸, DISTINCT는 같은 줄은 한 번만, AS는 칸 이름을 바꿔서 보여 달라는 뜻이에요.

시험용 정의

SELECT는 테이블에서 데이터를 조회하는 문장이다. SELECT 열 목록 FROM 테이블이 기본이고, *는 모든 열, DISTINCT는 중복 행 제거, AS는 열에 별칭 붙이기다. 열 목록 자리에서 산술 연산(+ - * /)과 문자 연결(||)도 할 수 있다.

비유로 이해하기

도서관 사서에게 "책 목록(FROM)에서 제목과 저자만(SELECT) 보여 주세요"라고 하는 것이다. DISTINCT는 "같은 저자는 한 번만", AS는 "제목 칸 이름을 '책 이름'이라고 써 주세요"다.

자세히

그림으로 보기: SELECT 문이 처리되는 순서

  1. FROM어느 테이블에서(조인 포함)
  2. WHERE행을 거른다(집계 함수는 못 씀)
  3. GROUP BY그룹으로 묶는다
  4. HAVING그룹을 거른다(집계 함수 조건)
  5. SELECT보여 줄 열과 별칭을 정한다
  6. ORDER BY정렬한다(SELECT 의 별칭을 쓸 수 있음)
쓰는 순서와 처리 순서가 다르다. 그래서 WHERE 에서는 SELECT 에서 만든 별칭을 쓸 수 없고 ORDER BY 에서는 쓸 수 있다

먼저 알아 둘 말

말뜻
EMP·DEPT이 페이지의 연습용 테이블. EMP(사원: EMPNO 사번, ENAME 이름, JOB 직무, MGR 관리자 사번, HIREDATE 입사일, SAL 급여, COMM 수당, DEPTNO 부서번호)와 DEPT(부서: DEPTNO, DNAME 부서명, LOC 위치)
별칭(Alias)결과에서 열에 붙이는 다른 이름. 원래 테이블의 열 이름은 바뀌지 않는다
DUALOracle이 기본으로 주는 행 하나짜리 테이블. 계산 결과만 보고 싶을 때 SELECT 1+1 FROM DUAL
리터럴SQL 문 안에 직접 쓴 값. 문자는 작은따옴표('KIM'), 숫자는 그대로(100)

SELECT 문법

쓰는 법뜻
SELECT * FROM emp모든 열
SELECT ename, sal FROM emp필요한 열만, 쓴 순서대로
SELECT DISTINCT job FROM emp결과에서 중복 행을 없앤다. 여러 열을 쓰면 열 조합 전체가 같을 때만 중복
SELECT sal * 12 AS 연봉 FROM emp계산 결과에 별칭. AS는 생략 가능
SELECT sal "월 급여" FROM emp공백·특수문자를 넣거나 대소문자를 지키려면 큰따옴표
SELECT ename || '님' FROM emp문자 연결. SQL Server는 + 를 쓴다

알아 둘 규칙

  • SQL 키워드와 열 이름은 대소문자를 구별하지 않는다. 하지만 문자열 값('KIM')은 구별한다
  • 문자와 날짜 리터럴은 작은따옴표, 별칭은 큰따옴표
  • 별칭은 SELECT보다 늦게 처리되는 ORDER BY에서는 쓸 수 있지만, WHERE에서는 쓸 수 없다
  • Oracle은 FROM이 필수라 계산만 할 때 DUAL을 쓴다. SQL Server는 FROM 없이 SELECT 1+1이 된다

시험에 이렇게 나와요

출제 범위·공식 안내 기반

확인 문제

Q1. SAL이 3000, COMM이 NULL인 사원의 SAL + COMM과 ENAME || COMM 결과는? (Oracle, ENAME은 'CHO')

  1. 3000, NULL
  2. 3000, 'CHO'
  3. NULL, 'CHO'
  4. NULL, NULL
정답 보기

3번 NULL, 'CHO'

NULL이 들어간 산술 연산은 NULL이다. 반면 Oracle의 || 연결은 NULL을 빈 문자열처럼 다뤄서 'CHO'가 그대로 나온다.

Q2. JOB이 (DEV, DEV, SALES), DEPTNO가 (10, 20, 10)인 3행에서 SELECT DISTINCT job, deptno의 결과 행 수는?

  1. 1
  2. 2
  3. 오류
  4. 3
정답 보기

4번 3

DISTINCT는 열 조합 전체로 중복을 본다. (DEV,10), (DEV,20), (SALES,10) 모두 달라 3행.

Q3. 별칭에 대한 설명으로 틀린 것은?

  1. AS는 생략할 수 있다
  2. ORDER BY 절에서 SELECT 별칭을 쓸 수 있다
  3. WHERE 절에서 SELECT 별칭을 쓸 수 있다
  4. 공백이 있는 별칭은 큰따옴표로 감싼다
정답 보기

3번 WHERE 절에서 SELECT 별칭을 쓸 수 있다

WHERE는 SELECT보다 먼저 처리되므로 별칭을 모른다. ORDER BY는 SELECT 뒤라 쓸 수 있다.

Q4. Oracle에서 SELECT 'A' || NULL || 'B' FROM DUAL의 결과는?

  1. 오류
  2. NULL
  3. A B
  4. AB
정답 보기

4번 AB

Oracle의 || 는 NULL을 빈 문자열처럼 다룬다.

Q5. SQL Server에서 문자열을 이어 붙이는 연산자는?

  1. +
  2. .
  3. ||
  4. &
정답 보기

1번 +

Oracle은 ||, SQL Server는 +.

Q6. 열 별칭에 공백을 넣으려면?

  1. 작은따옴표로 감싼다
  2. 넣을 수 없다
  3. AS를 두 번 쓴다
  4. 큰따옴표로 감싼다
정답 보기

4번 큰따옴표로 감싼다

SELECT sal AS "월 급여" 처럼 쓴다.

헷갈리기 쉬운 O·X

SELECT 문에서 문자열 리터럴은 큰따옴표로 감싼다.

정답 보기

X 문자열 리터럴은 작은따옴표, 큰따옴표는 별칭이나 식별자에 쓴다.

SQL 키워드는 대소문자를 구별하지 않지만, 'KIM'과 'kim' 같은 데이터 값은 구별한다.

정답 보기

O WHERE ename = 'kim'은 KIM을 찾지 못한다.

DISTINCT를 쓰면 원래 테이블의 중복 데이터가 삭제된다.

정답 보기

X 조회 결과에서만 중복을 없앤다. 테이블은 그대로다.

함께 보면 좋은 개념