CS - 강의, 서적/[SQLD] 홍쌤의 데이터랩

[SQLD] 2-2~6. SQL (Alias, DUAL Table, SELECT, FROM, WHERE, GROUP/ORDER BY, HAVING)

SH3542 2024. 9. 16. 19:36

[홍쌤의 데이터랩, SQLD n과목 완벽 정리] 영상를 개인이 정리하여 [원작자의 허가 이후] 올린 글이며,

[개인이 추가로 정리한 내용]이 포함되어 있습니다.

 

 

 
 

홍쌤의 데이터랩

[개정판] SQLD n과목 완벽 정리

https://www.youtube.com/watch?v=rdfHFnqVoRw

 

 


 

SQL의 순서

작성 순서

SELECT > FROM > WHERE > GROUP BY > HAVING > ORDER BY

=> GROUP BY와 HAVING은 바꿀 수 있지만 잘 사용하지 않음

 

실행 순서

FROM > WHERE > GROUP BY > HAVING > SELECT > ORDER BY

 

별칭 (Alias)

테이블이나 컬럼에 임시적인 이름을 부여하여, 쿼리의 가독성을 높이거나 작업을 단순화하는데 사용

 

-  SELECT절 별칭 선언 시, 실행 순서가 후순위인 ORDER BY절에서만 사용 가능

- 대소문자를 구분하지 않아도 인식

- 예약어 사용 불가

 

별칭을 쌍따옴표로 감싸야 할 경우

1. 별칭에 공백 포함

2. 별칭에 특수문자 포함 (_ 제외)

3. 별칭의 대소문자를 그대로 출력

 

DUAL 테이블

- Oracle에서 기본 제공

- 테이블을 생성할 필요 없이, 연산의 결과를 간략하게 표시하기 위한 가상/더미 테이블

- DUMMY라는 이름의 단일 행/열 테이블 반환, 기본 값은 문자 "X"

 

 

e.g.

 

1)  사용 예시 - 연산 결과

SELECT 1+1

FROM DUAL;

 

2) 사용 예시 - 현재시간

SELECT SYSDATE

FROM DUAL;

SQL 쿼리 구성 요소

1. SELECT절

- 연산 및 집계의 결과, 이를 표현할 컬럼명 등 정의

- 단일행(집계 등)과 복수행 혼재 사용 불가 유의 => GROUP BY 사용

 

2. FROM

- 테이블 여러개 전달 가능

- 조인 조건 없이 테이블명 나열 시, 카타시안 곱 발생 주의

-  생략 가능 여부 상이 (SQL Server는 생략 가능, ORACLE은 23c부터/이전 버전은 DUAL 테이블 활용)

 

3. WHERE

- NULL 조회 시 IS NULL / IS NOT NULL 연산자 사용 ( '=' 연산자 활용 불가)

- 호환되는 타입끼리 자동 형변환 수행, 그러나 성능 및 안정성 문제로 권장하지 않음

 

4. GROUP BY

- 각 행을 특정 조건에 따라 그룹화하는 구문식

- WHERE절에서 비대상 컬럼 미리 제외 (WHERE절 먼저 실행되므로)

- 그룹에 대한 조건은 WHERE절에서 사용 불가 (HAVING 사용)

- 그룹화한 데이터를 그룹화 이전 데이터와 혼재 출력 불가

- 사용 시 SELECT문에 그룹화한 컬럼, 집계 함수 외 컬럼 사용 불가

 

5. HAVING

- 그룹 함수 결과를 조건으로 사용할 때 사용하는 구문식

- 집계함수 조건식을 주로 사용 (일반 조건식도 사용 가능하나 WHERE절에서 수행 권장)

- SELECT절 별칭 사용 불가

 

6. ORDER BY

- 기본 ASC(오름차순), 이 외 DESC(내림차순)

- 유일하게 SELECT절 별칭 사용 가능

- SELECT절에 선언된 순서대로의 숫자로 표시 가능(컬럼명이나 별칭 없이)

- 정렬 시, ORACLE은 NULL을 마지막에 배치, SQL Server는 처음에 배치

=> 추가로, ORACLE은 ORDER BY절에 NULLS LASH | NULLS FIRST 지정 가능

 

e.g.

 

1) 컬럼 명을 숫자로 치환하여 사용

SELECT id, name, salary
FROM employees
ORDER BY 3; -- salary 컬럼을 기준으로 오름차순 정렬