ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로그래머스 SQL SELECT 정리
    데이터베이스/SQL 2022. 3. 24. 16:45

    프로젝트하면서 가장 많이 썼던 SQL 구문 중 하나가 SELECT 다.

    그렇지만 최근에 SQL에 대한 감각이 떨어져 있기도 하고 기초적인 부분을 다시 보고 있어서

    프로그래머스 사이트에서 코딩 테스트 연습 문제를 풀면서 감각을 올리고자 합니다.

     

    <프로그래머스 SQL SELECT>

    <문제 설명>

    ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다.

    ANIMAL_INS 테이블 구조는 다음과 같으며,

    ANIMAL_IDANIMAL_TYPEDATETIMEINTAKE_CONDITIONNAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.

     

    <문제 1>

    동물 보호소에 들어온 모든 동물의 아이디와 이름보호 시작일을 이름 순으로 조회하는 SQL문을 작성해주세요. 단, 이름이 같은 동물 중에서는 보호를 나중에 시작한 동물을 먼저 보여줘야 합니다.

     

    정렬 오름차순

    ORDER BY 컬럼명 ASC (ASC 가 오름차순인데 기본이 오름차순이기에 생략 가능)

     

    정렬 내림차순

    ORDER BY 컬럼명 DESC

     

    예를 들어 이름과 보호 시작일 모두 내림차순으로 하려면 아래처럼 하면 된다.

    SELECT 원하는 컬럼명 ... FROM 테이블명 ORDER BY NAME DESC, DATETIME DESC;

     

    그래서 문제 1번의 정답은 아래와 같다.

    SELECT ANIMAL_ID, NAME, DATETIME FROM ANIMAL_INS ORDER BY NAME, DATETIME DESC;

     

     

    <문제 2>

    동물 보호소에 들어온 동물 중 젊은 동물의 아이디이름을 조회하는 SQL 문을 작성해주세요. 이때 결과는 아이디 순으로 조회해주세요.

    참고 : 젊음의 기준은 INTAKE_CONDITION 컬럼의 값이 "Aged"가 아닌 것을 의미함.

     

    위의 구조에서 "해당 조건이 아닌 것"이라는 것만 추가하면 된다.

     

    그게 바로 WHERE 컬럼명 NOT IN (조건) 이다. (NOT의 위치는 WHERE NOT 컬럼명도 된다.)

     

    그래서 문제 2번의 정답은 아래와 같다.

    SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE INTAKE_CONDITION NOT IN ('AGED') ORDER BY ANIMAL_ID;

     

     

    <문제 3>

    동물 보호소에 들어온 동물 중, 이름이 없는 채로 들어온 동물의 ID를 조회하는 SQL 문을 작성해주세요. 단, ID는 오름차순 정렬되어야 합니다.

     

    기본 문법을 잘 모른 상태에서 풀었더니 아래처럼 작성했었습니다.

    SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME IN ('NULL');
    이렇게 쓰면 NAME 컬럼에 입력된 값 즉, 이름이 NULL인 동물을 찾는 의미가 된다.
    
    정답이 아니어서 아래처럼도 작성해봤었습니다.
    
    SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME IN ('');
    값이 입력 안 되면 그냥 공백 처리된다고 생각해서 저렇게도 해봤는데 리턴되는 값이 없었습니다.

     

    이렇게 하나 배워갑니다..!

     

    SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME IS NULL;
    
    반대로 공백이 아닌 값들을 찾으려면
    SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME IS NOT NULL;

    '데이터베이스 > SQL' 카테고리의 다른 글

    JOIN - Left Outer Join  (0) 2022.05.30
    COUNT와 그룹핑 - DISTINCT & GROUP BY  (0) 2022.04.01
    스케일업(Scale-up)과 스케일아웃(Scale-out)  (0) 2022.03.01

    댓글

Designed by Tistory.