MySQL + Programmers_5

naughty _deer·2022년 4월 26일
0

MySQL

목록 보기
7/13
post-thumbnail

JOIN

문제 1. NULL 처리하기

SELECT OUTS.ANIMAL_ID, OUTS.NAME
FROM ANIMAL_OUTS AS OUTS
LEFT OUTER JOIN ANIMAL_INS AS INS
ON OUTS.ANIMAL_ID = INS.ANIMAL_ID
WHERE INS.ANIMAL_ID is NULL
ORDER BY OUTS.ANIMAL_ID

문제 2. 있었는데요 없었습니다.

  1. LEFT OUTER JOIN
SELECT INS.ANIMAL_ID, INS.NAME
FROM ANIMAL_INS as INS
LEFT OUTER JOIN ANIMAL_OUTS as OUTS
ON INS.ANIMAL_ID = OUTS.ANIMAL_ID
WHERE INS.DATETIME > OUTS.DATETIME
ORDER BY INS.DATETIME
  1. JOIN
SELECT INS.ANIMAL_ID, INS.NAME
FROM ANIMAL_INS as INS JOIN ANIMAL_OUTS as OUTS
ON INS.ANIMAL_ID = OUTS.ANIMAL_ID
WHERE INS.DATETIME > OUTS.DATETIME
ORDER BY INS.DATETIME
  1. on 이 없는 JOIN
SELECT INS.ANIMAL_ID, INS.NAME
FROM ANIMAL_INS as INS JOIN ANIMAL_OUTS as OUTS
WHERE INS.ANIMAL_ID = OUTS.ANIMAL_ID AND INS.DATETIME > OUTS.DATETIME
ORDER BY INS.DATETIME
  1. ','으로 JOIN 생략, on도 WHERE로 표현
SELECT i.animal_id, i.name
FROM animal_ins as i, animal_outs as o
WHERE i.animal_id = o.animal_id and i.DATETIME > o.DATETIME
ORDER BY i.DATETIME
  1. 에러 (on 없는 LEFT JOIN)
SELECT INS.ANIMAL_ID, INS.NAME
FROM ANIMAL_INS as INS
LEFT JOIN ANIMAL_OUTS as OUTS
WHERE INS.ANIMAL_ID = OUTS.ANIMAL_ID AND INS.DATETIME > OUTS.DATETIME
ORDER BY INS.DATETIME

문제 3. 오랜 기간 보호한 동물(1)

SELECT INS.NAME, INS.DATETIME
FROM ANIMAL_INS as INS
LEFT JOIN ANIMAL_OUTS as OUTS
ON INS.ANIMAL_ID = OUTS.ANIMAL_ID
WHERE OUTS.ANIMAL_ID IS NULL
ORDER BY INS.DATETIME
LIMIT 3

문제 4. 보호소에서 중성화한 동물

SELECT O.ANIMAL_ID, O.ANIMAL_TYPE, O.NAME
FROM ANIMAL_OUTS as O
LEFT JOIN ANIMAL_INS as I
ON O.ANIMAL_ID = I.ANIMAL_ID
WHERE I.SEX_UPON_INTAKE != O.SEX_UPON_OUTCOME
ORDER BY I.ANIMAL_ID
SELECT I.ANIMAL_ID, I.ANIMAL_TYPE, I.NAME 
FROM ANIMAL_INS as I JOIN ANIMAL_OUTS as O 
WHERE I.ANIMAL_ID = O.ANIMAL_ID AND I.SEX_UPON_INTAKE != O.SEX_UPON_OUTCOME
ORDER BY I.ANIMAL_ID
SELECT A.ANIMAL_ID, A.ANIMAL_TYPE, A.NAME
FROM ANIMAL_INS A JOIN ANIMAL_OUTS B
ON A.ANIMAL_ID=B.ANIMAL_ID
WHERE A.SEX_UPON_INTAKE LIKE 'INTACT%'
AND (B.SEX_UPON_OUTCOME LIKE 'SPAYED%'
OR B.SEX_UPON_OUTCOME LIKE 'NEUTERED%')
ORDER BY A.ANIMAL_ID

사용된 명령어

JOIN

JOIN에 관한 포스팅
https://velog.io/@anotheryoung/MySQLJOIN

LIKE '%특정값%'

WHERE에서 조건 걸때,
문자열이 특정 조건에 부합하는지 확인할 때 사용.

  1. %를 이용한 LIKE

    • LIKE '특정값%'
      특정 값으로 시작하는 지 확인
    • LIKE '%특정값'
      특정 값으로 끝나는 지 확인
    • LIKE '%특정값%'
      특정 값이 들어가는 지 확인
  2. _를 이용한 LIKE

    • LIKE '_' (언더 바 1개)
      문자열 길이가 1인지 확인
    • LIKE '___' (언더 바 3개)
      문자열 길이가 3인지 확인
    • LIKE '_' (언더 바 5개)
      문자열 길이가 5인지 확인
  3. 응용

    • LIKE 'C_A'
      C로 시작해서 A로 끝나는데, 총 길이가 3인 문자열.
    • LIKE '____tion%' (언더 바 4개)
      tion으로 끝나는데 총 길이가 8인 문자열

공백 또한 포함되기 때문에, 유의하자.
사용자의 입력 값을 받는다면 trim이 필수적이다.

  • 특수문자 '%' or '_'을 검색하고 싶다면?
    역슬래시 '\'를 앞에 붙이면 가능하다.

AND, OR

WHERE에서 조건 걸 때 사용.

  • where에서는 ','를 사용하지 않는다.
profile
개발자로 취업하기

0개의 댓글