안녕하세요! 이번 글에서는 SELECT의 기본 구조와 함께 여러 가지 유용한 함수들을 설명하고자 합니다.
문자형 함수, 숫자형 함수, 날짜형 함수, 명시적/암시적 형변환, DUAL 테이블, 조건 처리 함수, WITH 구문, VIEW 테이블, NULL, ROWID 등에 대해 정리해보았습니다.
SQL로 데이터를 보다 효과적으로 다루고 싶은 분들에게 유익한 글이 되었으면 좋겠습니다.
1. SELECT 기본 구조
SELECT 명령어는 데이터베이스에서 특정 데이터를 조회하기 위해 사용된다. 다음은 기본적인 SELECT 문장의 구조이다.
- SELECT: 조회하고자 하는 대상 컬럼을 명시한다.
- FROM: 데이터가 존재하는 테이블의 이름을 지정한다.
- WHERE: 특정 조건을 만족하는 행을 필터링한다.
- GROUP BY: 데이터를 특정 기준으로 그룹화한다.
- HAVING: 그룹화된 데이터에 조건을 부과한다.
- ORDER BY: 결과를 정렬한다.
예시:
SELECT 컬럼명1, 컬럼명2
FROM 테이블명
WHERE 조건
GROUP BY 집계기준컬럼명
HAVING 조건
ORDER BY 컬럼명;
2. SELECT 명령어의 유용한 기능
2-1 DISTINCT
- 중복된 값을 제거하고 유일한 값만을 조회할 때 사용된다.
- 예시: SELECT DISTINCT 컬럼명 FROM 테이블명;
- NULL 값도 단일 행으로 간주되며, 여러 컬럼을 조합하여 중복 여부를 판단할 수 있다.
2-2 COUNT 함수
- 데이터의 개수를 세기 위한 함수로, NULL 값은 제외된다.
- 예시: SELECT COUNT(컬럼명) FROM 테이블명;
3. 문자형 함수
SQL에서 문자형 데이터를 처리하기 위한 다양한 함수들이 제공된다.
- LOWER(문자열): 문자열을 소문자로 변환한다.
- UPPER(문자열): 문자열을 대문자로 변환한다.
- CONCAT(문자열1, 문자열2): 두 문자열을 결합한다.
- SUBSTR(문자열, m, n): 문자열에서 m번째 위치부터 n개의 문자를 추출한다.
- LENGTH(문자열): 문자열의 길이를 반환하며, 공백도 포함한다.
- TRIM(문자열, 지정된 문자): 문자열의 양쪽에서 지정된 문자를 제거한다. 지정된 문자가 없으면 공백을 제거한다.
- LTRIM(문자열, 지정된 문자): 문자열의 왼쪽에서 지정된 문자를 삭제한다. 지정된 문자가 없으면 좌측 공백을 제거한다.
- RTRIM(문자열, 지정된 문자): 문자열의 오른쪽에서 지정된 문자를 삭제한다. 지정된 문자가 없으면 우측 공백을 제거한다.
4. 숫자형 함수
숫자형 데이터를 처리할 때 유용한 함수들이 있다.
- ROUND(숫자, 소수점 자릿수): 주어진 숫자를 반올림한다.
- TRUNC(숫자, 소수점 자릿수): 주어진 숫자를 버림한다.
- CEIL(숫자): 주어진 숫자보다 크거나 같은 최소 정수를 반환한다.
- FLOOR(숫자): 주어진 숫자보다 작거나 같은 최대 정수를 반환한다.
- MOD(분자, 분모): 분자를 분모로 나눈 나머지를 반환한다.
- SIGN(숫자): 숫자가 양수면 1, 0이면 0, 음수면 -1을 반환한다.
- ABS(숫자): 절댓값을 반환한다.
5. 날짜형 함수
SQL에서 날짜형 데이터를 다룰 때는 다음과 같은 함수들이 사용된다.
- SYSDATE: 현재 시스템 날짜와 시각을 반환한다. 예를 들어, 오늘 날짜를 조회하거나 날짜 계산을 할 때 사용된다.
- 예시: TO_CHAR(SYSDATE, 'YYYYMMDD')로 형변환하여 특정 형식의 문자열로 변환할 수 있다.
- EXTRACT(정보 FROM 날짜): 날짜형 데이터에서 특정 정보를 추출할 때 사용된다.
- 예시: EXTRACT(YEAR FROM SYSDATE)는 현재 연도를 반환한다.
6. 명시적/암시적 형변환
- 명시적 형변환: 사용자가 직접 함수(TO_NUMBER, TO_CHAR, TO_DATE 등)를 사용해 데이터 유형을 변환한다.
- 암시적 형변환: 데이터베이스가 자동으로 형변환을 수행한다. 단, 암시적 형변환이 발생할 경우 성능 저하나 인덱스 사용에 영향을 미칠 수 있다.
7. DUAL 테이블
- DUAL 테이블은 오라클에 존재하는 기본 테이블로, 하나의 열로만 이루어져 있다.
- 주로 오늘 날짜를 구하거나 간단한 계산을 할 때 사용된다.
- 예시: SELECT SYSDATE FROM DUAL;
8. 조건 처리 함수: DECODE와 CASE WHEN
- DECODE: 특정 값에 대한 조건을 처리하는 함수로, IF 문과 유사한 기능을 수행한다.
- 예시: DECODE(컬럼, 값, 참일 때 출력값, 거짓일 때 출력값)
- CASE WHEN: 복잡한 조건을 처리할 때 사용하며, IF 문을 확장한 형태이다.
- 예시:
SELECT 컬럼명,
CASE WHEN 조건 THEN '조건이 참일 때 결과'
ELSE '거짓일 때 결과'
END AS 결과컬럼명
FROM 테이블명;
9. ORDER BY와 WHERE 조건문
- ORDER BY: 조회된 데이터를 정렬하는 기능을 한다.
- 기본값은 **오름차순(ASC)**이며, 내림차순으로 정렬하려면 **DESC**를 사용한다.
- WHERE 조건문: 데이터를 필터링하는 데 사용된다.
- 연산자 종류: IN, NOT IN, IS NULL, IS NOT NULL, BETWEEN, LIKE 등.
- 예시: SELECT * FROM 테이블명 WHERE 컬럼명 LIKE 'ki%'; (문자열이 'ki'로 시작하는 경우)
10. WITH 구문
- WITH 구문은 서브쿼리를 사용하여 임시 테이블이나 뷰(view)처럼 사용할 수 있게 한다.
- 서브쿼리란 SELECT문 내에 또 다른 SELECT문이 있는 형태의 쿼리이다.
- 별칭을 지정하여 가독성을 높이고, 재사용이 가능하게 만든다.
- 인라인뷰나 임시 테이블로 판단될 수 있다.
- 인라인뷰: 서브쿼리가 FROM 절 내에 사용된 것.
11. VIEW 테이블
- VIEW 테이블은 가상 테이블로 실제 데이터를 저장하지 않고, 기존 테이블에서 가져온 데이터를 기반으로 만들어진다.
- 테이블 구조가 변경되더라도 독립적으로 존재하며, 다음과 같은 목적으로 사용된다:
- 사용상의 편의: 복잡한 쿼리를 단순하게 만들어준다.
- 성능 향상: 자주 사용되는 쿼리를 미리 정의해두어 성능을 향상시킨다.
- 보안 관리: 특정 데이터를 숨기기 위해 사용.
- 임시 작업: 특정한 분석 작업이나 일시적인 데이터를 처리하기 위해 사용된다.
12. NULL 관련 함수
SQL에서는 NULL 값에 대한 처리를 돕는 여러 함수가 있다.
- NVL(컬럼1, 대체값): 컬럼1이 NULL일 경우, 대체값으로 변환해 반환한다. (ISNULL과 동일)
- 두 표현식의 데이터 타입이 동일해야 한다.
- NVL2(컬럼1, 결과1, 결과2):
- 컬럼1이 NULL일 때 결과2를 반환한다.
- 컬럼1이 NOT NULL일 때 결과1을 반환한다.
- NULLIF(v1, v2):
- v1과 v2가 **같다면 NULL**을 반환한다.
- **다르면 v1**을 반환한다.
- COALESCE(v1, v2, v3...vn): NULL이 아닌 최초의 값을 반환한다. (v1이 NOT NULL이라면 v1 반환)
13. GROUP BY와 HAVING
- GROUP BY: 데이터를 특정 기준으로 그룹화한다.
- 오라클에서는 NULL 값도 집계할 수 있으나, SQL Server에서는 불가하다.
- SELECT 절의 컬럼과 GROUP BY의 컬럼이 동일해야 한다.
- 이름 붙이기와 같은 활동은 GROUP BY 내에서는 불가능하다.
- HAVING: GROUP BY로 그룹화된 데이터에 조건을 부과한다.
- 집계 함수: SUM, AVG, MAX, MIN, COUNT 등.
- 예시:
SELECT 컬럼명, COUNT(*)
FROM 테이블명
GROUP BY 컬럼명
HAVING COUNT(*) > 1;
- 집계 함수 종류:
- COUNT(*): NULL을 포함한 전체 행의 수를 반환한다.
- COUNT(exp): NULL을 제외한 행의 수를 반환한다.
- SUM: 합계 계산.
- AVG: 평균 계산.
- MAX: 최대값.
- MIN: 최소값.
- STDDEV: 표준편차.
- VARIAN: 분산.
14. SQL 실행 순서
SQL 문은 특정한 순서로 실행된다. 이 순서를 잘 이해하는 것은 복잡한 쿼리를 작성하거나 디버깅할 때 매우 중요하다.
- 실행 순서:
- FROM: 데이터가 조회되는 테이블을 결정.
- WHERE: 조건에 맞는 데이터를 필터링.
- GROUP BY: 데이터를 그룹화.
- HAVING: 그룹화된 데이터에 대해 조건을 부과.
- SELECT: 최종적으로 조회할 컬럼을 결정.
- ORDER BY: 데이터를 정렬.
- 예시:
SELECT 컬럼명
FROM 테이블명
WHERE 조건
GROUP BY 컬럼명
HAVING 조건
ORDER BY 컬럼명;
15. ROWID
- ROWID는 데이터가 저장된 위치를 식별하는 고유한 값이다.
- 데이터베이스 내에서 각 행을 구분할 수 있는 유일한 값이다.
- 자동 생성되며, 테이블에 데이터를 입력할 때 데이터 블록에 저장된 순서대로 생성된다.
- 예시:
SELECT ROWID, 컬럼명
FROM 테이블명
WHERE 조건;
혹시 이해가 어려우시다면, 이전 글을 먼저 참고해보시면 좋을 것 같습니다.
반응형
'IT & AI > AI 지식' 카테고리의 다른 글
SQL 활용 JOIN과 다양한 결합 방식 (1) | 2024.11.29 |
---|---|
SQL 활용 GROUP 함수와 테이블 연결 기법 (0) | 2024.11.28 |
SQL 기본 및 명령어 DCL, DDL, DML, TCL (0) | 2024.11.26 |
JAVA 입출력 스트림, 보조 스트림, 입출력 API (0) | 2024.11.23 |
JAVA 기본 API, 스레드, 컬렉션 프레임워크 (0) | 2024.11.22 |