Open jeeyeonLIM opened 4 years ago
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 | 전체의 값에서 매치시킨다. |
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
정규식 정리 넘넘 유익하네요~ 잘 배우고 갑니다~^^
문제 요약
테이블:
ANIMAL_INS
테이블은 동물 보호소에 들어온 동물 정보를 담은 테이블,ANIMAL_OUTS
은 나간 테이블칼럼 : 각각
ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE
는 각각 동물의아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부
를 나타냄.문제 : 보호소에서 중성화 수술을 거친 동물 정보를 알아보려 합니다. 보호소에 들어올 당시에는 중성화1되지 않았지만, 보호소를 나갈 당시에는 중성화된 동물의 아이디와 생물 종, 이름을 조회하는 아이디 순으로 조회하는 SQL 문을 작성해주세요.
참고 : 중성화를 거치지 않은 동물은 성별 및 중성화 여부에 Intact, 중성화를 거친 동물은 Spayed 또는 Neutered라고 표시되어있습니다
링크 : https://programmers.co.kr/learn/courses/30/lessons/59045