우와한 개발자

[SQL] SELECT 문 기초 - NULL, alias, ||연산자, ROWNUM(Oracle) 핵심 정리

by 우와한개발자

1. SELECT 문 구조

SELECT [DISTINCT] {* | 컬럼명 [[AS] 별칭], ... }
FROM 테이블명
SELECT [DISTINCT] {* | 컬럼명 [[AS] 별칭], ... }
	FROM 테이블명_또는_뷰
	JOIN 테이블이름_또는_뷰
	ON 조인조건
	WHERE 조건
	GROUP BY 그룹화할열
	HAVING 그룹조건
	ORDER	BY 정렬할열 [[ASC]|DESC];
  • 대괄호는 생략 가능
  • SELECT문장은 대소문자 구분 하지 않음
  • 모든 SQL구문의 끝에 세미콜롬(;) 사용 필수

 

⚠️ SELECT 쿼리의 실행 순서
: FROM, ON, JOIN  > WHERE, GROUP BY, HAVING > SELECT > DISTINCT > ORDER BY > LIMIT
FROM : 각 테이블 확인
→ ON : JOIN 조건 확인
→ JOIN  : 조인 실행
→ WHERE : 지정한 조건이 개별 행에 적용
→ GROUP BY : 지정된 열의 공통 값을 기준으로 그룹화 (집계기능이 있는 경우에만 사용)
→ HAVING : GROUP BY절이 쿼리에 있을 경우 HAVING 절의 제약조건이 그룹화된 행에 적용
→ SELECT :  마지막으로 적용
→ DISTINCT : 표현된 행에서 중복된 행은 삭제
→ ORDER BY : 지정된 데이터를 기준으로 오름차순, 내림차순 지정
→ LIMIT : LIMIT에서 벗어나는 행들은 제외되어 출력​

 

2. NULL

  • 값이 없음을 의미
  • 숫자 0이나 공백과는 다름

 

3. alias 별칭

  • 열(column)에 별칭
  • AS 키워드 사용하기도 함.(생략 가능)
  • 공백이나 특수문자, 대소문자 구분이 필요한경우 쌍따옴표 (“”) 사용
SELECT emp_name AS 사원명, salary AS 급여
FROM employees;

 

4. || 연산자 : 리터럴 문자 연결

  • 리터럴 문자열은 홑따옴표(‘’) 사용 (숫자는 사용안함.)
  • 쌍따옴표 아님
SELECT emp_name || '님의 직무는 ' || job || '입니다.' AS emp_info
FROM employees;

“”

5. DISTINCT : 중복행 제거

  • 전체 컬럼 값이 모두 동일한 행만 중복으로 판단하여 제거
SELECT DISTINCT job
FROM employees;

 

6. ROWID, ROWNUM 의사열

  • 테이블에 실제로 저장된 컬럼은 아니지만 조회 시 자동으로 생성되는 컬럼 (Pseudo Column)
  • 주로 SELECT 절에서 많이 사용

 

1) ROWID

  • 행의 물리적 저장 위치를 나타내는 고유 값 (예 AAAPr9AAEAAAACXAAA)
  • 각 행마다 유일함 (PK처럼 사용 가능)
SELECT ROWID, employee_id
FROM employees;

-- 특정 ROWID 조건 검색
SELECT ROWID, employee_id
FROM employees
WHERE ROWID = 'AAASvEAAHAAAADtAAA';

 

2) ROWNUM

  • 조회 결과에 순서를 부여하는 번호
  • 조회되는 순서대로 1부터 증가
SELECT employee_id, ROWNUM
  FROM employees;

-- 상위 3개 조회
SELECT *
FROM employees
WHERE ROWNUM <= 3;

 

⚠️ WHERE 절에서 ROWNUM 사용 시 주의사항
- ROWNUM은 1부터 순차적으로 부여되고 쿼리 실행 순서상 ROWNUM이 부여되기 전에 조건이 먼저 적용되기 때문에 ROWNUM > n 조건은 바로 사용할 수 없음 
-- ❌ 원하는 결과 안 나옴
SELECT *
FROM employees
WHERE ROWNUM > 3;​


블로그의 정보

우와한개발자 님의 블로그

우와한개발자

활동하기