[MYSQL]프로그래머스 JOIN

JEEWOO SUL·2021년 9월 1일
1

💻 알고리즘

목록 보기
16/36
post-thumbnail
post-custom-banner

JOIN

  • 2개 이상의 table이나 DB를 연결하여 데이터를 검색하는 방법
  • 자신이 검색하고 싶은 컬럼이 다른 테이블에 있을 경우 주로 사용하며 여러 개의 테이블을 마치 하나의 테이블인 것처럼 활용하는 방법
  • 보통 Primary Key 혹은 Foreign key로 두 테이블을 연결함
  • 테이블을 연결하려면 적어도 하나의 column은 서로 공유되어야 한다

JOIN 종류

종류설명
INNER JOIN교집합, A 테이블과 B 테이블이 모두 가지고 있는 데이터만 검색
LEFT OUTER JOINA테이블의 모든 데이터+A테이블과 B테이블의 중복되는 값
RIGHT OUTER JOINB테이블의 모든 데이터+A테이블과 B테이블의 중복되는 값
FULL OUTER JOINA테이블이 가지고 있는 데이터+B테이블이 가지고있는 데이터
CROSS JOIN모든 경우의 수를 전부 표현해주는 방식.
기준테이블이 A일경우 A의 데이터 한 ROW를 B테이블 전체와 JOIN하는 방식
SELF JOIN자기자신과 자기자신을 조인한다는 의미
하나의 테이블을 여러번 복사해서 조인한다

🎯 문제

사진을 클릭하면 프로그래머스 JOIN 문제로 이동합니다.

1. 없어진 기록찾기

💻 SQL 코드

SELECT b.ANIMAL_ID, b.NAME
FROM ANIMAL_INS a 
RIGHT JOIN ANIMAL_OUTS b ON a.ANIMAL_ID = b.ANIMAL_ID
WHERE a.ANIMAL_ID IS NULL
ORDER BY ANIMAL_ID;

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

💻 SQL 코드

SELECT b.ANIMAL_ID, b.NAME
FROM ANIMAL_INS a
RIGHT JOIN ANIMAL_OUTS b ON a.ANIMAL_ID = b.ANIMAL_ID
WHERE a.DATETIME >= b.DATETIME
ORDER BY a.DATETIME;

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


Limit 연산자를 이용하여 쿼리결과 개수를 제한할 수 있다.

SELECT * FROM 테이블명 Limit 개수(정수);

✔ Limit 다른 사용법
Limit 시작할 레코드 번호, 반환할 결과의 수

ex) 음악 차트에서 20위에서 30위까지 출력하시오.

SELECT * FROM music_chart Limit 19,10;

💻 SQL 코드

SELECT a.NAME, a.DATETIME
FROM ANIMAL_INS a
LEFT JOIN ANIMAL_OUTS b ON a.ANIMAL_ID = b.ANIMAL_ID
WHERE b.ANIMAL_ID IS NULL 
ORDER BY a.DATETIME
LIMIT 3;

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

⭐ 특정 문자포함 검색 LIKE & REGEXP

LIKE 연산자는 특정 문자가 포함되어 있는 데이터를 검색할 때 사용한다.

  1. 특정 문자로 시작하는 데이터 검색
SELECT [컬럼명] FROM [테이블명] WHERE [필드명] LIKE '특정문자열%';
  1. 특정 문자로 끝나는 데이터 검색
SELECT [컬럼명] FROM [테이블명] WHERE [필드명] LIKE '%특정문자열';
  1. 특정 문자로 포함하는 데이터 검색
SELECT [컬럼명] FROM [테이블명] WHERE [필드명] LIKE '%특정문자열%';
  1. 복수 개의 특정 문자를 포함하는 데이터 검색
    특정 문자열을 '|'를 기준으로 나눈다.
SELECT [컬럼명] FROM [테이블명] WHERE [필드명] REGEXP '특정문자열|특정문자열2';

💻 SQL 코드

SELECT b.ANIMAL_ID, b.ANIMAL_TYPE, b.NAME
FROM ANIMAL_INS a
INNER JOIN ANIMAL_OUTS b ON a.ANIMAL_ID = b.ANIMAL_ID
WHERE a.SEX_UPON_INTAKE LIKE 'Intact%'
AND NOT b.SEX_UPON_OUTCOME LIKE 'Intact%'; 

profile
느리지만 확실하게 🐢
post-custom-banner

0개의 댓글