목차
"Everything is available basically for free. You can learn anything you want for free." - Elon Musk의 인터뷰 중
머스크의 말처럼 모두 무료로 접할 수 있고 무엇이든 할 수 있으니..
무료로 접할 수 있는 정보들을 제게 맞게 최적화해서 정리해보려고 합니다.
이 글에서는 SQL의 가장 기본적인 명령어 중 하나인 SELECT를 사용하여 데이터베이스에서 데이터를 조회하는 방법을 알아보겠습니다.
먼저 예시 테이블 하나를 만들어 보겠습니다. 학교 도서관의 책 정보를 담은 테이블이라고 가정해 보겠습니다. 테이블의 이름은 'books'이며, 다음과 같은 정보를 담고 있다고 가정해 보겠습니다.
books 테이블:
book_id | title | author | published_year | genre |
1 | Harry Potter | J.K. Rowling | 1997 | 판타지 |
2 | The Hobbit | J.R.R. Tolkien | 1937 | 판타지 |
3 | To Kill a Mockingbird | Harper Lee | 1960 | 소설 |
4 | The Catcher in the Rye | J.D. Salinger | 1951 | 소설 |
5 | The Great Gatsby | F. Scott Fitzgerald | 1925 | 소설 |
1. 모든 책 정보 조회하기
SELECT *
FROM books;
book_id | title | author | published_year | genre |
1 | Harry Potter | J.K. Rowling | 1997 | 판타지 |
2 | The Hobbit | J.R.R. Tolkien | 1937 | 판타지 |
3 | To Kill a Mockingbird | Harper Lee | 1960 | 소설 |
4 | The Catcher in the Rye | J.D. Salinger | 1951 | 소설 |
5 | The Great Gatsby | F. Scott Fitzgerald | 1925 | 소설 |
2. 특정 열(column)만 조회하기
만약 책 제목(title)과 저자(author) 정보만 조회하고 싶다면, 다음과 같이 작성할 수 있습니다.
SELECT title, author
FROM books;
title | author |
Harry Potter | J.K. Rowling |
The Hobbit | J.R.R. Tolkien |
To Kill a Mockingbird | Harper Lee |
The Catcher in the Rye | J.D. Salinger |
The Great Gatsby | F. Scott Fitzgerald |
3. 조건에 맞는 데이터만 조회하기
특정 조건을 만족하는 데이터만 조회하려면 WHERE 절을 사용합니다. 1960년 이전에 출판된 책만 조회하려면 다음과 같이 작성할 수 있습니다.
SELECT *
FROM books
WHERE published_year < 1960;
book_id | title | author | published_year | genre |
4 | The Catcher in the Rye | J.D. Salinger | 1951 | 소설 |
5 | The Great Gatsby | F. Scott Fitzgerald | 1925 | 소설 |
4. 정렬하여 조회하기
데이터를 특정 열(column)의 값에 따라 정렬하려면 ORDER BY 절을 사용합니다. 출판 년도(published_year) 순으로 정렬하여 조회하려면 다음과 같이 작성할 수 있습니다.
SELECT *
FROM books
ORDER BY published_year;
book_id | title | author | published_year | genre |
5 | The Great Gatsby | F. Scott Fitzgerald | 1925 | 소설 |
2 | The Hobbit | J.R.R. Tolkien | 1937 | 판타지 |
3 | To Kill a Mockingbird | Harper Lee | 1960 | 소설 |
4 | The Catcher in the Rye | J.D. Salinger | 1951 | 소설 |
1 | Harry Potter | J.K. Rowling | 1997 | 판타지 |
5. 결과를 제한하여 조회하기
조회 결과의 행(row) 수를 제한하려면 LIMIT 절을 사용합니다. 출판 년도가 가장 최근인 상위 3권의 책만 조회하려면 다음과 같이 작성할 수 있습니다.
SELECT *
FROM books
ORDER BY published_year DESC
LIMIT 3;
book_id | title | author | published_year | genre |
1 | Harry Potter | J.K. Rowling | 1997 | 판타지 |
3 | To Kill a Mockingbird | Harper Lee | 1960 | 소설 |
4 | The Catcher in the Rye | J.D. Salinger | 1951 | 소설 |
6. 중복 데이터 제거하여 조회하기
특정 열(column)의 중복된 데이터를 제거하고 조회하려면 DISTINCT 키워드를 사용합니다. 중복 없이 장르(genre)만 조회하려면 다음과 같이 작성할 수 있습니다.
SELECT DISTINCT genre
FROM books;
genre |
판타지 |
소설 |
7. 그룹화하여 집계 함수 사용하기
데이터를 그룹화하고 집계 함수를 사용하여 정보를 요약하려면 GROUP BY 절과 집계 함수를 사용합니다. 각 장르별 책의 수를 조회하려면 다음과 같이 작성할 수 있습니다.
SELECT genre, COUNT(*) as book_count
FROM books
GROUP BY genre;
genre | book_count |
판타지 | 2 |
소설 | 3 |
8. select와 관련된 절들을 해석하는 순서 살펴보기
sql은 from > where > group by > having > select > order by 순으로 해석이 진행됩니다.
새로운 예시 테이블:
book_id | title | author | published_year | publisher | sold_copies |
1 | Harry Potter | J.K. Rowling | 1997 | ABCDE | 2000 |
2 | The Hobbit | J.R.R. Tolkien | 1937 | ABCDE | 1500 |
3 | To Kill a Mockingbird | Harper Lee | 1960 | FGHIJ | 1000 |
4 | The Catcher in the Rye | J.D. Salinger | 1951 | FGHIJ | 900 |
5 | The Great Gatsby | F. Scott Fitzgerald | 1925 | Charles Scribner | 800 |
6 | Demian | Hermann Hesse | 1931 | S. Fischer | 5000 |
(예시 테이블은 말 그대로 예시 테이블입니다. 임의 가공했습니다.)
SELECT publisher
, COUNT(*) as book_count
, SUM(sold_copies) as total_sold_copies
FROM books
WHERE published_year > 1930
GROUP
BY publisher
HAVING total_sold_copies > 2000
ORDER
BY total_sold_copies DESC;
1. FROM books: books 테이블을 대상으로 작업을 수행합니다.
2. WHERE published_year > 1930: 1930년 이후 출판된 책들만 필터링합니다.
book_id | title | author | published_year | publisher | sold_copies |
1 | Harry Potter | J.K. Rowling | 1997 | ABCDE | 2000 |
2 | The Hobbit | J.R.R. Tolkien | 1937 | ABCDE | 1500 |
3 | To Kill a Mockingbird | Harper Lee | 1960 | FGHIJ | 1000 |
4 | The Catcher in the Rye | J.D. Salinger | 1951 | FGHIJ | 900 |
6 | Demian | Hermann Hesse | 1931 | S. Fischer | 5000 |
3. GROUP BY publisher: 출판사 별로 데이터를 그룹화합니다.
publisher | book_count | sold_copies |
ABCDE | 2 | 3500 |
FGHIJ | 2 | 1900 |
S. Fischer | 1 | 5000 |
4. HAVING total_sold_copies > 2000: 그룹화된 결과 중에서 총 판매부수가 2000부 이상인 것들만 필터링하고 조회합니다.
publisher | book_count | sold_copies |
ABCDE | 2 | 3500 |
S. Fischer | 1 | 5000 |
5. ORDER BY total_sold_copies DESC: 총 판매부수를 기준으로 내림차순 정렬하여 결과를 출력합니다.
publisher | book_count | sold_copies |
S. Fischer | 1 | 5000 |
ABCDE | 2 | 3500 |
9. 참고 문헌
통계 교육원 SQL 강의: 데이터 분석을 위한 SQL 입문(2023) - https://sti.kostat.go.kr/coresti/site/main.do
부스트코스 SQL 강의: 기초 데이터 분석을 위한 핵심 SQL - https://www.boostcourse.org/
w3school: MySQL 튜토리얼 - https://www.w3schools.com/mysql/default.asp
'SQL > SQL 스터디' 카테고리의 다른 글
GROUP BY와 HAVING 파헤치기 - 문과생 SQL 독학 시리즈4 (0) | 2023.04.29 |
---|---|
Where 파헤치기 - 문과생 SQL 독학 시리즈3 (0) | 2023.04.29 |
DBMS, SQL, 그리고 SQL 명령어 이해하기 - 문과생 SQL 독학 시리즈1 (0) | 2023.04.28 |
SQL 독학: 10가지 주요 숫자 처리 함수 (0) | 2023.04.24 |
SQL 독학: 10가지 주요 날짜 및 시간 함수 (0) | 2023.04.23 |
댓글