프로그래머스 lv1에 있는 MySQL문을 이용하는 문제들을 풀어봤다.
ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.
문제
동물 보호소에 들어온 모든 동물의 정보를 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
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 가장 마지막에 나옴 가장 먼저 나옴
문제
동물 보호소에 가장 먼저 들어온 동물의 이름을 조회하는 SQL 문을 작성해주세요.
solve
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