
SELECT [ALL | DISTINCT] 컬럼명1, 컬럼명2, ...
FROM 테이블명;
| 구문 | 설명 |
|---|---|
| SELECT | 조회할 컬럼지정 |
| ALL | 중복된 행을 포함하여 조회(기본값) |
| DISTINCT | 중복된 결과 제거 |
| * | 모든 컬럼 조회 |
| FROM | 데이터를 조회할 테이블 지정 |
💡 예시
-- 모든 컬럼 조회
SELECT *
FROM EMPLOYEES;
-- 특정 컬럼 조회
SELECT FIRST_NAME, LAST_NAME
FROM EMPLOYEES;
-- 중복 제거
SELECT DISTINCT DEPARTMENT_ID
FROM EMPLOYEES;
SELECT FIRST_NAME AS 이름
FROM EMPLOYEES;
-- AS 사용
SELECT FIRST_NAME AS 이름
FROM EMPLOYEES;
-- AS 생략
SELECT FIRST_NAME 이름
FROM EMPLOYEES;
-- 공백이 포함된 별칭
SELECT FIRST_NAME AS "사원 이름"
FROM EMPLOYEES;
⚠️ Oracle에서 큰따옴표는 별칭에 사용한다. 문자열 값을 표현할 때는
작은따옴표(' ')를 사용한다.
| 구분 | 사용 방법 |
|---|---|
| oracle | \\(수직 바 2개) |
| SQL server | + |
| 문자열 연결 함수 | CONCAT() |
💡 Oracle 예시
SELECT FIRST_NAME || LAST_NAME AS FULL_NAME
FROM EMPLOYEES;
FIRST_NAME과 LAST_NAME의 문자열을 연결하여 FULL_NAME이라는 별칭으로 조회한다.
공백을 넣어 이름을 연결하고 싶다면 다음과 같이 작성할 수 있다.
SELECT FIRST_NAME || ' ' || LAST_NAME AS FULL_NAME
FROM EMPLOYEES;
SQL문은 작성한 순서와 실제 논리적 처리 순서가 다르다.
[실행 순서]
FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
SELECT 컬럼명
FROM 테이블명
WHERE 조건식;
💡 예시
SELECT *
FROM EMPLOYEES
WHERE SALARY >= 3000;
//급여가 3000 이상인 행만 조회한다.
| 연산자 | 의미 |
|---|---|
= | 같다 |
| >, < | 크다, 작다 |
| >=,<= | 크거나, 작거나 같다 |
| !=, <> | 같지 않다 |
| ^= | oracle에서 같지 않다 |
SELECT *
FROM EMPLOYEES
WHERE SALARY BETWEEN 2000 AND 5000;
→ 급여가 2000 이상 5000 이하인 행을 조회한다.
WHERE SALARY NOT BETWEEN 2000 AND 5000;
SELECT *
FROM EMPLOYEES
WHERE DEPARTMENT_ID IN (10, 20, 30);
→ 부서 번호가 10, 20, 30 중 하나인 행을 조회한다.
반대 조건은 NOT IN이다.
WHERE DEPARTMENT_ID NOT IN (10, 20, 30);
⚠️ NOT IN 목록에 NULL이 포함되면 예상과 달리 결과가 반환되지 않을 수 있으므로 주의한다.
③ LIKE
문자열의 특정 패턴과 일치하는 값을 조회한다.
| 와일드카드 | 의미 |
|---|---|
| % | 0개 이상의 임의의 문자 |
| _ | 임의의 문자 1개 |
💡 예시
-- A로 시작하는 이름
SELECT *
FROM EMPLOYEES
WHERE FIRST_NAME LIKE 'A%';
-- A로 시작하고 두 번째 문자가 임의의 한 글자인 이름
SELECT *
FROM EMPLOYEES
WHERE FIRST_NAME LIKE 'A_%';
SELECT *
FROM EMPLOYEES
WHERE COMMISSION_PCT IS NULL;
반대 조건은 IS NOT NULL이다.
WHERE COMMISSION_PCT IS NOT NULL;
+) Oracle에서는 길이가 0인 문자열('')을 NULL로 취급한다.
SELECT *
FROM EMPLOYEES
WHERE COMMISSION_PCT IS NULL;
일반적으로 공백 한 칸인 ' '은 빈 문자열''과 다르므로 주의해야 한다.
| 연산자 | 의미 |
|---|---|
| AND | 두 조건을 모두 만족 |
| OR | 두 조건 중 하나 이상 만족 |
| NOT | 조건의 결과를 반대로 변경 |
💡 예시
SELECT *
FROM EMPLOYEES
WHERE SALARY >= 3000
AND DEPARTMENT_ID = 10;
→ 급여가 3000 이상이면서 부서 번호가 10인 행을 조회한다.
논리 연산자 우선순위
NOT → AND → OR
조건이 여러 개라면 괄호를 사용해 의도를 명확하게 표현할 수 있다.
| 구분 | 연산자 |
|---|---|
| 부정 비교 연산자 | !=, ^=, <> |
| 부정 SQL 연산자 | NOT BETWEEN, NOT IN, NOT LIKE |
| NULL 부정조건 | IS NOT NULL |
💡 예시
-- 범위에 포함되지 않는 값
WHERE SALARY NOT BETWEEN 2000 AND 5000;
-- 목록에 포함되지 않는 값
WHERE DEPARTMENT_ID NOT IN (10, 20, 30);
-- 패턴과 일치하지 않는 값
WHERE FIRST_NAME NOT LIKE 'A%';
SELECT SALARY,
CASE
WHEN SALARY >= 5000 THEN 'HIGH'
WHEN SALARY >= 3000 THEN 'MIDDLE'
ELSE 'LOW'
END AS SALARY_GRADE
FROM EMPLOYEES;
SELECT DEPARTMENT_ID,
CASE DEPARTMENT_ID
WHEN 10 THEN 'ACCOUNTING'
WHEN 20 THEN 'RESEARCH'
ELSE 'OTHER'
END AS DEPT_NAME
FROM EMPLOYEES;
SELECT DEPARTMENT_ID,
DECODE(DEPARTMENT_ID,
10, 'ACCOUNTING',
20, 'RESEARCH',
'OTHER') AS DEPT_NAME
FROM EMPLOYEES;
ORDER BY절은 조회 결과를 특정 컬럼이나 표현식을 기준으로 정렬한다.
ASC : 오름차순(기본값)
DESC : 내림차순
```
-- NULL을 마지막에 정렬
ORDER BY COMMISSION_PCT ASC NULLS LAST;
-- NULL을 처음에 정렬
ORDER BY COMMISSION_PCT ASC NULLS FIRST;
컬럼을 여러 개 지정하면 앞의 정렬 기준을 우선 적용하고, 값이 같은 경우 다음 기준으로 정렬한다.
SELECT FIRST_NAME, DEPARTMENT_ID, SALARY
FROM EMPLOYEES
ORDER BY DEPARTMENT_ID ASC, SALARY DESC;
→ 부서 번호는 오름차순, 같은 부서 안에서는 급여를 내림차순으로 정렬한다.