본문 바로가기

: IT/프로그래머스

[코딩테스트] MySQL > SELECT 문 (4)

반응형

1. 이름이 없는 동물의 아이디

SELECT ANIMAL_ID
FROM ANIMAL_INS
WHERE NAME IS NULL
ORDER BY ANIMAL_ID

- ANIMAL_INS 테이블에서 NAME 컬럼 값이 없는 값을 조회한다
- AMIMAL_ID를 오름차순(ASC)으로 정렬한다


2. 이름이 있는 동물의 아이디

SELECT ANIMAL_ID
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
ORDER BY ANIMAL_ID

- ANIMAL_INS 테이블에서 NAME 컬럼 값이 있는 값을 조회한다
- ANIMAL_ID를 오름차순(ASC)으로 정렬한다


3. NULL 처리하기

SELECT ANIMAL_TYPE, IFNULL(NAME, "No name") AS 'NAME', SEX_UPON_INTAKE
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

- ANIMAL_INS 테이블에서 ANIMAL_TYPE, NAME, SEX_UPON_INTAKE 컬럼을 조회한다.
- ANIMAL_ID를 오름차순으로 정렬한다
- IFNULL 함수 : NAME 컬럼 값이 있으면 NAME 컬럼 값을 보여주고 없으면 No name 으로 조회한다


4. 없어진 기록 찾기

SELECT O.ANIMAL_ID, O.NAME
FROM ANIMAL_OUTS O LEFT JOIN ANIMAL_INS I ON O.ANIMAL_ID = I.ANIMAL_ID
WHERE I.ANIMAL_ID IS NULL
ORDER BY O.ANIMAL_ID

- ANIMAL_OUTS 테이블에 값은 있는데, ANIMAL_INS 테이블에 없는 ANIMAL_ID와 NAME을 ANIMAL_ID 순으로 조회한다.
- TABLE_A LEFT JOIN TABLE_B ON TABLE_A.KEY = TABLE_B.KEY WHERE TABLE_B.KEY IS NULL


5. 있었는데요 없었습니다

SELECT O.ANIMAL_ID, O.NAME
FROM ANIMAL_OUTS O LEFT JOIN ANIMAL_INS I ON O.ANIMAL_ID = I.ANIMAL_ID
WHERE I.DATETIME > O.DATETIME
ORDER BY I.DATETIME

- ANIMAL_OUTS 테이블의 DATETIME값과 ANIMAL_INS 테이블의 DATETIME 값을 비교해서 ANIMAL_OUTS의 테이블의 DATETIME 값이 더 빠른 경우의 값을 조회한다
- ANIMAL_INS 테이블의 DATETIME 컬럼의 오름차 순으로 정렬한다
- TABLE_A LEFT JOIN TABLE_B ON TABLE_A.KEY = TABLE_B.KEY


6. 오랜 기간 보호한 동물(1)

SELECT I.NAME, I.DATETIME
FROM ANIMAL_INS I LEFT JOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_ID 
WHERE O.ANIMAL_ID IS NULL
ORDER BY I.DATETIME ASC
LIMIT 3

- ANIMAL_INS 테이블에는 ANIMAL_ID 값이 있으나 ANIMAL_OUTS 테이블에는 ANIMAL_ID 값이 없는 동물을 조회한다
- ANIMAL_INS 테이블의 보호시작일(DATETIME) 순으로 조회한다
- 상위 3개 값을 추출한다 (LIMIT 3)
- TABLE_A LEFT JOINTABLE_B ON TABLE_A.KEY = TABLE_B.KEY WHERE TABLE_B.KEY IS NULL


7. 보호소에서 중성화한 동물 : 보호소에 들어올 당시에는 중성화되지 않았지만, 보호소를 나갈 당시에는 중성화된 동물의 아이디와 생물 종, 이름을 조회하는 아이디 순으로 조회하는 SQL 문을 작성해주세요.

SELECT O.ANIMAL_ID, O.ANIMAL_TYPE, O.NAME
FROM ANIMAL_OUTS O LEFT JOIN ANIMAL_INS I ON O.ANIMAL_ID = I.ANIMAL_ID
WHERE O.SEX_UPON_OUTCOME IN ('Spayed Female', 'Neutered Male')
  AND I.SEX_UPON_INTAKE IN ('Intact Male', 'Intact Female')
ORDER BY O.ANIMAL_ID

- 중성화 되지 않은 상태 : Intact Male, Intact Female
- 중성화된 상태 : Neutered Male, Spayed Female
- ANIMAL_INS 테이블의 SEX_UPON_INTAKE 값이 중성화 되지 않은 상태 값이고, ANIMAL_OUTS 테이블의 SEX_UPON_OUTCOME 값이 중성화된 값을 조회한다
- ANIMAL_OUT 테이블의 ANIMAL_ID 컬럼을 오름차 순으로 조회한다
- TABLE_A LEFT JOIN TABLE_B ON TABLE_A.KEY = TABLE_B.KEY

반응형