1. 서론: 데이터베이스와의 대화, SQL
현대 사회에서 데이터는 기업의 핵심 자산이자 개인의 삶을 풍요롭게 하는 중요한 요소입니다. 이러한 방대한 데이터를 체계적으로 저장하고 관리하는 곳이 바로 데이터베이스이며, 우리는 이 데이터베이스와 소통하기 위한 특별한 언어가 필요합니다. 그 언어가 바로 SQL(Structured Query Language)입니다. SQL은 관계형 데이터베이스(RDB)를 다루는 표준 언어로, 데이터베이스에 저장된 정보를 효율적으로 검색하고, 새로운 데이터를 추가하며, 기존 데이터를 변경하거나 삭제하는 등 데이터베이스의 모든 작업을 수행할 수 있도록 해줍니다.
SQL은 데이터베이스 전문가뿐만 아니라 데이터를 다루는 모든 직군에게 필수적인 역량으로 자리 잡았습니다. 개발자, 데이터 분석가, 마케터, 심지어 일반 사용자까지도 SQL을 통해 필요한 데이터를 직접 추출하고 분석함으로써 더 나은 의사결정을 내릴 수 있습니다. SQL을 이해하는 것은 데이터의 바다에서 길을 잃지 않고 원하는 정보를 찾아내는 나침반을 얻는 것과 같습니다.
이 글에서는 SQL의 가장 기본적이면서도 핵심적인 문법인 데이터 조회(SELECT), 삽입(INSERT), 수정(UPDATE), 삭제(DELETE)에 대해 상세히 다룰 것입니다. 이 네 가지 명령어는 SQL의 심장과 같으며, 이들을 숙지하는 것만으로도 데이터베이스와 자유롭게 소통하고 데이터를 효과적으로 관리할 수 있는 기반을 마련할 수 있습니다. 각 명령어의 사용법과 다양한 활용 예시를 통해 SQL의 강력함을 직접 경험해 보시길 바랍니다.
2. 데이터 조회: SELECT 문
SELECT 문은 데이터베이스에서 원하는 데이터를 추출할 때 사용하는 가장 기본적인 명령어입니다. 데이터베이스에서 정보를 ‘읽어오는’ 역할을 합니다.
2.1. 모든 컬럼 조회하기: SELECT *
테이블의 모든 컬럼에 있는 데이터를 조회할 때는 * (애스터리스크)를 사용합니다.
SELECT * FROM 테이블명;
예시: employees 테이블의 모든 직원 정보를 조회합니다.
SELECT * FROM employees;
2.2. 특정 컬럼만 조회하기: SELECT 컬럼명1, 컬럼명2, ...
원하는 특정 컬럼의 데이터만 조회할 때는 컬럼 이름을 콤마(,)로 구분하여 나열합니다.
SELECT 컬럼명1, 컬럼명2 FROM 테이블명;
예시: employees 테이블에서 first_name과 last_name 컬럼만 조회합니다.
SELECT first_name, last_name FROM employees;
2.3. 조건에 맞는 데이터 조회하기: WHERE 절
특정 조건에 맞는 데이터만 필터링하여 조회할 때는 WHERE 절을 사용합니다. WHERE 절 뒤에는 조건을 명시합니다.
SELECT 컬럼명 FROM 테이블명 WHERE 조건;
예시: employees 테이블에서 age가 30 이상인 직원만 조회합니다.
SELECT * FROM employees WHERE age >= 30;
다양한 조건 연산자:
- 비교 연산자:
=,!=(또는<>),>,<,>=,<= - 논리 연산자:
AND,OR,NOT - 범위 연산자:
BETWEEN A AND B(A와 B 사이의 값 포함) - 목록 연산자:
IN (값1, 값2, ...)(목록에 있는 값 중 하나와 일치) - 패턴 매칭 연산자:
LIKE '패턴'(%는 0개 이상의 문자,_는 하나의 문자) - NULL 값 확인:
IS NULL,IS NOT NULL
예시: products 테이블에서 category가 ‘Electronics’이고 price가 100000 이상인 상품을 조회합니다.
SELECT product_name, price FROM products WHERE category = 'Electronics' AND price >= 100000;
예시: customers 테이블에서 city가 ‘Seoul’ 또는 ‘Busan’인 고객을 조회합니다.
SELECT * FROM customers WHERE city IN ('Seoul', 'Busan');
예시: users 테이블에서 email 주소가 ‘gmail.com’으로 끝나는 사용자를 조회합니다.
SELECT * FROM users WHERE email LIKE '%gmail.com';
2.4. 결과 정렬하기: ORDER BY 절
조회된 결과를 특정 컬럼을 기준으로 정렬할 때는 ORDER BY 절을 사용합니다. 기본은 오름차순(ASC)이며, 내림차순(DESC)으로 정렬할 수도 있습니다.
SELECT 컬럼명 FROM 테이블명 ORDER BY 컬럼명 [ASC|DESC];
예시: employees 테이블에서 age를 기준으로 오름차순 정렬하여 조회합니다.
SELECT * FROM employees ORDER BY age ASC;
예시: products 테이블에서 price를 기준으로 내림차순 정렬하고, product_name을 기준으로 오름차순 정렬하여 조회합니다.
SELECT * FROM products ORDER BY price DESC, product_name ASC;
2.5. 결과 개수 제한하기: LIMIT 절 (MySQL/PostgreSQL) / TOP 절 (SQL Server)
조회되는 결과의 개수를 제한할 때 사용합니다.
MySQL/PostgreSQL:
SELECT 컬럼명 FROM 테이블명 LIMIT 개수;
예시: products 테이블에서 가장 비싼 상품 5개를 조회합니다.
SELECT * FROM products ORDER BY price DESC LIMIT 5;
SQL Server:
SELECT TOP 개수 컬럼명 FROM 테이블명;
예시: products 테이블에서 가장 비싼 상품 5개를 조회합니다.
SELECT TOP 5 * FROM products ORDER BY price DESC;
3. 데이터 삽입: INSERT 문
INSERT 문은 테이블에 새로운 데이터를 추가할 때 사용합니다.
3.1. 모든 컬럼에 데이터 삽입하기
테이블의 모든 컬럼에 순서대로 데이터를 삽입할 때는 컬럼 이름을 생략할 수 있습니다. 이 경우 VALUES 절의 값 순서가 테이블의 컬럼 순서와 일치해야 합니다.
INSERT INTO 테이블명 VALUES (값1, 값2, ...);
예시: employees 테이블에 새로운 직원 정보를 추가합니다.
INSERT INTO employees VALUES (101, 'John', 'Doe', 30, 'New York');
3.2. 특정 컬럼에만 데이터 삽입하기
특정 컬럼에만 데이터를 삽입하고 싶을 때는 INSERT INTO 뒤에 컬럼 이름을 명시합니다. 명시되지 않은 컬럼은 NULL 값이나 기본값으로 채워집니다.
INSERT INTO 테이블명 (컬럼명1, 컬럼명2, ...) VALUES (값1, 값2, ...);
예시: products 테이블에 product_name과 price만 지정하여 상품을 추가합니다.
INSERT INTO products (product_name, price) VALUES ('Laptop', 1200000);
4. 데이터 수정: UPDATE 문
UPDATE 문은 테이블에 이미 존재하는 데이터를 변경할 때 사용합니다. SET 절로 변경할 컬럼과 새 값을 지정하고, WHERE 절로 대상을 선택합니다.
UPDATE 테이블명 SET 컬럼명1 = 새값1, 컬럼명2 = 새값2 WHERE 조건;
주의: WHERE 절을 생략하면 테이블의 모든 행이 수정되므로 매우 신중해야 합니다.
예시: employees 테이블에서 employee_id가 101인 직원의 city를 ‘Los Angeles’로 변경합니다.
UPDATE employees SET city = 'Los Angeles' WHERE employee_id = 101;
예시: products 테이블에서 category가 ‘Electronics’인 모든 상품의 price를 10% 인상합니다.
UPDATE products SET price = price * 1.1 WHERE category = 'Electronics';
5. 데이터 삭제: DELETE 문
DELETE 문은 테이블에서 데이터를 제거할 때 사용합니다. FROM 절 뒤에 테이블 이름을 명시하고, WHERE 절로 삭제할 행을 지정합니다.
DELETE FROM 테이블명 WHERE 조건;
주의: WHERE 절을 생략하면 테이블의 모든 데이터가 삭제되므로 매우 신중해야 합니다. 이는 TRUNCATE TABLE과 유사하지만, DELETE는 트랜잭션 로그를 기록하여 롤백이 가능하고, TRUNCATE는 불가능하다는 차이가 있습니다.
예시: employees 테이블에서 employee_id가 101인 직원을 삭제합니다.
DELETE FROM employees WHERE employee_id = 101;
예시: orders 테이블에서 order_date가 ‘2024-01-01’ 이전인 모든 주문을 삭제합니다.
DELETE FROM orders WHERE order_date < '2024-01-01';
6. 결론: SQL, 데이터 관리의 필수 도구
SQL의 SELECT, INSERT, UPDATE, DELETE 문은 관계형 데이터베이스를 다루는 데 있어 가장 기본적이면서도 강력한 도구입니다. 이 네 가지 명령어를 통해 우리는 데이터베이스에 저장된 정보를 자유자재로 조회하고, 새로운 정보를 추가하며, 기존 정보를 변경하거나 불필요한 정보를 제거할 수 있습니다.
SELECT 문은 데이터의 바다에서 원하는 정보를 찾아내는 탐색기 역할을 하며, WHERE, ORDER BY, LIMIT (또는 TOP)과 같은 절들을 통해 더욱 정교한 검색이 가능합니다. INSERT 문은 데이터베이스에 생명을 불어넣는 역할을 하고, UPDATE 문은 데이터의 변화를 반영하며, DELETE 문은 불필요한 데이터를 정리하여 데이터베이스를 깔끔하게 유지합니다.
이러한 기본 문법들을 숙지하는 것은 SQL 학습의 첫걸음이자 가장 중요한 단계입니다. 이들을 바탕으로 조인(JOIN), 서브쿼리(Subquery), 집계 함수(Aggregate Function) 등 더 복잡한 SQL 문법들을 학습해 나간다면, 데이터베이스를 활용하는 능력을 한층 더 향상시킬 수 있을 것입니다. SQL은 단순한 명령어가 아니라, 데이터와 소통하고 데이터를 통해 가치를 창출하는 강력한 언어임을 기억하시길 바랍니다. 이 글이 여러분의 SQL 학습 여정에 튼튼한 기반이 되기를 희망합니다.
