SQL(Structured Query Language)은 관계형 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어입니다. SQL은 데이터베이스 스키마 생성 및 수정, 데이터 입력 및 수정, 데이터베이스 객체 접근 제어 등을 위한 명령어를 제공합니다.
쉽게 말해
데이터베이스에서 데이터를 조회하거나 조작하기 위한 언어
라고 할 수 있습니다. 우리는 이번에 자주 사용되는 SQL 문법을 총정리해보겠습니다.
들어가기 전, 데이터베이스 및 테이블의 구성 요소에 대해 간단히 알아보겠습니다.
데이터베이스(Database, DB)는 여러 개의 테이블(Table)로 이루어져 있습니다. 각 테이블은 행(Row)과 열(Column)로 구성되며, 테이블을 구성하는 요소들은 다음과 같습니다.
테이블(Table)
: 데이터를 저장하는 기본 단위
컬럼(Column)
: 테이블에서 각 데이터의 속성(예: 이름, 나이, 이메일)
행(Row, Record)
: 한 개의 데이터 단위(예: '홍길동', 25, 'hong@example.com↗ ')
기본 키(Primary Key, PK)
: 테이블에서 각 행을 유일하게 식별하는 값
외래 키(Foreign Key, FK)
: 다른 테이블과 관계를 맺을 때 사용하는 키
🚀
SELECT / FROM / WHERE 🔗
SELECT
는 데이터베이스에서 원하는 데이터를 조회할 때 사용하는 가장 기본적인 명령어입니다.
SELECT name , age FROM Users;
name age 홍길동 25 이동훈 27 햄랑이 14 홍길은 25
WHERE
절을 사용하면 특정 조건을 만족하는 데이터만 가져올 수 있습니다.
SELECT name FROM Users WHERE age >= 20 ;
🚀
GROUP BY / HAVING / ORDER BY 🔗
데이터를 그룹으로 묶거나 정렬할 때 사용하는 문법입니다.
특정 컬럼을 기준으로 데이터를 그룹화할 때 사용합니다.
SELECT age, COUNT ( * ) FROM Users GROUP BY age;
GROUP BY로 그룹화한 데이터에서 특정 조건을 걸 때 사용합니다.
SELECT age, COUNT ( * ) FROM Users GROUP BY age HAVING COUNT ( * ) > 1 ;
WHERE
: GROUP BY 전에 조건을 적용 (개별 행 필터링)
HAVING
: GROUP BY 후 결과 그룹에 조건 적용 (그룹 필터링)
조회한 데이터를 정렬할 때 사용합니다.
SELECT name , age FROM Users ORDER BY age DESC ;
name age 이동훈 27 홍길동 25 홍길은 25 햄랑이 14
🚀
JOIN / INNER JOIN / OUTER JOIN 🔗
데이터베이스에서 여러 개의 테이블을 합쳐서 조회할 때 사용합니다.
Orders 테이블을 추가로 생성하고, Users 테이블과 Orders 테이블을 조인하는 예제를 살펴보겠습니다.
id(pk) user_id(fk) product 1 1 Apple 2 2 Banana 3 1 Orange 4 3 Pineapple 5 4 Watermelon 6 1 Strawberry 7 2 Grape 8 3 Melon 9 4 Mango
Inner Join은 두 테이블에서 일치하는 데이터만 가져옵니다.
SELECT Users . name , Orders . product
FROM Users
INNER JOIN Orders ON Users . id = Orders . user_id ;
name product 홍길동 Apple 이동훈 Banana 홍길동 Orange 햄랑이 Pineapple 홍길은 Watermelon 홍길동 Strawberry 이동훈 Grape 햄랑이 Melon 홍길은 Mango
Left Join은 왼쪽 테이블(Users)의 데이터는 모두 가져오고, 오른쪽 테이블(Orders)의 데이터는 일치하는 것만 가져옵니다.
SELECT Users . name , Orders . product
FROM Users
LEFT JOIN Orders ON Users . id = Orders . user_id
WHERE Orders . product IN ( 'Apple' , 'Banana' , 'Orange' );
name product 홍길동 Apple 이동훈 Banana 홍길동 Orange 햄랑이
두 개 이상의 SELECT 결과를 합칠 때 사용합니다.
Employees 테이블을 추가로 생성하고, Users 테이블과 Employees 테이블을 합치는 예제를 살펴보겠습니다.
id(pk) name department 1 홍길동 개발팀 2 이동훈 마케팅팀 3 홍길은 개발팀 4 김철수 디자인팀 5 박영희 마케팅팀 6 이순신 개발팀
SELECT name FROM Users UNION SELECT name FROM Employees;
name 홍길동 이동훈 햄랑이 홍길은 김철수 박영희 이순신
데이터의 개수, 합, 평균을 구할 때 사용하는 문법입니다.
데이터의 개수를 구할 때 사용합니다.
SELECT COUNT ( * ) FROM Users;
데이터의 합을 구할 때 사용합니다.
SELECT SUM (age) FROM Users;
데이터의 평균을 구할 때 사용합니다.
SELECT AVG (age) FROM Users;
데이터의 최대값, 최소값을 구할 때 사용하는 문법입니다.
데이터의 최대값을 구할 때 사용합니다.
SELECT MAX (age) FROM Users;
데이터의 최소값을 구할 때 사용합니다.
SELECT MIN (age) FROM Users;
조건에 따라 데이터를 조회할 때 사용하는 문법입니다.
특정 값들 중 하나에 해당하는 데이터를 조회할 때 사용합니다.
SELECT name FROM Users WHERE age IN ( 25 , 27 );
특정 범위에 해당하는 데이터를 조회할 때 사용합니다.
SELECT name FROM Users WHERE age BETWEEN 20 AND 30 ;
특정 패턴에 해당하는 데이터를 조회할 때 사용합니다.
SELECT name FROM Users WHERE name LIKE '홍%' ;
데이터가 NULL인 경우를 처리할 때 사용하는 문법입니다.
NULL인 경우 대체할 값을 지정할 때 사용합니다.
SELECT COALESCE (email, '이메일 없음' ) FROM Users;
조건에 따라 다른 값을 반환할 때 사용합니다.
SELECT name , CASE WHEN age >= 20 THEN '성인' ELSE '미성년자' END AS age_group FROM Users;
name age_group 홍길동 성인 이동훈 성인 햄랑이 미성년자 홍길은 성인
중복된 데이터를 제거하거나 조회할 데이터 개수를 제한할 때 사용하는 문법입니다.
중복된 데이터를 제거할 때 사용합니다.
SELECT DISTINCT age FROM Users;
조회할 데이터 개수를 제한할 때 사용합니다.
SELECT name FROM Users LIMIT 2 ;
쿼리 안에 또 다른 쿼리를 넣어 사용하는 방법입니다.
SELECT name FROM Users WHERE age = ( SELECT MAX (age) FROM Users);
SQL은 데이터베이스를 다룰 때 필수적인 언어이며, 코딩 테스트에서도 자주 출제됩니다. 다양한 명령어를 익히고 실습하면서 SQL 실력을 키워 보도록 합시다.
실제 프로젝트에서 SQL을 어떻게 활용할 수 있을까?
성능 최적화를 위해 인덱스를 어떻게 사용할까?
트랜잭션을 언제 사용하면 좋을까?