[SQL 이해하기] - 8.1. SQL: SELECT I
데이터는 데이터베이스(Database, DB)라는 저장소에 용도와 목적에 맞는 데이터들끼리 모여서 저장된다. 가장 널리 사용되고 이해하기 쉬운 구조의 DB는 관계형 DB(Relational DB, RDB)인데 2차원 테이블 형태로 데이터들을 저장하고 관리한다. 우리가 익히 들어서 알고 있는 ORACLE, MySQL(Maria DB), SQL Server(MS SQL), PostgreSQL 등이 모두 관계형 구조를 사용하는 데이터베이스를 관리하는 관리 시스템들이다.
데이터베이스(DB)를 관리하는 관리 시스템들을 DBMS(DataBase Management System)라고 한다. 데이터는 DB에 저장되지만 이 DB를 실질적으로 관리하는 주체는 앞서 예로 들었던 ORACLE, MySQL 등과 같은 DBMS들이다. DBMS에 작업을 지시하기 위해 SQL(Structured Query Language)이라는 언어를 사용한다. 이제부터 이 SQL에 대해 살펴보자.
가장 첫번째로 살펴볼 작업은 DB에 저장되어 있는 데이터를 꺼내어 보는 SELECT 명령이다. SELECT 명령의 기본 형태는 아래와 같다.
SELECT 컬럼 1, 컬럼 2, ... FROM 테이블 [WHERE 조건들]
만약 두 개 이상의 테이블들로부터 데이터를 가져온다면 데이터를 가져오는 테이블의 이름을 줄여 부르기 위해 Alias(별명)을 활용한다.
SELECT T1.컬럼1, T2.컬럼2, ... FROM 테이블1 T1, 테이블2 T2 [WHERE 조건절]
필자의 작은 경험에 비추어 볼 때 SELECT 명령 자체는 간단하지만, 데이터를 지정하는 조건들이 정교해지면 빠르고 정확한 명령을 만들기 어려운 것이 또한 SELECT 명령이다.
SELECT 명령으로 DB에서 데이터를 꺼내온 후 사용자에게 제공하기 전에 가공이 필요한 경우가 많다. 데이터 가공을 위해 다양한 함수들이 사용된다. 그리고 SQL 사용능력을 평가하는 시험들에서는 이 함수들이 문제의 주요한 원천이되기 때문에 좀 더 살펴보자.
- LTRIM(컬럼 이름 or 문자열, '문자들')
컬럼의 데이터 또는 문자열의 왼쪽끝에 '문자들'에 해당하는 문자들이 있으면 이들을 제거한다. 만약 두 번째 인자인 '문자들'이 지정되어 있지 않으면 공백 문자들을 제거한다.
예) SELECT LTRIM('DATABASE', 'DE') FROM DUAL;
→ ATABASE
- RTRIM(컬럼 이름 or 문자열, '문자들')
컬럼의 데이터 또는 문자열의 오른쪽끝에 '문자들'에 해당하는 문자들이 있으면 이들을 제거한다. 만약 두 번째 인자인 '문자들'이 지정되어 있지 않으면 공백 문자들을 제거한다.
예) SELECT RTRIM('SQL', 'LE') FROM DUAL;
→ SQ
- TRIM(['문자' FROM] 컬럼 이름 or 문자열)
컬럼의 데이터 또는 문자열의 양쪽 끝에 '문자'에 해당하는 문자들이 있으면 이들을 제거한다. 만약 첫 번째 인자인 '문자'가 지정되어 있지 않으면 공백 문자들을 제거한다. 문자는 한 글자만 지정할 수 있다.
예) SELECT TRIM('D' FROM 'DEVELOPEDD') FROM DUAL;
→ EVELOPE
- SUBSTR(컬럼 이름 or 문자열, 시작점, [길이])
컬럼 데이터 또는 문자열의 시작점으로부터 길이에 해당하는 문자들만 반환한다.
예) SELECT SUBSTR('RIGHT', 2, 3) FROM DUAL;
→ IGH
- REPLACE(컬럼 이름 or 문자열, 변경 전 문자열 [, 변경 후 문자열])
컬럼 데이터 또는 문자열에서 변경 전 문자열을 찾아 변경 후 문자열로 바꿔주는 함수이다. 변경 후 문자열을 생략하면 데이터에서 변경 전 문자열을 삭제한다.
예) SELECT REPLACE('LIGHT', 'L', 'R') FROM DUAL;
→ RIGHT
함수들은 여럿이기 때문에 헷갈리기 쉽다. 이름과 그 동작을 연관해서 정확하게 기억하도록 노력해야 한다. 다음 글에서는 SELECT 명령과 함께 사용하는 함수들 중 숫자, 숫자, 날짜, NULL 관련, CASE 함수들을 정리해보도록 하자.
■