본문 바로가기
SQL/SQL 스터디

Select, 데이터 조회 방법 이해하기 - 문과생 SQL 독학 시리즈2

by davi_kr 2023. 4. 28.

목차

    반응형

    "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

    반응형

    댓글