SQL 문법을 간단하게 알아보자 (1)

김규원·2025년 9월 29일

DB

목록 보기
1/22
post-thumbnail

SELECT

  • SELECT 문은 테이블에서 원하는 데이터를 조회할 때 사용
select column1, column2
from table_name
  • select * from customer 와 같이 select *는 가장 쉬운 쿼리지만 실제 DB에서는 사용을 지양
  • 여러 컬럼을 ,(콤마)를 통해 이으면 조회를 원하는 열만 나열 가능. 순서는 상관 없음

COUNT

COUNT(*)

  • count(*)를 사용하여 레코드 수를 조회 가능
select count(*)
from customer

COUNT(col_name)

  • count(column명)을 이용할 경우 해당 컬럼 내 null이 아닌 값의 개수가 출력
select count(sido)
from address

데이터 정렬(ASC, DESC)

  • 정렬 기본값 ASC
  • 만약, 내림차순으로 정렬하고 싶다면 DESC 를 붙임
select *
from customer
order by first_name desc
  • 두 개 이상의 정렬이 필요할 경우, 우선 순위대로 컬럼을 기술하면 됨.
select *
from payment
order by staff_id, customer_id, amount desc

원하는 개수의 데이터만 조회(LIMIT)

  • 원하는 개수를 조회할 때 LIMIT 를 사용
select *
from customer
limit 5

OFFSET 사용

  • 일정 위치를 건너뛰고 조회하고 싶을 경우 OFFSET 사용 가능
-- customer 테이블에서 6~10번째를 조회하고 싶을 경우
select *
from customer
offset 5 limit 5

중복 제거(DISTINCT)

  • 특정 컬럼 내의 고유한 값을 조회하려면 DISTINCT 사용 가능
select distinct city_id
from address
  • 만일 고유 값의 개수를 알고 싶을 때는 count(distinct 칼럼명)을 사용
select count(distinct city_id)
from address

WHERE

  • WHERE 절은 조건에 맞는 데이터만 조회할 때 사용
  • 두 개이상의 조건을 적용하고 싶을 경우 and를 이용
  • or도 사용 가능함
  • 단, 우선순위는 and > or
select *
from customer
-- 김 씨인 CUSTOMER만 추출
where last_name = 'kim'
-- 2003년 이후에 태어난 CUSTOMER 만 추출
and birth_date > '2003'
-- promotion_code가 null이 아닌 customer만 추출
and promo_code is not null
select *
from film
where rating ='R' or rating ='PG -13'and
rental_duration >=4;
-- 위 sql문은 아래와 같음
select *
from film
where rating ='R' or ( rating ='PG-13'and
rental_duration >=4) ;

숫자형 변수의 범위 조회

< / > / <= / >= / <> / Between 사용 가능

  • 여기서 between은 양쪽 경계 값을 포함
-- 동일 조건
select *
from rental
where rental_id >= 10 and rental_id <= 20

select *
from rental
where rental_id between 10 and 20

문자열 검색(LIKE, 패턴 매칭)

  • % : 0개 이상 문자
  • _ : 1문자
    즉, __n%이란
    • __ → 앞에 정확히 2글자
    • n → 그 뒤에 세 번째 글자가 n
    • % → 그 뒤에 0개 이상 문자

문자열 검색 QUIZ

가장 좋은 성능을 보이는 Like 조건 절은?
1. LIKE 'A%’;
2. LIKE ‘%A%’;
3. LIKE ‘%A’;
4. 1,2,3 모두 동일하다.

정답: 1번

해설

  • LIKE 'A%' → 문자열이 'A'로 시작하는 것만 찾음
    : 인덱스 사용 가능 → 성능 최고
  • LIKE '%A%' → 문자열 안 어디든 'A'가 있는 것 찾음
    : 인덱스 사용 불가 → 전체 테이블 스캔 필요
  • LIKE '%A' → 문자열 끝이 'A'인 것 찾음
    : 인덱스 사용 불가 → 전체 테이블 스캔 필요

IN 절

  • IN 절은 여러 값 중 하나라도 해당되는 조건을 지정 가능
  • 기본 구조 column IN (value1, value2, ...)
  • 즉, 같은 칼럼 내 조건절이 늘어가는 경우 in을 우선해서 사용
select *
from category
where name in ('comedy', 'action', 'drama')

기타 문자열 함수

1. UPPER

  • 기능: 문자열을 모두 대문자로 변환
  • 예시:
SELECT UPPER(first_name) FROM customer;
  • 출력: JohnJOHN

2. LENGTH

  • 기능: 문자열의 길이(문자 수) 반환
  • 예시:
SELECT LENGTH(title) FROM film;
  • 출력: 'Titanic'7

3. LEFT

  • 기능: 문자열의 왼쪽부터 n글자 추출
  • 예시:
SELECT LEFT(title, 5) FROM film;
  • 출력: 'Titanic''Titan'

4. CONCAT

  • 기능: 문자열 이어붙이기
  • 예시:
SELECT CONCAT(first_name, ' ', last_name) FROM staff;
  • 출력: 'John' + ' ' + 'Doe''John Doe'

5. || (문자열 연결 연산자)

  • 기능: CONCAT와 동일하게 문자열 이어붙이기
  • 예시:
SELECT first_name || ' ' || last_name FROM staff;
  • 출력: 'John' || ' ' || 'Doe''John Doe'

ALIAS(별칭)

  • AS 키워드를 사용하여 컬럼명이나 테이블명에 별칭을 붙일 수 있음

이름에 별칭

select first_name || '' || last_name as full_name
from customer

테이블 별칭

select c.first_name
from customer as c

SELECT 문 실행 순서

  1. FROM
  2. JOIN
  3. WHERE
  4. GROUP BY
  5. HAVING
  6. SELECT
  7. ORDER BY
  8. LIMIT
실행 순서역할
1FROM테이블 선택
2JOIN테이블 결합 (ON 조건 기준)
3WHERE행 필터링 (그룹화 전)
4GROUP BY그룹 생성
5HAVING그룹 필터링 (COUNT, SUM 등 집계 기준)
6SELECT필요한 컬럼/집계 계산
7ORDER BY결과 정렬
8LIMIT결과 개수 제한
SELECT column_name, count(*) as KK
FROM table_name1 JOIN table_name2
ON 연결조건
WHERE column_name = ‘ ’
GROUP BY
HAVING count(*) > 2
ORDER BY column_Name
LIMIT 5
profile
행복한 하루 보내세요

0개의 댓글