jeeyeonLIM / coding_test

Let's practice the coding test!
1 stars 0 forks source link

Level4. 보호소에서 중성화한 동물 #6

Open jeeyeonLIM opened 4 years ago

jeeyeonLIM commented 4 years ago

문제 요약

jeeyeonLIM commented 4 years ago

내 코드

ver1. LEFT OUTER JOIN + regexp

SELECT A.ANIMAL_ID, ANIMAL_TYPE, NAME
FROM( -- 중성화x
    SELECT DISTINCT ANIMAL_ID, ANIMAL_TYPE, NAME
    FROM ANIMAL_INS
    WHERE SEX_UPON_INTAKE LIKE 'Intact%'
) A
LEFT OUTER JOIN(-- 중성화o
    SELECT DISTINCT ANIMAL_ID
    FROM ANIMAL_OUTS
    WHERE SEX_UPON_OUTCOME regexp 'Spayed|Neutered'
) B 
on A.ANIMAL_ID = B.ANIMAL_ID
where B.ANIMAL_ID is not null

✔️ regexp 사용해봤다. WHERE SEX_UPON_OUTCOME regexp 'Spayed|Neutered'

✔️ 정규식 정리가 잘되어있어서 가져왔다.

기호 설명
? 글자 0 개 또는 1 개 일치 -> books? : book, books
. 단일문자를 매치시킨다. 즉 문자 하나 일치 ->.ap : map, jap, kap, lap ....
+ 문자 여러개 반복(1자 이상 일치) -> la+ : la, laa,laaa ...
* 문자 여러개 반복(0자 이상 일치) -> la* : l, la, laa, laaa...
^ 문자열의 처음 -> ^1 -> 1로 시작되는 줄
$ 문자열의 끝 -> 1$ -> 1로 끝나는 줄
() 그룹화 ->('(abc)*') : 'abc'문자열이 연속적으로 0 번 이상
[문자들..] 괄호안의 어느 문자와 일치 -> [0-9] : 모든 숫자, [A-Za-z] : 모든 영문자
{숫자} 숫자만큼 반복
| OR 연산 (또는) -> ('A B') : A 또는 B
- 문자의 지정 범위는 -를 사용한다. -> [0-9] : 모든 숫자 , [A-Za-z] : 모든 영문자
like 전체의 값에서 매치시킨다.

ver2. INNER JOIN + LIKE OR

SELECT A.ANIMAL_ID, ANIMAL_TYPE, NAME
FROM( -- 중성화x
    SELECT DISTINCT ANIMAL_ID, ANIMAL_TYPE, NAME
    FROM ANIMAL_INS
    WHERE SEX_UPON_INTAKE LIKE 'Intact%'
) A
INNER JOIN(-- 중성화o
    SELECT DISTINCT ANIMAL_ID
    FROM ANIMAL_OUTS
    WHERE (SEX_UPON_OUTCOME like 'Spayed%') or (SEX_UPON_OUTCOME like 'Neutered%')
) B 
on A.ANIMAL_ID = B.ANIMAL_ID
where B.ANIMAL_ID is not null
jmpark0118 commented 4 years ago

정규식 정리 넘넘 유익하네요~ 잘 배우고 갑니다~^^