[LV1/MySQL] MySQL 문제 풀이

nut3lla·2022년 4월 23일
0

Programmers

목록 보기
2/74

프로그래머스 lv1에 있는 MySQL문을 이용하는 문제들을 풀어봤다.

문제 설명

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.

solve

모든 레코드 조회하기

문제
동물 보호소에 들어온 모든 동물의 정보를 ANIMAL_ID순으로 조회하는 SQL문을 작성해주세요.
solve
테이블에 있는 정보를 모두 조회 => select 사용

테이블 조회 (SELECT)
ex. sql select (필드명's) from (테이블명) [where 조건]

  • 모든 필드 선택 : *
  • 중복되는 값 제거 : distinct 키워드 사용
    select distinct name from students;
  • 정렬 : order by
    • ASC : 오름차순 (기본 설정)
    • DESC : 내림차순
      select name from students order by (정렬 기준 컬럼)
select * from ANIMAL_INS order by ANIMAL_ID;

동물의 아이디와 이름

문제
동물 보호소에 들어온 모든 동물의 아이디와 이름을 ANIMAL_ID순으로 조회하는 SQL문을 작성해주세요.
solve

  • 조회할 컬럼 : ID, Name
  • 오름차순 정렬 => order by (기준 대상)
SELECT ANIMAL_ID,NAME from ANIMAL_INS order by ANIMAL_ID;

역순 정렬하기

문제
동물 보호소에 들어온 모든 동물의 이름과 보호 시작일을 조회하는 SQL문을 작성해주세요.
이때 결과는 ANIMAL_ID 역순으로 보여주세요.
solve
테이블에 있는 모든 정보 중.. name, datetime 컬럼 조회

SELECT NAME,DATETIME from ANIMAL_INS;

여기에 ANIMAL_ID 순으로 내림차순 정렬하라는 조건이 붙는다.

SELECT NAME,DATETIME from ANIMAL_INS order by ANIMAL_ID desc;

아픈 동물 찾기

문제
동물 보호소에 들어온 동물 중 아픈 동물의 아이디와 이름을 조회하는 SQL 문을 작성해주세요.
이때 결과는 아이디 순으로 조회해주세요.
solve
(where을 사용해 특정 조건에 부합하는 데이터들만 조회할 수 있다)
아픈 동물은 INTAKE_CONDITION'Sick'값이 들어 있다.

SELECT ANIMAL_ID,NAME from ANIMAL_INS where INTAKE_CONDITION='Sick' order by animal_id;

어린 동물 찾기

문제
동물 보호소에 들어온 동물 중 젊은 동물의 아이디와 이름을 조회하는 SQL 문을 작성해주세요.
이때 결과는 아이디 순으로 조회해주세요.
solve
늙은 동물은 INTAKE_CONDITION'Aged'값이 들어 있다.
즉, 젊은 동물들은 INTAKE_CONDITION'Aged'값이 들어있지 않으면 된다.

SELECT ANIMAL_ID,NAME from ANIMAL_INS where INTAKE_CONDITION!='Aged';

여러 기준으로 정렬하기

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

	SELECT ANIMAL_ID,NAME,DATETIME from ANIMAL_INS order by NAME,DATETIME desc;

다중정렬 : 여러 기준을 가지고 정렬

  • order by절에 ,(쉼표)로 구분
  • order by col1 asc, col2 desc; // col1을 먼저 정렬한 뒤, 위의 정렬에서 같은 순위에 한해서만 col2로 정렬
  • ASC(오름차순)DESC(내림차순)
    숫자작은값 우선큰값 우선
    문자사전순사전 반대 순
    날짜빠른 날짜 순늦은 날짜 순
    NULL가장 마지막에 나옴가장 먼저 나옴

상위 n개 레코드

문제
동물 보호소에 가장 먼저 들어온 동물의 이름을 조회하는 SQL 문을 작성해주세요.
solve

  • 가장 먼저 들어온 동물 : datetime이 가장 빠른 동물
    => datetime 오름차순으로 정렬했을 때, 가장 위의 데이터

MySQL 조회 개수 제한 (LIMIT)

  • LIMIT : 조회할 데이터의 갯수를 지정
    ex. sql select * from (테이블명) limit n (n개의 데이터만 조회)
	SELECT NAME from ANIMAL_INS order by DATETIME limit 1;

이름이 없는 동물의 아이디

문제
동물 보호소에 들어온 동물 중, 이름이 없는 채로 들어온 동물의 ID를 조회하는 SQL 문을 작성해주세요.
단, ID는 오름차순 정렬되어야 합니다.
solve
이름이 없는 동물들은 NAME필드가 비어있다 => 즉, NAME이 NULL인지 확인.

null 유무 확인

  • is null : 비어있나?
  • is not null : 비어있지 않나?
    ex. select * from (테이블 명) where (필드명) is (not) null;
SELECT ANIMAL_ID from ANIMAL_INS where NAME is null order by ANIMAL_ID;

이름이 있는 동물의 아이디

문제
동물 보호소에 들어온 동물 중, 이름이 있는 동물의 ID를 조회하는 SQL 문을 작성해주세요.
단, ID는 오름차순 정렬되어야 합니다.
solve
위의 문제랑 다른점은 이제는 NAME필드에 값이 있는지 확인하자 => NAME이 not NULL인지 확인.

SELECT ANIMAL_ID from ANIMAL_INS where NAME is not null order by ANIMAL_ID;

최대값 구하기

문제
가장 최근에 들어온 동물은 언제 들어왔는지 조회하는 SQL 문을 작성해주세요.
solve
가장 최근에 들어온 동물 : datetime 값이 가장 큰 동물이다.

데이터 최대, 최소 값 가져오기 (MAX, MIN 함수)

  • 최대값 : MAX
    select MAX(필드명) from (테이블명)
  • 최소값 : MIN
    sql select MIN(필드명) from (테이블명)
SELECT max(datetime) from animal_ins; 

참조) 프로그래머스-코딩테스트 연습 https://programmers.co.kr/learn/courses/30/lessons/59034

profile
🦴피곤행🦴

0개의 댓글