ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SQL] MySQL - 데이터 가져오기 (1)
    데이터분석/SQL 2023. 3. 9. 17:03

    해당 시리즈는 패스트캠퍼스의 '가장 쉽게 시작하는 데이터 분석, SQL 유치원' 강의를 듣고 정리한 내용입니다.

    데이터 가져오기 기본

    우리가 SQL을 배우는 이유는 데이터베이스에서 원하는 데이터를 가져오기 위해서죠!

    pokemon 데이터베이스의 mypokemon 테이블

    앞으로 예제 쿼리에서 사용될 mypokemon 테이블입니다.

    그럼 지금부터 데이터를 가져오는 방법에 대해 배워보겠습니다.

     

    SELECT는 값을 가져올 컬럼을 선택하는 키워드로, 모든 쿼리에 필수적으로 포함되는 키워드입니다.

    FROM은 데이터를 가져올 테이블을 지정할 때 사용하는 키워드인데,

    어떤 데이터베이스 안에 있는 테이블인지도 명시를 해야 하고

    그 전에 USE 키워드를 통해 데이터베이스를 이미 지정했다면 생략할 수 있습니다.

     

    컬럼을 여러 개 선택할 때는 콤마로 컬럼들을 이어주면 되고

    모든 컬럼을 선택할 땐 * 표시로 선택할 수 있습니다.

     

    컬럼 이름이 너무 길거나 여러 테이블을 조인하여 조회할 경우 전체 이름을 반복해서 적기에 귀찮을 수 있겠죠?

    그럴 땐 별명을 붙일 수 있는데요, 이때 사용하는 키워드가 AS입니다.

    AS를 생략하고 바로 컬럼 이름에 한 칸 띄우고 컬럼 별명을 적는 방법도 있습니다.

    이때 별명을 붙였다고 해서 테이블에서 컬럼 이름이 변하는 게 아니고

    해당 쿼리 내에서만 유효하다는 점 기억해주세요!

     

    가져올 데이터의 개수를 지정할 때는 LIMIT 키워드를 사용할 수 있습니다.

    LIMIT을 사용하면 위에서서부터 n개의 row만 반환합니다.

    만약 사용자가 입력한 n이 전체 row 수보다 크다면 데이터베이스에 존재하는 row까지만 가져옵니다.

    SELECT number, name
    FROM mypokemon
    LIMIT 3;

    mypokemon이라는 테이블에서 포켓몬의 번호와 이름을 3개만 가져올 때 사용할 수 있는 쿼리입니다.

    위에서도 볼 수 있듯이 LIMIT은 쿼리의 제일 끝에 사용합니다.

     

    포켓몬 데이터에서 포켓몬의 타입을 볼까요?

    bug, electric, normal, grass가 있죠?

    타입을 보기 위해 SELECT type FROM mypokemon; 이라고 쿼리를 작성하면

    포켓몬 타입들이 중복되어 나오게 됩니다.

    이렇게 중복된 값들은 제외하고 한 번만 가져오는 키워드가 바로 DISTINCT 키워드입니다.

    DISTINCT는 SELECT 절에 위치하며, 중복을 제외하고 싶은 컬럼 바로 앞에 써줍니다.

     

    조건에 맞는 데이터 가져오기

    'bug 타입인 포켓몬들의 속도를 알려줘', '속도가 50 이상인 포켓몬들의 이름을 알려줘'

    우리는 주로 이처럼 조건에 따른 데이터를 가져와야 할 것입니다.

    WHERE은 가져올 데이터의 조건을 지정해주는 키워드입니다.

    WHERE을 사용하는 기본 구조는 다음과 같습니다.

    SELECT [컬럼 이름]
    FROM [테이블 이름]
    WHERE 조건식;

    MySQL에서도 엑셀과 마찬가지로 True를 1로, False를 0으로 표현하는데요.

    WHERE 절에서는 조건식이 True가 되는 row만 선택하게 됩니다.

    그렇기 때문에 WHERE 절에는 보통 연산자를 사용해 조건식을 작성하게 되죠.

    대표적인 연산자

    위에서 들었던 예시로 bug 타입인 포켓몬들의 속도를 알고 싶다면 다음과 같이 작성합니다.

    SELECT speed
    FROM mypokemon
    WHERE type = 'bug';

    속도가 50 이상이면서 bug 타입인 포켓몬들의 이름을 알고 싶다면 다음과 같이 작성합니다.

    SELECT name
    FROM mypokemon
    WHERE speed <= 50 AND type = 'bug';

    특정 범위 내의 데이터를 선택할 때는 BETWEEN 연산자로 비교적 쉽게 쿼리를 작성할 수 있습니다.

    [컬럼 이름] BETWEEN A AND BA <= [컬럼 이름] AND [컬럼 이름] <= B 가 동일한 의미라는 뜻이죠.

    기본 구조는 BETWEEN A AND B 와 같이 적을 수 있고,

    해당 컬럼 값이 A 이상 B 이하의 값을 가진 row를 선택합니다.

     

    만약 타입이 bug이거나 electric이거나 normal이거나 grass인 포켓몬의 이름을 가져와야 한다면

    이 모든 조건들을 OR로 이어야 할까요?

    그러면 너무 비효율적이고 쿼리도 길어지겠죠?

    이럴 때 사용할 수 있는 연산자가 바로 IN 연산자입니다.

    IN은 해당 컬럼 값이 괄호 안에 있는 값에 포함되는 row를 선택합니다.

    즉, [컬럼 이름] IN (A, B)[컬럼 이름] = A OR [컬럼 이름] = B 가 같은 의미입니다.

     

    어떤 특정 문자가 포함된 데이터를 선택하고 싶을 수도 있겠죠?

    그럴 때는 LIKE 연산자를 이용해 추출할 수 있습니다.

    LIKE의 기본 구조는 다음과 같습니다.

    SELECT [컬럼 이름]
    FROM [테이블 이름]
    WHERE [컬럼 이름] LIKE [검색할 문자열];

    LIKE와 함께 짝궁처럼 사용되는 게 와일드카드인데요.

    %는 0개 이상의 문자를 의미하고, _는 1개의 문자를 의미합니다.

     

    예를 들어, 이름에 e가 포함된 포켓몬의 이름을 찾고 싶다면 다음과 같이 작성합니다.

    SELECT name
    FROM mypokemon
    WHERE name LIKE '%e%';

    이름이 e로 끝나고 e 앞에 1개의 문자만 있는 이름을 가진 포켓몬을 찾고 싶다면 다음과 같이 작성합니다.

    SELECT name
    FROM mypokemon
    WHERE name LIKE '_e';

    NULL은 데이터 값이 존재하지 않는다는 것을 의미합니다.

    데이터 값이 0이거나 공백이 아니라 알 수 없는 값이라는 뜻입니다.

    데이터에 NULL 값이 있으면 분석할 때 영향을 줄 수 있기 때문에 항상 잘 확인해야 하는데요.

    데이터가 NULL인지 확인할 때 사용하는 연산자가 IS NULL입니다.

    [컬럼 이름] = NULL 이나 [컬럼 이름] != NULL 와 같은 표현은 사용하지 않으니 주의해주세요!


    이렇게 데이터를 가져오는 기본적인 방법과 조건에 따라 가져오는 방법에 대해 학습해봤습니다.

    다음 포스팅부터는 SQL의 핵심이라고 할 수 있는 ORDER BY, GROUP BY 등에 대해 배워보겠습니다.

    '데이터분석 > SQL' 카테고리의 다른 글

    [SQL] MySQL - 데이터 만지기  (2) 2023.03.17
    [SQL] MySQL - 데이터 가져오기 (2)  (0) 2023.03.09
    [SQL] MySQL - CREATE, ALTER, DROP, DELETE  (2) 2023.03.07

    댓글

Designed by Tistory.