프로그래머스 SQL (OracleDB) 연습문제(SELECT)
프로그래머스에서 제공한 sql문에 대해 학습 및 복습할 겸에 포스팅을 진행합니다.
SELECT
1.모든 레코드 조회하기.
ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.
NAME, TYPE, NULLABLE
ANIMAL_ID | VARCHAR(N) | FALSE |
ANIMAL_TYPE | VARCHAR(N) | FALSE |
DATETIME | DATETIME | FALSE |
INTAKE_CONDITION | VARCHAR(N) | FALSE |
NAME | VARCHAR(N) | TRUE |
SEX_UPON_INTAKE | VARCHAR(N) | FALSE |
동물 보호소에 들어온 모든 동물의 정보를 ANIMAL_ID순으로 조회하는 SQL문을 작성해주세요. SQL을 실행하면 다음과 같이 출력되어야 합니다.
ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE
A349996 | Cat | 2018-01-22 14:32:00 | Normal | Sugar | Neutered Male |
A350276 | Cat | 2017-08-13 13:50:00 | Normal | Jewel | Spayed Female |
A350375 | Cat | 2017-03-06 15:01:00 | Normal | Meo | Neutered Male |
A352555 | Dog | 2014-08-08 04:20:00 | Normal | Harley | Spayed Female |
1.)풀이
ID값을 기준으로 Select문을 사용하여 출력만 하면 되기 때문에..
ORDER BY를 사용해준다.
SELECT *
FROM ANIMAL_INS
ORDER BY ANIMAL_ID /*default ASC*/
2.역순 정렬하기.(해당 문제TABLE의 구성은 1번과 동일.)
동물 보호소에 들어온 모든 동물의 이름과 보호 시작일을 조회하는 SQL문을 작성해주세요. 이때 결과는 ANIMAL_ID 역순으로 보여주세요. SQL을 실행하면 다음과 같이 출력되어야 합니다.
NAME, DATETIME
Rocky | 2016-06-07 09:17:00 |
Shelly | 2015-01-29 15:01:00 |
Benji | 2016-04-19 13:28:00 |
Jackie | 2016-01-03 16:25:00 |
*Sam | 2016-03-13 11:17:00 |
2.)풀이
역순으로 정렬을 하기위해 DESC를 사용하고, 보여질 출력문의 컬럼들만 선택하여 출력하면 된다.
SELECT NAME, DATETIME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID DESC;
3.아픈동물찾기(해당 문제TABLE의 구성은 1번과 동일.)
동물 보호소에 들어온 동물 중 아픈 동물1의 아이디와 이름을 조회하는 SQL 문을 작성해주세요. 이때 결과는 아이디 순으로 조회해주세요.
예를 들어 ANIMAL_INS 테이블이 다음과 같다면
ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE
A365172 | Dog | 2014-08-26 12:53:00 | Normal | Diablo | Neutered Male |
A367012 | Dog | 2015-09-16 09:06:00 | Sick | Miller | Neutered Male |
A365302 | Dog | 2017-01-08 16:34:00 | Aged | Minnie | Spayed Female |
A381217 | Dog | 2017-07-08 09:41:00 | Sick | Cherokee | Neutered Male |
이 중 아픈 동물은 Miller와 Cherokee입니다. 따라서 SQL문을 실행하면 다음과 같이 나와야 합니다.
ANIMAL_ID NAME
A367012 | Miller |
A381217 | Cherokee |
3.)풀이
where절을 사용하여 해당 컬럼의 일치하는 데이터를 select하면된다.
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION ='Sick'
ORDER BY ANIMAL_ID;
4.어린동물찾기(해당 문제TABLE의 구성은 1번과 동일.)
동물 보호소에 들어온 동물 중 젊은 동물의 아이디와 이름을 조회하는 SQL 문을 작성해주세요. 이때 결과는 아이디 순으로 조회해주세요.
예를 들어 ANIMAL_INS 테이블이 다음과 같다면
ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE
A365172 | Dog | 2014-08-26 12:53:00 | Normal | Diablo | Neutered Male |
A367012 | Dog | 2015-09-16 09:06:00 | Sick | Miller | Neutered Male |
A365302 | Dog | 2017-01-08 16:34:00 | Aged | Minnie | Spayed Female |
A381217 | Dog | 2017-07-08 09:41:00 | Sick | Cherokee | Neutered Male |
이 중 젊은 동물은 Diablo, Miller, Cherokee입니다. 따라서 SQL문을 실행하면 다음과 같이 나와야 합니다.
ANIMAL_ID NAME
A365172 | Diablo |
A367012 | Miller |
A381217 | Cherokee |
4.)풀이
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION != 'Aged'
ORDER BY ANIMAL_ID
풀이 방식은 위에 3번 문제와 동일합니다.
5.동물의 아이디와 이름(해당 문제TABLE의 구성은 1번과 동일.)
동물 보호소에 들어온 모든 동물의 아이디와 이름을 ANIMAL_ID순으로 조회하는 SQL문을 작성해주세요. SQL을 실행하면 다음과 같이 출력되어야 합니다.
ANIMAL_ID NAME
A349996 | Sugar |
A350276 | Jewel |
A350375 | Meo |
A352555 | Harley |
A352713 | Gia |
A352872 | Peanutbutter |
A353259 | Bj |
5.)풀이
그냥 출력의 컬럼을 ORDER BY로 오름차순으로 출력하면된다...
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID, NAME
6.여러가지 기준으로 정렬하기(해당 문제TABLE의 구성은 1번과 동일.)
동물 보호소에 들어온 모든 동물의 아이디와 이름, 보호 시작일을 이름 순으로 조회하는 SQL문을 작성해주세요. 단, 이름이 같은 동물 중에서는 보호를 나중에 시작한 동물을 먼저 보여줘야 합니다.예시
예를 들어, ANIMAL_INS 테이블이 다음과 같다면
ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE
A349996 | Cat | 2018-01-22 14:32:00 | Normal | Sugar | Neutered Male |
A350276 | Cat | 2017-08-13 13:50:00 | Normal | Jewel | Spayed Female |
A396810 | Dog | 2016-08-22 16:13:00 | Injured | Raven | Spayed Female |
A410668 | Cat | 2015-11-19 13:41:00 | Normal | Raven | Spayed Female |
- 이름을 사전 순으로 정렬하면 다음과 같으며, 'Jewel', 'Raven', 'Sugar'
- 'Raven'이라는 이름을 가진 개와 고양이가 있으므로, 이 중에서는 보호를 나중에 시작한 고양이를 먼저 조회합니다.
따라서 SQL문을 실행하면 다음과 같이 나와야 합니다.
ANIMAL_ID, NAME, DATETIME
A350276 | Jewel | 2017-08-13 13:50:00 |
A396810 | Raven | 2016-08-22 16:13:00 |
A410668 | Raven | 2015-11-19 13:41:00 |
A349996 | Sugar | 2018-01-22 14:32:00 |
6.)풀이
NAME컬럼을 오름차순으로 해놓고 DATETIME을 내림차순으로 해놓으면 해당 NAME컬럼의 동일한 값일 경우 ,
나중에 보호를 시작한 DATETIME컬럼의 정렬기준에 대해 만족할 수 있음.
SELECT ANIMAL_ID, NAME, DATETIME
FROM ANIMAL_INS
ORDER BY NAME ASC, DATETIME DESC
7.상위 N개 레코드(해당 문제TABLE의 구성은 1번과 동일.)
동물 보호소에 가장 먼저 들어온 동물의 이름을 조회하는 SQL 문을 작성해주세요.예시
예를 들어 ANIMAL_INS 테이블이 다음과 같다면
ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE
A399552 | Dog | 2013-10-14 15:38:00 | Normal | Jack | Neutered Male |
A379998 | Dog | 2013-10-23 11:42:00 | Normal | Disciple | Intact Male |
A370852 | Dog | 2013-11-03 15:04:00 | Normal | Katie | Spayed Female |
A403564 | Dog | 2013-11-18 17:03:00 | Normal | Anna | Spayed Female |
이 중 가장 보호소에 먼저 들어온 동물은 Jack입니다. 따라서 SQL문을 실행하면 다음과 같이 나와야 합니다.
NAME
Jack |
※ 보호소에 가장 먼저 들어온 동물은 한 마리인 경우만 테스트 케이스로 주어집니다.
7.)풀이
서브쿼리를 이용하며 , Oracle의 rownum을 이용하여 풀면 된다...
SELECT *
FROM
(SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME )
WHERE ROWNUM = 1
이상.....프로그래머스에서 연습문제로 SELECT문 영역의 7문제를 다 풀어보았다
이게 아무래도.. 쉽게 접해본 것들이라 그런지.. 쉽다..
출처