SQLlite - 실습일지(2)

Soogyung Gwon·2026년 2월 11일

구름을잡아라

목록 보기
17/60

https://wikidocs.net/12470

컬럼 별명, 뷰

SELECT
Name AS "이름",
Birthday AS "생일"
FROM Person;

AS 생략 가능

BMI 계산

SELECT
name,
Height,
Weight,
round(weight / (height height 0.0001), 1) BMI
FROM Person;

이 자체로는 컬럼을 추가하는 것이 아니고, 이 쿼리문을 실행했을 때만 보여줌

Built-in Mathematical SQL Funcions
https://sqlite.org/lang_mathfunc.html

뷰 생성

SELECT문을 미리 만들어서 이름을 붙인 것

CREATE VIEW BirthdayView
AS
SELECT
Name,
Birthday bdate,
substr(Birthday, 1, 4) YYYY,
substr(Birthday, 6, 2) MM,
substr(Birthday, 9, 2) DD
FROM Person;

뷰 보기
SELECT * FROM BirthdayView

집계 함수

count()
모든 행의 개수 세기
SELECT count(*) FROM Person;

특정 컬럼의 데이터 세기
SELECT count(Height) FROM Person;

max()
가장 큰 값 구하기
SELECT max(Height) FROM Person;

min()
가장 작은 값 구하기
SELECT min(Height) FROM Person;

sum()
SELECT sum(Height) FROM Person;

avg()
SELECT avg(Height) FROM Person;

avg() 함수는 평균값을 계산할 떄 NULL을 채워서 계산했을까 뺏을까? -> 빼고 계산함

키(한 아이템 값) 갱신 후 평균 키 구하기
UPDATE Person SET Height='166.8'
WHERE name='혜리'
SELECT avg(Height) FROM Person;

조인

INNER JOIN, ON

SELECT 음반.제목 앨범명, 음반.연도 발매년도, 노래.제목 곡명
FROM 수록곡
INNER JOIN 음반 ON 수록곡.음반ID = 음반.ID
INNER JOIN 노래 ON 수록곡.노래ID = 노래.ID

2011 년도만 보기
SELECT 음반.제목 앨범명, 음반.연도 발매년도, 노래.제목 곡명
FROM 수록곡
INNER JOIN 음반 ON 수록곡.음반ID = 음반.ID
INNER JOIN 노래 ON 수록곡.노래ID = 노래.ID
WHERE 음반.연도 = 2011;

UNION ALL/UNION

SELECT 제목 FROM 음반
UNION ALL
SELECT 제목 FROM 노래

  • UNION ALL을 가운데에 쓰는 이유는, SQL에서 두 개 이상의 SELECT 결과를 “위아래로 붙이기” 위해서

  • UNION을 쓰려면

    • 컬럼 개수 같아야 함
    • 타입도 비슷해야 함
  • 여러번 사용 가능
    SELECT A FROM table1
    UNION ALL
    SELECT B FROM table2
    UNION ALL
    SELECT C FROM table3;

UNION vs UNION ALL

UNION → 중복 제거하고 합침
UNION ALL → 중복 그대로 합침

  • 정렬과 중복제거가 굳이 필요하지 않을때에는 UNION ALL이 메모리 속도 측면에서 유리

  • UNION ALL와 JOIN을 이용하여 조건절을 대체할 수 있음, 이 때 두 케이스의 차이점은:

WHERE는 안 맞으면 아예 제외
JOIN / UNION ALL은 상황에 따라 ‘조건 안 맞아도 나올 수 있음’

아래 예시에서 생일 달을 '3-'으로 해 두어 조건문일때는 아예 나오지 않지만 UNION ALL 과 JOIN을 사용하는 경우에는 나옴

UNION ALL + JOIN:

SELECT Name, bdate, BirthdayView.MM, MonthAbb
FROM BirthdayView, (
    SELECT '01' AS MM, 'Jan.' AS MonthAbb
    UNION ALL
    SELECT '02' AS MM, 'Feb.' AS MonthAbb
    UNION ALL
    SELECT '03' AS MM, 'Mar.' AS MonthAbb
    UNION ALL
    SELECT '04' AS MM, 'Apr.' AS MonthAbb
    UNION ALL
    SELECT '05' AS MM, 'May.' AS MonthAbb
    UNION ALL
    SELECT '06' AS MM, 'Jun.' AS MonthAbb
    UNION ALL
    SELECT '07' AS MM, 'Jul.' AS MonthAbb
    UNION ALL
    SELECT '08' AS MM, 'Aug.' AS MonthAbb
    UNION ALL
    SELECT '09' AS MM, 'Sep.' AS MonthAbb
    UNION ALL
    SELECT '10' AS MM, 'Oct.' AS MonthAbb
    UNION ALL
    SELECT '11' AS MM, 'Nov.' AS MonthAbb
    UNION ALL
    SELECT '12' AS MM, 'Dec.' AS MonthAbb
) AS Months
WHERE BirthdayView.MM = Months.MM

조건절:

SELECT
    Name,
    bdate,
    MM,
    CASE
        WHEN MM = '01' THEN 'Jan.'
        WHEN MM = '02' THEN 'Feb.'
        WHEN MM = '03' THEN 'Mar.'
        WHEN MM = '04' THEN 'Apr.'
        WHEN MM = '05' THEN 'May.'
        WHEN MM = '06' THEN 'Jun.'
        WHEN MM = '07' THEN 'Jul.'     
        WHEN MM = '08' THEN 'Aug.'
        WHEN MM = '09' THEN 'Sep.'
        WHEN MM = '10' THEN 'Oct.'
        WHEN MM = '11' THEN 'Nov.'
        WHEN MM = '12' THEN 'Dec.'
    END Month
FROM BirthdayView;
profile
오랜시간 망설였던 코딩을 다시 해보려고 노력하고 있는 사람

0개의 댓글