CS/SQL
[SQLD] SELECT문
hyunji1109
2025. 2. 20. 00:46
SQL 종류
- SQL은 그 기능에 따라 다음과 같이 구분함
- DDL
- 데이터베이스 구조(테이블, 스키마 등)를 정의하거나 수정하는 데 사용
- CREATE, ALTER, DROP, TRUNCATE
- DML
- 데이터를 삽입, 수정, 삭제, 조회하는 데 사용
- INSERT, UPDATE, DELETE
- DCL
- 데이터베이스에 대한 권한을 부여하거나 취소하는 데 사용
- GRANT, REVOKE
- TCL
- 트랜잭션의 처리 과정을 관리하는 데 사용
- COMMIT, ROLLBACK, SAVEPOINT
- DQL
- 데이터를 조회하는 데 사용한다. DQL 명령어는 보통 하나로 간주
- SELECT
구분 | 특징 |
DDL (Data Definition Language) |
CREATE, ALTER, DROP, TRUNCATE |
DML (Data Manipulation Language) |
INSERT, DELETE, UPDATE, MERGE |
DCL (Data Control Language) |
GRANT, REVOKE |
TCL (Transaction Control Language) |
COMMIT, ROLLBACK |
DQL (Data Query Language) |
SELECT |
💥 사실 SELECT문은 따로 SQL 종류 중 어디에도 속하지 않아서 SELECT 문을 위한 DQL등장
SELECT문 구조
- SELECT문은 다음과 같이 6개 절로 구성
- 각 절의 순서대로 작성해야 함
- GROUPBY 와 HAVING은 서로 바꿀 수 있지만 보통 사용하지 않음
- SELECT문의 내부 파싱(문법적 해석) 순서는 나열된 순서와는 다름
- FROM > WHERE > GROUP BY > HAVING > SELECT > ORDER BY 순서대로 실행함
SELECT 절
- SELECT 문장을 사용하여 불러올 컬럼명, 연산 결과를 작성하는 절
- '*'를 사용하여 테이블 내 전체 컬럼명을 불러올 수 있음
- 원하는 컬럼을 ,로 나열하여 작성 가능 (순서대로 출력함)
- 표현식이란 원래의 컬럼명을 제외한 모든 표현 가능한 대상(연산식, 기존 컬럼의 함수 변형식 포함)
문법
특징
- SELECT 절에서 표시할 대상 컬럼에 Alias(별칭) 지정 가능
- 대소문자를 구분하지 않아도 인식한다.
① emp 테이블의 전체 컬럼 조회
② emp 테이블에서 특정 컬럼 조회
③ 표현식을 사용하여 원본과 다른 데이터 출력 가능
👉 SAL * 1.1이라는 컬럼은 없지만 기존 컬럼의 값을 사용하여 연산결과를 SELECT 절에서 정의하여 출력할 수 있음.
👉 이런 표현 가능한 모든 수식을 표현식이라고 함 (함수식, 연산식 등)
컬럼 Alias(별칭)
- 컬럼명 대신 출력할 임시 이름 지정
- SELECT 절에서만 정의 가능, 원본 컬럼명을 변경되지 않음
- 컬럼명 뒤에 AS와 함께 컬럼 별칭 전달(AS는 생략 가능)
특징 및 주의사항
- SELECT문보다 늦게 수행되는 ORDER BY절에서만 컬럼 별칭 사용 가능
- 그 외 절에서 사용시 에러 발생
- 한글 사용 가능 (한글 지원 캐릭터셋 설정 시)
- 이미 존재하는 예약어는 별칭으로 사용 불가
ex) avg, count, decode, SELECT, FROM 등
- 다음의 경우 별칭에 반드시 쌍따옴표 전달 필요
1) 별칭에 공백을 포함하는 경우
2) 별칭에 특수문자를 포함하는 경우("_" 제외)
3) 별칭 그대로 전달할 경우 (입력한 대소를 그대로 출력하고자 할 때)
① 별칭 사용 예 (AS 생략 가능)
② 별칭 선언 시 쌍따옴표가 필요한 경우
👉 쌍따옴표 사용하지 않아 에러 발생함
👉 별칭에 공백 포함 시 반드시 쌍따옴표와 함께 전달
FROM 절
- 테이블을 불러올 테이블명 또는 뷰명 전달
- 테이블 여러 개 전달 가능(컴마로 구분) -> 조인 조건 없이 테이블명만 나열 시 카타시안 곱 발생 주의!
- 테이블 별칭 선언 가능(AS 쓰지 않음)
💥 테이블 별칭 선언 시 컬럼 구분자는 테이블 별칭으로만 전달(테이블명으로 사용 시 에러 발생) - ORACLE에서는 FROM절 생략 불가(의미상 필요 없는 경우 DUAL 테이블 선언)
💥 ORACLE 23c 버전부터는 생략 가능 - SQL Server에서는 FROM절 필요 없을 경우 생략 가능 (오늘 날짜 조회 시)
💥 뷰 : 테이블과 동일하게 데이터를 조회할 수 있는 객체이지만 테이블처럼 실제 데이터가 저장된 것이 아닌, SELECT문 결과에 이름을 붙여 그 이름만으로 조회가 가능하도록 한 기능
①ORACLE에서의 FROM절 생략 시 에러 발생 케이스 (DUAL 테이블 사용)
👉 ORACLE에서 FROM절 생략 시 에러 발생
👉 의미상 FROM 절이 필요 없는 경우 DAUL 전달
② 테이블 별칭 사용 예제
👉 잘못된 사용 예
👉 테이블 별칭을 선언한 경우 컬럼참조(동일한 이름의 컬럼을 구분하기 위해 테이블명 또는 별칭을 컬럼명 앞에 전달)는 테이블명으로 사용 불가