SQL 기초문법 정리 - SELECT & WHERE절

SQL 기초문법 정리 - SELECT & WHERE절

SELECT 문법 구조

SQL의 SELECT 문은 데이터베이스에서 데이터를 조회하는 기본 명령어다.

1
2
3
SELECT column1, column2, ...
FROM table_name
WHERE condition;

기본 조회

1
2
3
4
5
6
7
8
-- 전체 컬럼 조회
SELECT * FROM users;

-- 특정 컬럼 조회
SELECT name, email FROM users;

-- 별칭(alias) 사용
SELECT name AS user_name, email AS user_email FROM users;

*는 모든 컬럼을 의미하지만, 운영 환경에서는 필요한 컬럼만 명시하는 것이 성능상 유리하다.

WHERE 조건절

WHERE절은 조회할 데이터의 조건을 지정한다. 다양한 연산자와 함수를 활용할 수 있다.

비교 연산자

1
2
3
4
5
6
-- 기본 비교 연산자
SELECT * FROM users WHERE age = 25;
SELECT * FROM users WHERE age > 30;
SELECT * FROM users WHERE age >= 25;
SELECT * FROM users WHERE age <> 30;
SELECT * FROM users WHERE age != 30;

논리 연산자

1
2
3
4
5
6
7
8
-- AND 연산자
SELECT * FROM users WHERE age >= 25 AND city = '서울';

-- OR 연산자
SELECT * FROM users WHERE city = '서울' OR city = '부산';

-- NOT 연산자
SELECT * FROM users WHERE NOT city = '서울';

패턴 매칭 (LIKE)

1
2
3
4
5
6
7
8
9
10
11
-- 특정 문자로 시작
SELECT * FROM users WHERE email LIKE 'kim%';

-- 특정 문자로 끝남
SELECT * FROM users WHERE email LIKE '%gmail.com';

-- 특정 문자 포함
SELECT * FROM users WHERE name LIKE '%수%';

-- 한 글자 매칭 (_)
SELECT * FROM users WHERE name LIKE '김_수';

범위 조건

1
2
3
4
5
6
7
8
-- BETWEEN 연산자
SELECT * FROM users WHERE age BETWEEN 25 AND 35;

-- IN 연산자
SELECT * FROM users WHERE city IN ('서울', '부산', '대구');

-- NOT IN 연산자
SELECT * FROM users WHERE city NOT IN ('서울', '부산');

NULL 처리

1
2
3
4
5
6
7
-- NULL 값 확인
SELECT * FROM users WHERE phone IS NULL;
SELECT * FROM users WHERE phone IS NOT NULL;

-- NULL 값은 = 연산자로 비교할 수 없음
-- WHERE phone = NULL (잘못된 방법)
-- WHERE phone IS NULL (올바른 방법)

기본 함수 활용

문자열 함수

1
2
3
4
5
6
7
8
9
10
11
12
-- 문자열 길이
SELECT name, LENGTH(name) AS name_length FROM users;

-- 대소문자 변환
SELECT name, UPPER(name) AS upper_name FROM users;
SELECT name, LOWER(name) AS lower_name FROM users;

-- 문자열 추출
SELECT email, SUBSTRING(email, 1, POSITION('@' IN email)-1) AS username FROM users;

-- 문자열 연결
SELECT name || ' (' || city || ')' AS user_info FROM users;

숫자 함수

1
2
3
4
5
6
7
8
9
-- 반올림
SELECT product_name, price, ROUND(price/1000, 1) AS price_k FROM orders;

-- 올림, 내림
SELECT price, CEIL(price/1000) AS ceil_price FROM orders;
SELECT price, FLOOR(price/1000) AS floor_price FROM orders;

-- 절대값
SELECT ABS(-100) AS absolute_value;

날짜 함수

1
2
3
4
5
6
7
8
-- 현재 날짜/시간
SELECT CURRENT_DATE, CURRENT_TIMESTAMP;

-- 날짜 추출
SELECT name, DATE(created_at) AS created_date FROM users;

-- 날짜 차이 (PostgreSQL)
SELECT name, AGE(CURRENT_DATE, DATE(created_at)) AS signup_period FROM users;

조건부 처리 (CASE WHEN)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-- 기본 CASE 문
SELECT name, age,
       CASE 
         WHEN age < 30 THEN '청년'
         WHEN age < 40 THEN '중년'
         ELSE '장년'
       END AS age_group
FROM users;

-- 간단한 CASE 문
SELECT name,
       CASE city
         WHEN '서울' THEN '수도권'
         WHEN '인천' THEN '수도권'
         ELSE '지방'
       END AS region
FROM users;
This post is licensed under CC BY 4.0 by the author.