본문 바로가기

SQL

[SQL] 메타코드M '데이터분석가 입문 필수 SQL 부트캠프' 강의 후기 #2 - WHERE, ORDER BY, GROUP BY 등

728x90
반응형

 

  메타코드M '데이터분석가 입문 필수 SQL 부트캠프' 강의에 대한 두번째 글이다. 저번에는 SQL 프로그램의 설치와 기본적인 SELECT문 등을 배웠다. 해당 내용에 이어 WHERE 구문과 ORDER BY, GROUP BY를 추가하여 보다 세세한 데이터를 가져와보도록 하자.

 

메타코드M

빅데이터 , AI 강의 플랫폼 & IT 현직자 모임 플랫폼ㅣ메타코드 커뮤니티 일원이 되시기 바랍니다.

mcode.co.kr

 

  이 강의는 지난 시간에 설치한 MySQL 샘플 데이터베이스로 진행되니 혹시 필요한 독자는 아래 링크를 참고하길 바란다.

※ 이전글: 2024.02.11 - [SQL] - [SQL] 메타코드M '데이터분석가 입문 필수 SQL 부트캠프' 강의 후기#1 - SQL 설치, SELECT문 등

 

Index

    2과목

    WHERE 

      WHERE는 조건을 부여해 필요한 데이터를 가져오는 구문이다. 연산자, LIKE, BETWEEN 등을 사용해 상세하게 표현할 수 있다.

    비교연산자

    SELECT * 
    FROM orderdetails 
    WHERE productcode = 's24_3969';
    
    SELECT * 
    FROM orderdetails 
    WHERE quantityordered > 70;

    특정 productcode 도출

      숫자뿐만 아니라 문자도 비교연산자로 나타낼 수 있다. 

    논리연산자

    SELECT *
    FROM orderdetails
    WHERE priceEach = 35.29
    AND (productcode = 's24_3969'
    OR quantityordered = 46);

      복수의 비교연산자를 논리연산자로 이어줌으로써 보다 세세한 조건을 부여할 수 있다. AND와 OR이 같이 쓰인다면, AND를 우선하고 괄호로 우선순위를 변경 가능하다.

    기타

    SELECT firstName, lastName 
    FROM employees
    WHERE jobTitle LIKE '%Sales%';

    LIKE: 특정 문자를 포함하는 케이스 지정. %를 특정 단어의 앞뒤에 입력해 포함 여부를 표현할 수 있다. (예 - '%hand': hand로 끝나는 데이터 검색.)

     

    SELECT orderNumber AS orno
    FROM orderdetails
    WHERE quantityordered BETWEEN 10 AND 50;
    
    --
    SELECT *
    FROM orders
    WHERE orderdate not BETWEEN '2003-01-01' AND '2003-01-31';

    BETWEEN: A이상 B이하의 데이터를 가져온다. NOT BETWEEN은 A이상 B이하의 범위를 제외한 데이터를 출력한다.  

     

    SELECT customerName
    FROM customers
    WHERE country IN ('USA', 'Canada', 'France');
    
    SELECT *
    FROM employees
    WHERE officecode not IN (1,2,3);
    
    SELECT *
    FROM employees
    WHERE officecode <> 1 and officecode <> 2 AND officecode <> 3;

    IN: 특정값이 들어간 데이터를 가져온다. 반대로 NOT IN은 특정값이 들어가지 않은 데이터를 출력한다. <>, 부등호를 사용한 코드에 비해 간결하게 표현할 수 있어 효율적이다.

     

    SELECT * 
    FROM orders 
    WHERE comments IS NOT NULL;
    
    -- 문제8
    SELECT firstName, lastName
    from employees
    WHERE reportsTo IS NULL;

    IS NULL: 해당 컬럼의 값이 공백인 데이터를 출력한다. IS NOT NULL로 공백이 아닌 데이터만 조회할 수도 있다.

    ORDER BY

    SELECT Lastname, firstname, officecode
    FROM employees
    ORDER BY officecode desc
    LIMIT 5;
    
    -- 
    SELECT productname AS pn
    FROM products
    order by buyprice DESC;

    SQL ORDER BY 구문

    • ORDER BY는 오름차순 (ASC) 또는 내림차순 (DESC)으로 정렬하는 구문임.
    • 오름차순이 default이며 내림차순으로 정렬하려면 위 코드처럼 desc를 입력해야 함.
    • ORDER BY는 WHERE절 뒤에 쓰임.

    GROUP BY

    SELECT ordernumber, SUM(priceeach * quantityordered) AS totalrevenue
    FROM orderdetails
    GROUP BY ordernumber
    ORDER BY totalrevenue desc
    LIMIT 5;
    
    --
    SELECT STATUS, COUNT(ordernumber) AS totalorder
    FROM orders
    WHERE orderdate BETWEEN '2003-01-01' AND '2005-12-31'
    GROUP BY STATUS;
    
    --
    SELECT STATUS, COUNT(ordernumber) AS totalorder
    FROM orders
    WHERE year(orderdate) BETWEEN 2003 AND 2005
    GROUP BY STATUS;

    SQL GROUP BY 구문

    • GROUP BY는 한 개 이상의 컬럼을 기준으로 결과를 집계하여 나타냄.
    • SUM, COUNT, AVG, MAX 등과 같이 활용됨.
    • 첫번째 코드처럼 괄호 안에 컬럼 간 계산을 집어넣을 수 있음.
    • WHERE - GROUP BY - ORDER BY 순으로 입력.
    • 두번째 코드와 세번째 코드는 동일한 결과 출력.
    • COUNT는 중복값이 없도록 primary key를 사용하는 것을 권장.
    • year()를 써서 날짜 중에서 연도만 추출 가능.

      지금까지 메타코드M '데이터분석가 입문 필수 SQL 부트캠프' 강의 중 제 2과목의 WHERE, ORDER BY, GROUP BY를 학습했다. PDF로 제공되는 교재에서 기본 코드는 물론 예제와 실습 코드를 다루며 중요하거나 생소한 코드를 추려서 정리하였다. SQLD에서 코드를 묻는 문제가 있는 만큼 SQL자격점정 실전문제로 간주해도 무방할 듯하다. 

      다음 글에서는 HAVING과 JOIN에 대해 배워보고자 한다. 앞으로 3강, 얼마남지 않았으니 끝까지 완주하여 기본적인 SQL 지식을 체득할 것이다.

    728x90
    반응형